الهندسة العكسية في تطوير التطبيقات المحمولة: ما هي، أدواتها وطرق التحليل

المؤلف: IT Sectr نُشر: 2026-04-04 وقت القراءة: 10 دق

« الهندسة العكسية (Reverse Engineering) » هي استعادة منطق وهيكل التطبيق المحمول دون الوصول إلى الكود المصدري. في سياق Android وiOS، يعني هذا فك ترجمة الملفات الثنائية DEX/APK وMach-O/IPA لاستخراج الخوارزميات ومفاتيح التشفير ونقاط نهاية API ومنطق الأعمال. وفقًا لـ Veracode Security Research (2025)، أكثر من 60% من التطبيقات المحمولة في أفضل 200 تحتوي على مؤشر واحد على الأقل يبسط الهندسة العكسية. الهندسة العكسية لا تُستخدم فقط للهجمات، بل أيضًا لتدقيق الأمن وتحليل براءات الاختراع واختبار الاختراق.

النقاط الرئيسية

  • الهندسة العكسية هي عملية تحليل الكود الثنائي للتطبيق لاستعادة منطقه وبياناته وخوارزمياته دون الوصول إلى الكود المصدري
  • التحليل الثابت يشمل فك ترجمة DEX/APK عبر jadx وبايت كود iOS عبر Ghidra وقراءة الموارد عبر apktool
  • التحليل الديناميكي يتم عبر Frida وObjection وXposed لاعتراض الاستدعاءات في وقت التنفيذ دون إيقاف التطبيق
  • الحماية من الهندسة العكسية تقوم على التشفيه (ProGuard، DexGuard) وتشفير السلاسل ووكلاء RASP والتحقق من سلامة APK
  • الوضع القانوني للهندسة العكسية يختلف: DMCA يسمح بها للتوافق والأمان ولكن يحظر تجاوز التراخيص وDRM

ما هي الهندسة العكسية؟

الهندسة العكسية هي تخصص تحليل البرمجيات الهادف إلى استعادة خصائص ومنطق وهيكل التطبيق من تمثيله الثنائي. بالنسبة للتطبيقات المحمولة، تكون أشياء التحليل هي ملفات APK (Android) وIPA (iOS)، والتي تحتوي على كود مجمع وموارد وبيانات وشهادات. نتيجة الهندسة العكسية هي استخراج الخوارزميات والبروتوكولات ومفاتيح التشفير ومخططات API ومنطق الأعمال.

تنقسم أهداف الهندسة العكسية إلى مشروعة وغير مشروعة. المشروعة: تحليل البرمجيات الضارة لإنشاء أدوات أمنية، تدقيق التطبيقات الخاصة بالبحث عن الثغرات، ضمان التوافق مع البروتوكولات المغلقة، تحليل براءات الاختراع والتعليم. غير المشروعة: سرقة الملكية الفكرية، تجاوز قيود الترخيص، إنشاء نسخ مقرصنة وتعديل التطبيقات لسرقة بيانات المستخدمين. وفقًا لـ Google Play Protect (2025)، 78% من التعديلات الضارة لتطبيقات البنوك تُنشأ بناءً على APK الأصلي الذي تم معالجته عبر الهندسة العكسية.

تشمل منهجية الهندسة العكسية اتجاهين رئيسيين: التحليل الثابت (دون تشغيل التطبيق) والتحليل الديناميكي (أثناء التنفيذ). كل نهج يوفر مستوى مختلفًا من المعلومات. التحليل الثابت يعطي صورة كاملة للكود ولكن دون بيانات وقت التنفيذ. التحليل الديناميكي يكشف السلوك الحقيقي وتدفق البيانات واستدعاءات الشبكة، ولكن فقط ضمن سيناريو تنفيذ محدد. الهندسة العكسية المهنية تدمج دائمًا كلا النهجين.

أدوات التحليل الثابت

التحليل الثابت هو المرحلة الأولى من الهندسة العكسية. يتم فك ضغط APK أو IPA الأصلي، ويتم تحليل كل مكون بشكل منفصل. الأهداف الرئيسية: بايت كود DEX، الموارد، البيان، المكتبات الأصلية (.so، .dylib) والبيانات الوصفية.

jadx — فاك ترجمة DEX إلى Java

jadx هو الأداة الرئيسية للتحليل الثابت لتطبيقات Android. يقوم بتحويل بايت كود DEX إلى كود Java قابل للقراءة بفقدان أدنى. jadx يدعم: فك ترجمة multidex، التعرف على اللامدا والفئات Kotlin المضمنة، والتصدير إلى مشروع Gradle. بالنسبة للكود المشفه (ProGuard)، jadx يعرض الكود بأسماء a، b، c، ولكن هيكل الفئات وتسلسل الاستدعاء يتحفظان. وفقًا لاختبارات مستقلة، jadx يفك ترجمة 85–92% من الكود بشكل صحيح حتى مع التشفيه.

apktool — فك ضغط الموارد

apktool يفك تشفير APK إلى كود smali (مجمع DEX) ويستعيد الموارد بشكل قابل للقراءة: يتم تحويل AndroidManifest.xml من AXML إلى XML قابل للقراءة، والتخطيطات إلى ترميز XML، وstrings.xml إلى نص عادي. apktool يسمح بتعديل الموارد وإعادة تجميع APK. بعد فك الضغط عبر apktool واستبدال الموارد، يمكن تثبيت التطبيق بمحتوى معدل.

Ghidra — تحليل المكتبات الأصلية

Ghidra (وكالة الأمن القومي) هي إطار عمل للهندسة العكسية أساسية لتحليل مكتبات .so في Android و.dylib في iOS. Ghidra تقوم بفك تجميع كود ARM64، وتعيد بناء كود C شبه المركب، وتبني رسومات الاستدعاء. للهندسة العكسية المحمولة، تستخدم Ghidra لتحليل التنفيذات الأصلية للتشفير وآليات DRM. Ghidra تدعم النصية بلغتي Python وJava لأتمتة التحليل.

bash
# فك ضغط 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 هي الأداة الرائدة للتحليل الديناميكي للتطبيقات المحمولة. تقوم Frida بحقن محرك JavaScript في عملية التطبيق (Android ART أو تطبيق iOS) وتسمح باعتراض استدعاءات كل من دوال Java/Objective-C وC/C++. باستخدام Frida، يمكن لمهندسي العكس: تسجيل جميع استدعاءات طريقة AES.decrypt() مع الوسائط، استبدال قيم الإرجاع بشكل تعسفي، إزالة SSL-pinning عبر Universal Android SSL Unpin، وتتبع الاستدعاءات الأصلية عبر Stalker. Frida تعمل دون تعديل APK/IPA، ما يجعلها لا غنى عنها لاختبارات الاختراق.

Objection — غلاف Frida

Objection يوفر أوامر جاهزة لمهام الهندسة العكسية الشائعة دون الحاجة لكتابة نصوص JavaScript: disable-pinning (تعطيل SSL pinning)، dump-keychain (iOS)، explore (تصفح تسلسل الفئات)، memory search (البحث عن السلاسل في الذاكرة). Objection يسمح بإجراء تحليل ديناميكي كامل دون سطر واحد من الكود. لتطبيقات iOS، Objection يبحث ويسجل تلقائيًا استدعاءات NSURLSession، CFNetwork و NSKeyedArchiver.

Xposed Framework

Xposed هو إطار عمل لنظام Android يعمل عن طريق استبدال ملف app_process في Zygote. على عكس Frida، Xposed لا يتطلب وصول root بعد التثبيت. وحدات Xposed يمكنها اعتراض استدعاءات الدوال في أي تطبيق. للهندسة العكسية، Xposed مناسب للتحليل طويل المدى: يتم تثبيت الوحدة وتعمل بشكل مستمر، مسجلة سلوك التطبيق في سيناريوهات مختلفة. Xposed يدعم Android حتى الإصدار 8.1؛ لنظام Android 9+ يتم استخدام EdXposed المبني على SandHook.

js
// 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);
};

عملية الهندسة العكسية لتطبيق Android

يتكون سير العمل القياسي للهندسة العكسية من خطوات متسلسلة، كل منها يوفر مستوى معينًا من المعلومات.

الخطوة 1: جمع المعلومات

يدرس المحلل APK على مستوى البيانات الوصفية: targetSdk، uses-permission (ما الأذونات المطلوبة)، intent-filter والمكونات المصدرة. يمكن للأذونات أن تكشف عن API المستخدمة (android.permission.CAMERA → كاميرا، android.permission.RECORD_AUDIO → صوت). تحدد الأنشطة المصدرة نقاط الدخول دون ترخيص. تتم هذه المرحلة عبر aapt أو ApkAnalyzer وتستغرق 1–2 دقيقة.

الخطوة 2: فك ترجمة DEX

يتم فك ضغط APK، ويتم إدخال classes.dex (أو multidex) إلى jadx. الناتج هو كود Java/Kotlin منظم في حزم. يبحث المحلل عن الفئات الرئيسية: CryptoUtils، ApiClient، AuthManager، DatabaseHelper، ويتحقق من الخوارزميات المستخدمة. إذا كان الكود يحتوي على سلاسل مثل AES/CBC/PKCS5Padding، فإن التطبيق يستخدم التشفير ويجب العثور على المفتاح. في هذه المرحلة يتم تحديد: المفاتيح المطمرنة، عناوين API، رمز OAuth والأسرار. دون التشفيه، يقرأ كود التطبيق بأكمله كمشروع Java عادي.

الخطوة 3: تحليل حركة المرور

بعد إعداد Frida أو Objection لتعطيل SSL-pinning، يقوم المحلل بتشغيل التطبيق واعتراض حركة المرور عبر Burp Suite أو mitmproxy. تكشف بيانات حركة المرور عن مخطط API: ما نقاط النهاية، ما الوسائط، وبأي تنسيق. إذا امكن، يقوم المحلل بتعديل الطلبات ويتحقق من استجابة الخادم لبيانات غير صحيحة أو ضارة. عدم وجود التحقق على جانب الخادم هو ثغر مباشر يتم اكتشافه في هذه الخطوة.

الخطوة 4: التسجيل في data.json

يتم تسجيل نتائج التحليل بشكل منظم. لكل نقطة ضعف مكتشفة، يتم تحديد: الفئة والطريقة، وصف الثغر، ناقل الاستغلال وتوصية بالإصلاح. يتم نقل مجموعة البيانات هذه إلى فريق التطوير أو تستخدم لإعداد تقرير اختبار الاختراق. في البيئات الآلية (MobSF)، يتم إنشاء التقرير تلقائيًا بناءً على نتائج التحليل الثابت والديناميكي.

خصائص الهندسة العكسية لتطبيقات iOS

الهندسة العكسية لتطبيقات iOS أكثر صعوبة من Android بسبب معمارية الأمان الأكثر صرامة لدى Apple وعدم وجود وصول مباشر إلى نظام الملفات على الأجهزة القياسية. يلزم jailbreak لتحليل iOS.

التحليل الثابت لـ Mach-O

يحتوي أرشيف IPA على ثنائي Mach-O — تنسيق الملفات التنفيذية العام لشركة Apple. يتم استخدام Hopper Disassembler أو IDA Pro لفك الترجمة. على عكس Android DEX، الذي يفك ترجمته إلى Java بفقدان أدنى، يحتوي Mach-O على كود ARM64 أصلي يتم إعادة بنائه إلى كود C شبه المركب بدقة أقل. Hopper يحقق 60–70% من إعادة البناء، والباقي يجب تحليله على مستوى المجمع.

التحليل الديناميكي باستخدام Frida لنظام iOS

Frida على iOS تتطلب jailbreak وتثبيت frida-server. بعد الاتصال، Frida تعترض طرق Objective-C عبر توجيه رسائل API. لتطبيقات iOS، يتضمن السيناريو النموذجي: اعتراض NSURLSession.dataTaskWithRequest لتسجيل طلبات HTTP، اعتراض NSKeyedUnarchiver لتحليل البيانات المسلسلة وتتبع استعلامات CoreData عبر frida-trace. أصبحت Frida متاحة لنظام iOS 15–17 مع إصدار jailbreak Dopamine.

تعديل IPA

قد تتضمن الهندسة العكسية تعديل IPA ثم إعادة تغليفه وتثبيته على الجهاز. تشمل الأدوات: ipatool لفك الضغط، MachOView لعرض الأقسام وoptool لحقن الكود. بعد التعديل، يتم توقيع IPA عبر ldid أو fastlane sigh للتثبيت على جهاز به jailbreak. لنظام iOS 16+، يتم التحقق من توقيع الكود على مستوى Secure Enclave، ولن يعمل IPA المعدل على جهاز غير مخترق.

js
// 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 وفحوص السلامة

