IntellIdroid هي أداة تحليل لتطبيقات Android التي تستخلص مسارات الاتصال التي تؤدي إلى سلوك محدد وتنفذ هذه المسارات بدقة أثناء وقت التشغيل. عند إعطاء مجموعة من السلوكيات المستهدفة ، يعبر مكون التحليل الثابت الرسم البياني لدعوة التطبيق لإيجاد مسارات لهذه السلوكيات. كما أنه يستخرج قيود المسار ، والتي يتم استخدامها لتحديد قيم الإدخال التي يمكن أن تؤدي إلى هذه المسارات. يأخذ المكون الديناميكي المسارات/القيود المستخرجة ويحقق قيم الإدخال في جهاز Android ، مما يؤدي إلى السلوكيات المستهدفة.
لمزيد من التفاصيل ، يرجى الاطلاع على الورق والشرائح (NDSS 2016).
يقوم "Frameworkanalysis" بتحليل ثابت لتوليد قيود لإطار Android. نقدم حاليًا قيود إطار الإخراج بحيث يمكن إضافتها إلى قيود التطبيق التي ينتجها مكون "Appanalysis".
يحمل دليل "Appanalysis" الكود الذي يولد قيودًا على تطبيقات Android.
| دليل | وصف |
|---|---|
| المعالجة المسبقة | البرامج النصية لاستخراج ملف APK والمعالجة المسبقة قبل نقله إلى الأداة. |
| SRC | ملفات رمز المصدر. |
| libs | التبعيات ، بما في ذلك مكتبات والا اللازمة. 1 |
| Android | تم تجميع ملفات Android Framework (المراد تحليلها) ، من AOSP الإصدار 4.4.2_r2. |
1 قمنا بإجراء تغييرات طفيفة على توليد الرسوم البيانية لمكالمات Wala لتحسين أداء Intellidroid. يمكن العثور على رمز المصدر المعدل هنا.
يستخدم هذا المشروع نظام إنشاء Gradle. توجد ملفات الإخراج في build/ الدليل. البرنامج النصي Gradlew هو غلاف للآلات التي لم يتم تثبيتها بالفعل. إذا كانت آلة التطوير الخاصة بك تحتوي بالفعل على Gradle ، فيمكنك استخدام التثبيت الخاص بك عن طريق استبدال ./gradlew مع gradle في الأوامر أدناه. مطلوب اتصال الشبكة عند تجميع الكود لأول مرة حتى يتمكن Gradle من تنزيل التبعيات تلقائيًا.
تم تجميع ملفات Android Framework في دليل android باستخدام JDK 1.6 ، لكن apktool المستخدمة في البرامج النصية المسبقة تتطلب JDK 1.7. نوصي باستخدام JDK 1.7 ، حيث يبدو أنه يعمل بشكل أفضل. إذا لزم الأمر ، يمكنك استبدال الملفات في دليل android لتجربة إصدارات مختلفة من AOSP أو JDK.
يجب أولاً معالجة ملف APK المستهدف الذي سيتم تحليله مسبقًا باستخدام البرامج النصية في مجلد preprocess . يمكن بعد ذلك نقل الدليل الناتج (الذي يحتوي على ملف APK والموارد المستخرجة) إلى التحليل الثابت.
تستخدم البرامج النصية للمعالجة المسبقة APKTool و DARE لاستخراج حزمة APK. يمكنك استخدام أدوات الاستخراج الخاصة بك ، ولكن قد تضطر إلى تعديل رمز تحليل التطبيق بحيث يمكن لـ IntellIdroid العثور على ملفات bytecode و pensest لتطبيق معين.
./preprocess/PreprocessAPK.sh <APK file>
./preprocess/PreprocessDataset.sh <directory of APK files>
./gradlew build
./IntelliDroidAppAnalysis -o <output directory> <preprocessed app directory>
لمشاهدة خيارات سطر الأوامر الأخرى ، قم بتشغيل:
./IntelliDroidAppAnalysis --help
يتم استخدام دليل الإخراج لتخزين ملف App Info JSON وملفات قيود Z3. إذا لم يتم تحديدها ، فسيتم تخزين هذه الملفات في ./pathOutput . يتم استخدام ملفات الإخراج بواسطة أداة IntelliDroidDynamicClient لتحديد مسارات المكالمات ولإنشاء بيانات الإدخال لتشغيل هذه المسارات.
تعد ملفات appInfo.json و constraintX_X.py المنتجة في دليل الإخراج ضرورية للعميل الديناميكي ، ولكنها ليست قابلة للقراءة للغاية. يمكن استخدام علامة -y للحصول على نسخة أكثر قابلية للقراءة (ولكن ثقيلة الإخراج) من نتائج المسار/القيد (مطبوعة في stdout).
يحتوي دليل "DynamicClient" على برنامج Python الذي يتواصل مع جهاز Android ويرسل المدخلات التي تؤدي إلى الأحداث المطلوبة.
يتوقع البرنامج توصيل جهاز Android أو المحاكي بالنظام. يجب أن يقوم هذا الجهاز بتشغيل نظام التشغيل Android المخصص الذي يحتوي على intelliDroidservice (الذي يفسر الأوامر التي يرسلها هذا البرنامج ويقوم بالاستدعاء الفعلي للحدث). سيقوم برنامج DynamicClient بالاتصال تلقائيًا بالجهاز عبر مأخذ توصيل على المنفذ TCP: 12348. سيتم استخدام أداة adb لإعداد الاتصال وتشغيل أوامر معينة ، ويجب الوصول إليها من PATH (يمكن القيام بذلك عن طريق إضافة دليل Android SDK إلى متغير PATH أو عن طريق إعداد بيئة بناء AOSP قبل تشغيل DynamicClient.
بالإضافة إلى ذلك ، يستخدم DynamicClient حلول القيد Z3 عبر Python API (Z3-PY). تتوفر هنا تعليمات بناء وتثبيت Z3 مع روابط Python هنا.
يتم توفير نظام التشغيل Android المخصص المستخدم من قبل IntellIdroid كسلسلة من ملفات Diff التي يمكن تطبيقها على شجرة مصدر AOSP الأساسية. يتم تنفيذ IntellIdroid حاليًا لـ Android 4.3 (AOSP Branch android-4.3_r1 ). يرجى الرجوع إلى وثائق AOSP للحصول على إرشادات حول كيفية تنزيل وبناء Android.
بمجرد تنزيل وتجميع إصدار AOSP الصحيح ، يمكنك تطبيق تصحيحات Intellidroid ، الموجودة في دليل androidPatches . يتم توفير ملفات patch.sh و unpatch.sh للمساعدة في أتمتة هذه العملية. بعد الترقيع ، إعادة بناء AOSP (لقد وجدنا أنه قد تضطر إلى make مرتين ؛ وإلا ، تصبح بعض الملفات في المحاكي غير متسقة). قد تحتاج أيضًا إلى تشغيل make update-api مع make . بمجرد إنشائها ، يمكنك استخدام logcat للتحقق من بدء فئة IntelliDroidService كخدمة نظام عند حذاء الجهاز.
cd androidPatches
./patch.sh <path to AOSP directory>
./IntelliDroidDynamicClient.py
HELP (الحصول على وصف للأوامر)
INSTALL <APK file>
START <directory to app information, generated by IntelliDroidAppAnalysis>
TRIGGER <call path ID to trigger, as specified in appInfo.json>
EXECUTE <command to send to IntelliDroidService> 1
INFO <info requested from IntelliDroidService> 1
CLOSE
KILL
1 هذه الأوامر هي لأغراض تصحيح الأخطاء فقط. يجب عليك استخدام هذه فقط إذا كنت تعرف المعلمات الدقيقة التي يتوقعها intelliDroidservice.
التكامل مع taintdroid واضح إلى حد ما. بالنسبة لمكون "Appanalysis" ، استخدم علامة -t لتحديد قائمة مختلفة من الطرق المستهدفة (أي ملف taintdroidTargets.txt المقدم).
./IntelliDroidAppAnalysis -t taintdroidTargets.txt <preprocessed app directory>
على الجانب الديناميكي ، اتبع الإرشادات هنا لتنزيل وبناء taintdroid لنظام Android 4.3. بمجرد أن تتحقق من أن بناء taintdroid يعمل ، قم بتطبيق التصحيحات في DynamicClient/androidPatches بنفس الطريقة التي تفعل بها من أجل AOSP غير المعدلة.
تم تطوير Intellidroid في البداية كمشروع أطروحة ماجستير من قبل ميشيل وونغ في جامعة تورنتو ، تحت إشراف الدكتور ديفيد لي.
لأي استفسارات ، يرجى الاتصال:
لقد ساهم فيما يلي رمزًا في IntellIdroid:
يتم إصدار IntellIdroid تحت رخصة معهد ماساتشوستس للتكنولوجيا.