I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

ازاي تحمي تطبيق فلاتر (Flutter App) بتاعك من الهكرز وتمنع الهندسة العكسية (Reverse Engineering)؟

ازاي تحمي تطبيق فلاتر (Flutter App) بتاعك من الهكرز وتمنع الهندسة العكسية (Reverse Engineering)؟ أهلاً بيك يا بشمهندس في مقال جديد من سلسلة حماية وتأمين التطبيق

ازاي تحمي تطبيق فلاتر (Flutter App) بتاعك من الهكرز وتمنع الهندسة العكسية (Reverse Engineering)؟
Reading Count: 3

ازاي تحمي تطبيق فلاتر (Flutter App) بتاعك من الهكرز وتمنع الهندسة العكسية (Reverse Engineering)؟

أهلاً بيك يا بشمهندس في مقال جديد من سلسلة حماية وتأمين التطبيقات. تخيل معايا السيناريو ده: قضيت شهور طوال بتكتب كود نظيف، وبتظبط الـ UI، وربطت الـ Backend، وطلعت بأحسن أداء لتطبيق الفلاتر (Flutter) بتاعك. نزلت التطبيق على متجر جوجل بلاي (Google Play)، وبعدها بكم يوم تفاجأ إن فيه شخص قدر يفك تشفير التطبيق، ويسرق مفاتيح الـ API (API Keys) بتاعتك، أو الأسوأ من كده، إنه عدل على APK ونزل نسخه مهكرة بتسرق بيانات المستخدمين!

الوجع ده حقيقي ومؤلم لأي مبرمج أو صاحب شركة ناشئة. عشان كده، النهاردة هنتكلم بالتفصيل عن تأمين تطبيقات فلاتر ضد الهندسة العكسية (Reverse Engineering)، وإزاي تصعبها على أي هكر يحاول يفتح التطبيق ويقرأ الكود بتاعك.

يعني إيه هندسة عكسية (Reverse Engineering) لتطبيقات الموبايل؟

باختصار شديد، لغة دارت (Dart) اللي مكتوب بيها فلاتر بتتعمل لها كومبايل (Compile) لحاجة اسمها بيلد كود (AOT - Ahead Of Time) في الموبايل، بس للأسف، التطبيقات دي مش مستحيلة القراءة 100%. الهاكر يقدر يستخدم أدوات زي APKtool أو JADX أو حتى يفك ملفات الـ libapp.so عشان يوصل للـ Logic بتاعك، ويطلع الـ Base URLs ومفاتيح السيرفرات، أو يغير في الـ Smali code لو فيه جزء خاص بنظام أندرويد (Android).

الهدف من حماية التطبيق مش إطلاقاً إنك تعمل سور مستحيل اختراقه (مفيش حاجة اسمها آمن 100% في البرمجة)، لكن الهدف هو رفع تكلفة الهجوم (Raising the Attack Cost)، بمعنى إن الهكر اللي هيقعد ساعتين يفك التطبيق بتاعك، المفروض يقعد شهور عشان يزهق ويسيبك في حالك.

الخطوة الأولى والأهم: تشويش الكود (Code Obfuscation) في فلاتر

أحسن وأسهل سلاح فلاتر مديهولك هو الـ Obfuscation. التشويش ده بيعمل إيه؟ بياخد أسماء الفاكشنز (Functions)، والفريابلس (Variables)، والكلاسات (Classes)، ويحولها لرموز غامضة زي a و b و c، فلو حد فتح الكود مش هيفهم أي حاجة خالص ولا هيعرف اسم فانكشن معينة بتعمل إيه.

عشان تعمل أوبفوسكيشن لتطبيق فلاتر على أندرويد، هتشغل الأمر ده في التيرمينال (Terminal):

flutter build apk --obfuscate --split-debug-info=//debug-info/

الكلمة المفتاحية هنا هي --obfuscate دي اللي بتعمل السحر، ومعاها بنستخدم --split-debug-info عشان نحفظ الـ Symbols اللي بتساعدك تقرأ الـ Crash Reports بعد كده (لو التطبيق ضرب عند مستخدم، عشان تعرف الخطأ فين بالضبط من خلال الـ Stack Trace المشفر).

حماية مفاتيح الـ API (API Keys Protection) وعدم حرقها في الكود

الغلطة الشهيرة اللي وقع فيها 90 من المبرمجين المبتدئين، هي إنهم يحطوا مفاتيح الـ Firebase أو Google Maps أو الـ Payment Gateways جوه فايل Dart عادي بالشكل ده:

const String apiKey = "AIzaSyD-123456789abcdefg";

ده كده انت بتعزم الهكر على شاي وبيتزا! المفروض المفاتيح دي ماتتكتبش صريحة في الكود. الحلول البديلة:

  • استخدام ملفات البيئة (Environment Variables) عبر حزم زي flutter_dotenv.
  • استخدام الـ Native side (Android/iOS) وتخزين المفاتيح في ملفات local.properties أو BuildConfig وقراءتها من هناك.
  • الأفضل على الإطلاق: نقل العمليات الحساسة للـ Backend (Server-side) وخلي التطبيق يكلم السيرفر بتاعك بدل ما يكلم الـ Third-party APIs مباشرة.

اكتشاف الروت والـ Jailbreak (Root & Jailbreak Detection)

عشان تحمي تطبيقك تماماً من التلاعب، لازم تتأكد إن الموبايل اللي شغال عليه التطبيق مش معمول له Root (في أندرويد) أو Jailbreak (في آي أو إس). لأن في الحالة دي، الهكر بيكون ليه صلاحيات كاملة يقدر يراقب بيها الـ Memory، ويعمل Intercept للـ Network Requests.

عشان تعمل كده، تقدر تستخدم حزمة قوية ومجربة زي flutter_jailbreak_detection:


bool isJailBroken = false;
try {
  isJailBroken = await FlutterJailbreakDetection.jailbroken;
} catch (PlatformException) {
  isJailBroken = false;
}
if (isJailBroken) {
  // اقفل التطبيق أو حذره إن جهازه مش آمن
}

منع الـ Screen Capture والـ Screenshots في الصفحات الحساسة

لو تطبيقك فيه بيانات مالية، أو شات سري، أو بيانات شخصية، لازم تمنع المستخدم إنه يأخد لقطة شاشة (Screenshot) أو يفتح الـ Recent Apps فيظهر محتوى التطبيق (App Switcher Preview). في أندرويد وأي أو إس، تقدر تستخدم حزمة window_manager أو flutter_windowmanager عشان تفعل خاصية الـ FLAG_SECURE.

await FlutterWindowManager.addFlags(FlutterWindowManager.FLAG_SECURE);

الأمر البسيط ده بيمنع أندرويد تماماً إنه ياخد سكرين ش็ت للصفحة، وبيخلي التطبيق أسود في قائمة التطبيقات المفتوحة.

خاتمة ونصيحة من أخ

يا بشمهندس، الأمن السيبراني (Cybersecurity) مش "ميزة" بتضيفها للتطبيق في آخر يومين قبل التسليم، دي "ثقافة" وعقلية لازم تبني بيها التطبيق من أول سطر كود. اعمل دايماً Obfuscation للريليس بيلد، ابعد المفاتيح الحساسة عن الكود المباشر، واهتم بـ SSL Pinning عشان تمنع هجمات الـ Man-in-the-Middle. بالتوفيق، ودايماً اكتب كود آمن ونظيف!


Share

Related posts

Aug 04, 2026 • 1 min read
Reading Count: 3
تصميم أنيميشن 3D بسيط داخل Flutter بدون استخدام محركات ألعاب

أهلاً بيك يا صديقي المبرمج في مقال جديد من سلسلة شروحات فلاتر (Flutter Tutorials) الممتعة. لو انت شغ...

Aug 04, 2026 • 1 min read
Reading Count: 4
عنوان تلقائي

يا هلا بيك يا بشمهندس في عالم تطوير الديسكتوب! أكيد, زي أي مطور فلاتر شاطر, عملت تطبيقات موبايل جامد...

Aug 03, 2026 • 1 min read
Reading Count: 6
ازاي تحل مشكلة تهنيج تطبيق فلاتر (Flutter App Freezing) وتخلي الأداء صاروخ باستخدام Isolate Spawn

فئات المقال: Tutorials, Coding Challenges ازاي تحل مشكلة تهنيج تطبيق فلاتر (Flutter App Freezing) وت...