TIRO هو إطار DEOBFUSCATION التكراري المختلط لتطبيقات Android. اسمه يرمز إلى الخطوات الأربع: Target ، Instrument ، Run ، Observe . يستخدم نهج TIRO فكرة التنفيذ المستهدف (انظر أدائنا السابق ، IntellIdroid) لتحديد مواقع التغوط المحتملة بشكل ثابت وتحديد المدخلات لتشغيل مواقع التعليمات البرمجية هذه. من خلال صياغة هذه المواقع وتنفيذها باستخدام معلومات الاستهداف ، يمكن جمع معلومات Deobfuscation وقت التشغيل وإعادة تمريرها إلى تحليل ثابت لإلغاء التطبيق وتحقيق نتائج تحليل أكثر اكتمالًا.
لمزيد من التفاصيل ، يرجى الاطلاع على ورقتنا ، المنشورة في Usenix Security 2018.
حاليًا ، يحتوي الكود في هذا المستودع على الرمز الأساسي للخطوة Target وهو في الأساس مكون من المكون الثابت في إطار السخام. نخطط لإصدار رمز لخطوات Tiro الأخرى في المستقبل.
يتكون تحليل Tiro الثابت من خطوات Target Instrument . في الخطوة Target ، يتم تحديد مواقع التشويش ويتم استخلاص مسارات الاتصال إلى تلك المواقع. لكل مسار ، يجمع Tiro قيودًا تحدد المدخلات التي يجب حقنها لتشغيل المسار ديناميكيًا. نستخدم حاليًا حلول قيود Z3 ونقوم بتحويل القيود إلى تنسيقات Z3-PY و Z3-Java.
يتطلب مكون التحليل الثابت Java 8 (JDK 1.8).
يحتوي هذا المستودع على اعتماد على مستودع android-platforms ، والذي يحتوي على مكتبات Android Framework المستخدمة في التطبيقات. هذه التبعية هي وحدة فرعية داخل المشروع. لاستنساخ تيرو مع الجهاز الفرعي ، قم بتشغيل:
git clone --recursive [email protected]:miwong/tiro.git
بدلاً من ذلك ، إذا كنت قد قمت بالفعل بتسليط TIRO بدون الجهاز الفرعي ، قم بتشغيل:
git submodule update --init --recursive
هذا يجعل عدة دقائق ، لأن مكتبات Android Framework كبيرة.
يستخدم هذا المشروع نظام إنشاء Gradle. توجد ملفات الإخراج في build/ الدليل. البرنامج النصي Gradlew هو غلاف للآلات التي لم يتم تثبيتها بالفعل. إذا كانت آلة التطوير الخاصة بك تحتوي بالفعل على Gradle ، فيمكنك استخدام التثبيت الخاص بك عن طريق استبدال ./gradlew مع gradle في الأوامر أدناه. مطلوب اتصال الشبكة عند تجميع الكود لأول مرة حتى يتمكن Gradle من تنزيل التبعيات تلقائيًا.
للبناء:
./gradlew build
لبناء وتشغيل:
./TIROStaticAnalysis <APK>
بشكل افتراضي ، يكتب Tiro نتائج التحليل الثابت في دليل tiroOutput . خيارات -o تسمح بتغيير هذا. لمشاهدة خيارات سطر الأوامر الأخرى ، قم بتشغيل:
./TIROStaticAnalysis --help
حاليًا ، لا يتوافق ناتج التحليل الثابت لـ Tiro (أي appInfo.json ) مع IntellIdroid. أثناء إصدار المكون الديناميكي لـ TIRO ، سنقوم أيضًا بتحديث العميل الديناميكي المستخدم في IntellIdroid بحيث يمكن دمج استخراج قيود TIRO في التحليل الديناميكي.
تم بناء TIRO على إطار التحليل الثابت للسخام. تم إجراء العديد من التعديلات على توليد الرسم البياني للمكالمات في SOOT لتعزيز الرسم البياني للمكالمات مع الحواف التي تمثل تدفق التنفيذ الخاص بنظام Android (مثل). يتم نشر التعديلات في مستودع منفصل هنا.
نظرًا لأن تطبيقات Android مدفوعة بالحدث ، يجب حساب نقاط الدخول إلى التطبيق لتحقيق تحليل كامل. يستخدم Tiro اكتشاف نقطة الدخول المنفذة في FlowDroid. تم إجراء تعديلات طفيفة على رمز نقطة الدخول هذا لاستخراج المعلومات التي يتطلبها تحليل Tiro ؛ يتم تخزين هذه التغييرات في static/src/soot/ و static/src/tiro/target/entrypoint/ .
لقد ساهم فيما يلي رمزًا في تيرو:
تم تطوير TIRO كمشروع الدكتوراه من قبل ميشيل وونغ في جامعة تورنتو. للحصول على أي استفسارات ، يرجى الاتصال بـ Michelle على [email protected].
تم إصدار Tiro تحت رخصة GNU Lesser General Public ، الإصدار 2.1.