يقوم وكيل RASP داخل التطبيق باكتشاف Frida والتصحيح في وقت التنفيذ. تمنع فحوص السلامة عبر هاش SHA-256 للملف APK تشغيل نسخة معدلة من التطبيق. إذا لم يتطابق هاش APK مع الهاش المرجعي (المخزن في الطبقة الأصلية)، ينتهي التطبيق. يحجز هذا الهجومات القائمة على تعديل APK، بما في ذلك إعادة التغليف.

الحماية على جانب الخادم

يجب أن يتم تنفيذ منطق الأعمال الحرج على الخادم، ليس على العميل. حتى لو قام المهاجم بفك ترجمة التطبيق بالكامل، يبقى كود الخادم غير قابل للوصول. التحقق على جانب الخادم من جميع الطلبات والوسائط يمنع استغلال الثغرات التي تم اكتشافها أثناء الهندسة العكسية. المصادقة على جانب الخادم عبر Play Integrity API أو App Attest توكد أن الطلب يأتي من تطبيق حقيقي غير معدل.

الأسئلة الشائعة

هل الهندسة العكسية للتطبيقات المحمولة قانونية؟

في الولايات المتحدة، تتنظم الهندسة العكسية بموجب DMCA — يسمح بها للتوافق واختبارات الأمان وأغراض الأرشفة. يحظر تجاوز تدابير الحماية التكنولوجية (DRM). في أوروبا، المادة 6 من EUCD مماثلة DMCA. في روسيا، قد تعتبر الهندسة العكسية دون موافقة صاحب الحق انتهاكًا لحقوق التأليف. الاستشارة القانونية إجبارية قبل الهندسة العكسية التجارية.

هل يمكن حماية التطبيق بنسبة 100% من الهندسة العكسية؟

لا. أي كود يتم تنفيذه على جهاز المهاجم يمكن تحليله — هذا قيد أساسي لنموذج الأمان على جانب العميل. الهدف من الحماية هو جعل الهندسة العكسية غير مجدية اقتصاديًا: يجب أن تتجاوز تكاليف الوقت والموارد قيمة النتيجة المحصل عليها. المزيج من التشفيه وRASP ومنطق الخادم هو المعيار الحالي للحماية.

ما هو إعادة تغليف (repackaging) APK؟

إعادة التغليف هي تعديل التطبيق من خلال الهندسة العكسية تليها إعادة تجميع APK. يقوم المهاجم بفك ضغط APK عبر apktool، يضيف كودًا ضارًا أو يستبدل مفاتيح API، يعيد تجميعه ويوقعه بشهادته الخاصة. إعادة التغليف تمثل 86% من جميع الهجومات على Android، وفقًا لتقرير تهديدات Kaspersky (2025). الإجراء المكافح: التحقق من التوقيع الرقمي في وقت التنفيذ.

كيف يتجاوز Frida SSL-pinning؟

يعترض نص 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، ما يجعله الأكثر صعوبة في الهندسة العكسية بين لغات تطوير التطبيقات المحمولة الحديثة.

الملخص

  • الهندسة العكسية تستعيد منطق التطبيق من الكود الثنائي عبر التحليل الثابت (jadx، Ghidra، Hopper) والأداء الديناميكي (Frida، Xposed، Objection)
  • التحليل الثابت لتطبيقات Android يبدأ بفك ترجمة DEX عبر jadx وفك ضغط الموارد عبر apktool، ويستعيد حتى 90% من كود Java
  • التحليل الديناميكي عبر Frida يسمح باعتراض الاستدعاءات في وقت التنفيذ، وتعطيل SSL-pinning وتسجيل جميع وسائط الدوال وقيم إرجاعها
  • الهندسة العكسية على iOS تتطلب jailbreak والعمل مع ثنائيات ARM64 عبر Hopper/IDA Pro، وهي أكثر تعقيدًا بشكل ملحوظ من تحليل DEX على Android
  • الحماية من الهندسة العكسية تشمل التشفيه (ProGuard/DexGuard)، تشفير الثوابت، وكيل RASP لكشف Frida والمصادقة على جانب الخادم عبر Play Integrity API
  • الحماية 100% من الهندسة العكسية غير ممكنة — الهدف هو جعل تكلفة الهجوم أعلى من قيمة البيانات المحمية
  • إعادة تغليف APK هي أكثر الهجومات انتشارًا على التطبيقات المحمولة وتُمنع بالتحقق من التوقيع الرقمي في وقت التنفيذ والتحقق من سلامة الخادم

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا