« الهندسة العكسية (Reverse Engineering) » هي استعادة منطق وهيكل التطبيق المحمول دون الوصول إلى الكود المصدري. في سياق Android وiOS، يعني هذا فك ترجمة الملفات الثنائية DEX/APK وMach-O/IPA لاستخراج الخوارزميات ومفاتيح التشفير ونقاط نهاية API ومنطق الأعمال. وفقًا لـ Veracode Security Research (2025)، أكثر من 60% من التطبيقات المحمولة في أفضل 200 تحتوي على مؤشر واحد على الأقل يبسط الهندسة العكسية. الهندسة العكسية لا تُستخدم فقط للهجمات، بل أيضًا لتدقيق الأمن وتحليل براءات الاختراع واختبار الاختراق.
النقاط الرئيسية
الهندسة العكسية هي تخصص تحليل البرمجيات الهادف إلى استعادة خصائص ومنطق وهيكل التطبيق من تمثيله الثنائي. بالنسبة للتطبيقات المحمولة، تكون أشياء التحليل هي ملفات APK (Android) وIPA (iOS)، والتي تحتوي على كود مجمع وموارد وبيانات وشهادات. نتيجة الهندسة العكسية هي استخراج الخوارزميات والبروتوكولات ومفاتيح التشفير ومخططات API ومنطق الأعمال.
تنقسم أهداف الهندسة العكسية إلى مشروعة وغير مشروعة. المشروعة: تحليل البرمجيات الضارة لإنشاء أدوات أمنية، تدقيق التطبيقات الخاصة بالبحث عن الثغرات، ضمان التوافق مع البروتوكولات المغلقة، تحليل براءات الاختراع والتعليم. غير المشروعة: سرقة الملكية الفكرية، تجاوز قيود الترخيص، إنشاء نسخ مقرصنة وتعديل التطبيقات لسرقة بيانات المستخدمين. وفقًا لـ Google Play Protect (2025)، 78% من التعديلات الضارة لتطبيقات البنوك تُنشأ بناءً على APK الأصلي الذي تم معالجته عبر الهندسة العكسية.
تشمل منهجية الهندسة العكسية اتجاهين رئيسيين: التحليل الثابت (دون تشغيل التطبيق) والتحليل الديناميكي (أثناء التنفيذ). كل نهج يوفر مستوى مختلفًا من المعلومات. التحليل الثابت يعطي صورة كاملة للكود ولكن دون بيانات وقت التنفيذ. التحليل الديناميكي يكشف السلوك الحقيقي وتدفق البيانات واستدعاءات الشبكة، ولكن فقط ضمن سيناريو تنفيذ محدد. الهندسة العكسية المهنية تدمج دائمًا كلا النهجين.
التحليل الثابت هو المرحلة الأولى من الهندسة العكسية. يتم فك ضغط APK أو IPA الأصلي، ويتم تحليل كل مكون بشكل منفصل. الأهداف الرئيسية: بايت كود DEX، الموارد، البيان، المكتبات الأصلية (.so، .dylib) والبيانات الوصفية.
jadx هو الأداة الرئيسية للتحليل الثابت لتطبيقات Android. يقوم بتحويل بايت كود DEX إلى كود Java قابل للقراءة بفقدان أدنى. jadx يدعم: فك ترجمة multidex، التعرف على اللامدا والفئات Kotlin المضمنة، والتصدير إلى مشروع Gradle. بالنسبة للكود المشفه (ProGuard)، jadx يعرض الكود بأسماء a، b، c، ولكن هيكل الفئات وتسلسل الاستدعاء يتحفظان. وفقًا لاختبارات مستقلة، jadx يفك ترجمة 85–92% من الكود بشكل صحيح حتى مع التشفيه.
apktool يفك تشفير APK إلى كود smali (مجمع DEX) ويستعيد الموارد بشكل قابل للقراءة: يتم تحويل AndroidManifest.xml من AXML إلى XML قابل للقراءة، والتخطيطات إلى ترميز XML، وstrings.xml إلى نص عادي. apktool يسمح بتعديل الموارد وإعادة تجميع APK. بعد فك الضغط عبر apktool واستبدال الموارد، يمكن تثبيت التطبيق بمحتوى معدل.
Ghidra (وكالة الأمن القومي) هي إطار عمل للهندسة العكسية أساسية لتحليل مكتبات .so في Android و.dylib في iOS. Ghidra تقوم بفك تجميع كود ARM64، وتعيد بناء كود C شبه المركب، وتبني رسومات الاستدعاء. للهندسة العكسية المحمولة، تستخدم Ghidra لتحليل التنفيذات الأصلية للتشفير وآليات DRM. Ghidra تدعم النصية بلغتي Python وJava لأتمتة التحليل.
# فك ضغط APK وفك الترجمة
$ jadx -d output_dir app.apk
# فك ضغط الموارد عبر apktool
$ apktool d app.apk -o app_unpacked
# تحليل المكتبة الأصلية عبر Ghidra
$ ghidra app.apk/lib/arm64-v8a/libnative.so
# البحث عن ثوابت السلسلة في DEX
$ strings classes.dex | grep -i api_key
يتم التحليل الديناميكي على تطبيق قيد التشغيل. يتصل المحلل بالعملية ويعترض استدعاءات الدوال والوسائط وقيم الإرجاع في الوقت الحقيقي.
Frida هي الأداة الرائدة للتحليل الديناميكي للتطبيقات المحمولة. تقوم Frida بحقن محرك JavaScript في عملية التطبيق (Android ART أو تطبيق iOS) وتسمح باعتراض استدعاءات كل من دوال Java/Objective-C وC/C++. باستخدام Frida، يمكن لمهندسي العكس: تسجيل جميع استدعاءات طريقة AES.decrypt() مع الوسائط، استبدال قيم الإرجاع بشكل تعسفي، إزالة SSL-pinning عبر Universal Android SSL Unpin، وتتبع الاستدعاءات الأصلية عبر Stalker. Frida تعمل دون تعديل APK/IPA، ما يجعلها لا غنى عنها لاختبارات الاختراق.
Objection يوفر أوامر جاهزة لمهام الهندسة العكسية الشائعة دون الحاجة لكتابة نصوص JavaScript: disable-pinning (تعطيل SSL pinning)، dump-keychain (iOS)، explore (تصفح تسلسل الفئات)، memory search (البحث عن السلاسل في الذاكرة). Objection يسمح بإجراء تحليل ديناميكي كامل دون سطر واحد من الكود. لتطبيقات iOS، Objection يبحث ويسجل تلقائيًا استدعاءات NSURLSession، CFNetwork و NSKeyedArchiver.
Xposed هو إطار عمل لنظام Android يعمل عن طريق استبدال ملف app_process في Zygote. على عكس Frida، Xposed لا يتطلب وصول root بعد التثبيت. وحدات Xposed يمكنها اعتراض استدعاءات الدوال في أي تطبيق. للهندسة العكسية، Xposed مناسب للتحليل طويل المدى: يتم تثبيت الوحدة وتعمل بشكل مستمر، مسجلة سلوك التطبيق في سيناريوهات مختلفة. Xposed يدعم Android حتى الإصدار 8.1؛ لنظام Android 9+ يتم استخدام EdXposed المبني على SandHook.
// Frida: اعتراض طريقة decrypt() في التطبيق
let aesClass = Java.use("javax.crypto.Cipher");
aesClass.doFinal.overload(
"[B", "int", "int"
).implementation = function(
input, offset, len
) {
console("[AES] decrypt called, len=" + len);
return this.doFinal(input, offset, len);
};
يتكون سير العمل القياسي للهندسة العكسية من خطوات متسلسلة، كل منها يوفر مستوى معينًا من المعلومات.
يدرس المحلل APK على مستوى البيانات الوصفية: targetSdk، uses-permission (ما الأذونات المطلوبة)، intent-filter والمكونات المصدرة. يمكن للأذونات أن تكشف عن API المستخدمة (android.permission.CAMERA → كاميرا، android.permission.RECORD_AUDIO → صوت). تحدد الأنشطة المصدرة نقاط الدخول دون ترخيص. تتم هذه المرحلة عبر aapt أو ApkAnalyzer وتستغرق 1–2 دقيقة.
يتم فك ضغط APK، ويتم إدخال classes.dex (أو multidex) إلى jadx. الناتج هو كود Java/Kotlin منظم في حزم. يبحث المحلل عن الفئات الرئيسية: CryptoUtils، ApiClient، AuthManager، DatabaseHelper، ويتحقق من الخوارزميات المستخدمة. إذا كان الكود يحتوي على سلاسل مثل AES/CBC/PKCS5Padding، فإن التطبيق يستخدم التشفير ويجب العثور على المفتاح. في هذه المرحلة يتم تحديد: المفاتيح المطمرنة، عناوين API، رمز OAuth والأسرار. دون التشفيه، يقرأ كود التطبيق بأكمله كمشروع Java عادي.
بعد إعداد Frida أو Objection لتعطيل SSL-pinning، يقوم المحلل بتشغيل التطبيق واعتراض حركة المرور عبر Burp Suite أو mitmproxy. تكشف بيانات حركة المرور عن مخطط API: ما نقاط النهاية، ما الوسائط، وبأي تنسيق. إذا امكن، يقوم المحلل بتعديل الطلبات ويتحقق من استجابة الخادم لبيانات غير صحيحة أو ضارة. عدم وجود التحقق على جانب الخادم هو ثغر مباشر يتم اكتشافه في هذه الخطوة.
يتم تسجيل نتائج التحليل بشكل منظم. لكل نقطة ضعف مكتشفة، يتم تحديد: الفئة والطريقة، وصف الثغر، ناقل الاستغلال وتوصية بالإصلاح. يتم نقل مجموعة البيانات هذه إلى فريق التطوير أو تستخدم لإعداد تقرير اختبار الاختراق. في البيئات الآلية (MobSF)، يتم إنشاء التقرير تلقائيًا بناءً على نتائج التحليل الثابت والديناميكي.
الهندسة العكسية لتطبيقات iOS أكثر صعوبة من Android بسبب معمارية الأمان الأكثر صرامة لدى Apple وعدم وجود وصول مباشر إلى نظام الملفات على الأجهزة القياسية. يلزم jailbreak لتحليل iOS.
يحتوي أرشيف IPA على ثنائي Mach-O — تنسيق الملفات التنفيذية العام لشركة Apple. يتم استخدام Hopper Disassembler أو IDA Pro لفك الترجمة. على عكس Android DEX، الذي يفك ترجمته إلى Java بفقدان أدنى، يحتوي Mach-O على كود ARM64 أصلي يتم إعادة بنائه إلى كود C شبه المركب بدقة أقل. Hopper يحقق 60–70% من إعادة البناء، والباقي يجب تحليله على مستوى المجمع.
Frida على iOS تتطلب jailbreak وتثبيت frida-server. بعد الاتصال، Frida تعترض طرق Objective-C عبر توجيه رسائل API. لتطبيقات iOS، يتضمن السيناريو النموذجي: اعتراض NSURLSession.dataTaskWithRequest لتسجيل طلبات HTTP، اعتراض NSKeyedUnarchiver لتحليل البيانات المسلسلة وتتبع استعلامات CoreData عبر frida-trace. أصبحت Frida متاحة لنظام iOS 15–17 مع إصدار jailbreak Dopamine.
قد تتضمن الهندسة العكسية تعديل IPA ثم إعادة تغليفه وتثبيته على الجهاز. تشمل الأدوات: ipatool لفك الضغط، MachOView لعرض الأقسام وoptool لحقن الكود. بعد التعديل، يتم توقيع IPA عبر ldid أو fastlane sigh للتثبيت على جهاز به jailbreak. لنظام iOS 16+، يتم التحقق من توقيع الكود على مستوى Secure Enclave، ولن يعمل IPA المعدل على جهاز غير مخترق.
// Frida: اعتراض طلبات HTTP في تطبيق iOS
if (ObjC.available) {
let NSURLSession = ObjC.classes.NSURLSession;
let dataTaskWithRequest = ObjC.protocol("NSURLSessionDelegate")
.method("- URLSession:dataTask:didReceiveData:");
Interceptor.attach(dataTaskWithRequest.implementation, {
onEnter(args) {
let data = ObjC.Object(args[3]);
console("[HTTP Response]", data.toString());
}
});
}
تتبع الحماية من الهندسة العكسية مبدأ الأمان متعدد الطبقات: لا يوفر أي طريقة حماية 100%، ولكن المزيج يجعل الهندسة العكسية غير مجدية اقتصاديًا.
المستوى الأساسي هو ProGuard لنظام Android، الذي يستبدل أسماء الفئات والدوال بأسماء من حرف واحد. للحماية المعززة، يضيف DexGuard استحثاث التحميل (دوال متعددة بتوقيعات مختلفة ونفس الاسم) وتشفير السلاسل AES-256. يزيد التشفيه وقت تحليل الكود من 5 دقائق إلى 5–20 ساعة حسب المستوى. DexGuard يقوم أيضًا بتشفيه تدفق التحكم، مما يجعل الكود غير قابل للقراءة بواسطة jadx.
جميع ثوابت السلاسل — عناوين URL، مفاتيح، رموز، استعلامات SQL — تتم تشفيرها في وقت البناء وفك تشفيرها في وقت التنفيذ. يحمي هذا من التحليل الثابت للسلاسل في ملفات DEX. المهاجم الذي يشغل app.apk على strings لن ير أي نقطة نهاية API. حتى بعد فك الترجمة، تظهر جميع السلاسل كبيانات ثنائية. يمكن لكل سلسلة استخدام مفتاح منفصل، ما يعقد عملية فك التشفيه.
يقوم وكيل RASP داخل التطبيق باكتشاف Frida والتصحيح في وقت التنفيذ. تمنع فحوص السلامة عبر هاش SHA-256 للملف APK تشغيل نسخة معدلة من التطبيق. إذا لم يتطابق هاش APK مع الهاش المرجعي (المخزن في الطبقة الأصلية)، ينتهي التطبيق. يحجز هذا الهجومات القائمة على تعديل APK، بما في ذلك إعادة التغليف.
يجب أن يتم تنفيذ منطق الأعمال الحرج على الخادم، ليس على العميل. حتى لو قام المهاجم بفك ترجمة التطبيق بالكامل، يبقى كود الخادم غير قابل للوصول. التحقق على جانب الخادم من جميع الطلبات والوسائط يمنع استغلال الثغرات التي تم اكتشافها أثناء الهندسة العكسية. المصادقة على جانب الخادم عبر Play Integrity API أو App Attest توكد أن الطلب يأتي من تطبيق حقيقي غير معدل.
الأسئلة الشائعة
في الولايات المتحدة، تتنظم الهندسة العكسية بموجب DMCA — يسمح بها للتوافق واختبارات الأمان وأغراض الأرشفة. يحظر تجاوز تدابير الحماية التكنولوجية (DRM). في أوروبا، المادة 6 من EUCD مماثلة DMCA. في روسيا، قد تعتبر الهندسة العكسية دون موافقة صاحب الحق انتهاكًا لحقوق التأليف. الاستشارة القانونية إجبارية قبل الهندسة العكسية التجارية.
لا. أي كود يتم تنفيذه على جهاز المهاجم يمكن تحليله — هذا قيد أساسي لنموذج الأمان على جانب العميل. الهدف من الحماية هو جعل الهندسة العكسية غير مجدية اقتصاديًا: يجب أن تتجاوز تكاليف الوقت والموارد قيمة النتيجة المحصل عليها. المزيج من التشفيه وRASP ومنطق الخادم هو المعيار الحالي للحماية.
إعادة التغليف هي تعديل التطبيق من خلال الهندسة العكسية تليها إعادة تجميع APK. يقوم المهاجم بفك ضغط APK عبر apktool، يضيف كودًا ضارًا أو يستبدل مفاتيح API، يعيد تجميعه ويوقعه بشهادته الخاصة. إعادة التغليف تمثل 86% من جميع الهجومات على Android، وفقًا لتقرير تهديدات Kaspersky (2025). الإجراء المكافح: التحقق من التوقيع الرقمي في وقت التنفيذ.
يعترض نص Frida Universal Android SSL Unpin استدعاءات TrustManager.checkServerTrusted وServerTrustManager على iOS، مستبدلًا التنفيذ بتنفيذ يقبل الكل. يتم أيضًا استخدام اعتراض طرق X509TrustManager في OkHttp وURLConnection. SSL-pinning يمكن تجاوزه باستخدام Frida في 10 ثوان باستخدام نص جاهز. حماية أكثر متانة هي شفافية الشهادات عبر التحقق من شهادة الخادم.
الكود الأصلي C/C++ في مكتبات .so/.dylib أكثر صعوبة في الهندسة العكسية من Java في DEX. Swift مع PGO وتجميع Osize يعطي ثنائيًا أكثر تشفيهًا من Objective-C. Rust يتم تجميعه إلى كود أصلي دون بيانات تنفيذ ودون الغلاف القياسي لـ Objective-C، ما يجعله الأكثر صعوبة في الهندسة العكسية بين لغات تطوير التطبيقات المحمولة الحديثة.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا