هذا هو إطار تقييم عيب متقدم مشترك لتطبيقات Android (JAADS ، الاسم الأصلي Jade المعاد تسميته لتجنب مشكلة العلامة التجارية المحتملة) ، المكتوبة في عام 2014. Jaadas هي أداة مكتوبة في Java و Scala مع قوة السخام لتوفير كل من Interprocedure و intraprocedure تحليل ثابت لتطبيقات Android. تشمل ميزاتها تحليل إساءة استخدام API ، وتحليل الإنكار المحلي للخدمة (تعطل النية) ، وتحليل تدفق نمط ما بين المهرجانات (من نية إلى واجهة برمجة التطبيقات الحساسة ، أي الحصول على لا يتجزأ من النية ، واستخدامه لبدء النشاط).
يمكن لـ Jaadas أيضًا أن تجمع بين MultiDex في واحد وتحليلها تمامًا. يمكن تعريف معظم إمكانيات اكتشاف Jaadas في ملف التكوين والملف النصي Groovy (ملف SOOT وملف الحوض).
يتم تعبئة Jaadas في أرشيف جرة واحد وأقدم ملف قواعد الضعف الافتراضي. هناك وضعان رئيسيان ل Jaadas.
يطلق FullAnalysis القوة الكاملة لـ Jaadas و Soot ، بما في ذلك تحليل التداخل الكامل بين العمليات وتحليل تدفق البيانات بين العمليات. ولكنه قد يستهلك أيضًا الكثير من الوقت وقد لا ينتهي على الآلات ذات الذاكرة الصغيرة (<16 جيجابايت). الافتراضي هو وضع كامل.
عادةً ما ينتهي FastAnalysis في أقل من دقيقة واحدة ويهدف إلى تحليل الدُفعات على نطاق واسع. يتم تعطيل تحليل المشاريع بين المحطات لتحقيق مرونة maxmium. في المواقف العادية ، هذا الوضع يكفي للتدقيق الشائع.
-التحليل الصامت يمكّن التحليل والتحليل الكامل.
سطر الأوامر للتحليل: java -jar jade-0.1.jar vulnanalysis -f 1.apk -p /xxx/android-sdks/platforms/ -c /xxx/JAADAS/jade/config/ --fastanalysis
### -cefore cheort -c يجب توفيره كدليل لملفات التكوين ، بما في ذلك قواعد taint و source and sink ، وصف واجهة برمجة التطبيقات الضعيفة وما إلى ذلك. إذا لم تفهم محتوى ملفات التكوين ، فلا تعدلها ، اتركها كما هي.
### -P Option -P Option يحدد دليل نظام Android ، والذي عادة ما يشير فقط إلى $ {Android_SDK}/platforms/.
يتطلب SOOT تقديم إصدار محدد من platform.jar ، على سبيل المثال ، إذا كان هدف التحليل الخاص بك يحتوي على TargetSDK = 22 ، فإن SOOT سيبحث عن منصات/Android-22/Android.jar ، وإلا فسيرفع خطأ. إذا لم يكن لديك جرة محددة ، فيمكنك في الواقع أن تجعل رمزًا في هذا الموقف يشير إلى ما لديك بالفعل ، على سبيل المثال ، Android-16.jar لجعل Sout سعيدًا. لن يؤثر على الدقة نتيجة التحليل.
خيار -F يحدد APK ليتم تحليله.
ستخرج jaadas الناتجة في قائمة إلى وحدة التحكم وأيضًا تكتب نتيجة JSON-ED إلى الإخراج/ الدليل: {MD5_OF_INPUT_APK} .txt. يمكن العثور على عينة في دليل الإخراج لهذا الريبو: https://github.com/flankerhqd/jaadas/blob/master/output/92db7bbe1cae9004f11ef9d3d6cbf08.txt
المقتطف:
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r24 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r24) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void sendBroadcast(android.content.Intent,java.lang.String)>($r27, $r24) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r4 = virtualinvoke $r2.<android.content.Intent: android.os.Bundle getExtras()>() " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <com.fugao.fxhealth.receiver.JPushReceiver: void onReceive(android.content.Context,android.content.Intent)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <com.fugao.fxhealth.receiver.JPushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r6 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r6) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.data.x: void a(android.content.Context)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r9 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r9) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.data.x: void a(android.content.Context)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}]}لتجنب OOM ، إضافة -xmx خيار إلى سطر الأوامر ، على سبيل المثال java -jar -xmx8192m Jade -0.1.Jar
يتم تنظيم Jaadas بواسطة Gradle. Run gradle fatJar في جذر الدليل المصدر والجرة المربوطة الواحدة سيتم إنشاءها على. من أجل البساطة ، أقوم بدمجهم في نفس الدلائل الجذرية ويمكنك تغييرها كما يحلو لك ، وتتبع تغييرات السخام في المنبع.
https://speakerdeck.com/flankerhqd/jade-joint-advanced-defect-assesment
https://github.com/flankerhqd/jaadas/wiki
https://github.com/flankerhqd/jaadas/release/download/release0.1/jaadas-0.1.zip
شكرًا لك مؤلفو SOOT (https://github.com/sable/soot) على توفير مثل هذا الإطار الجيد.
هذا مجرد نموذج أولي للبحث ، استخدم على مسؤوليتك الخاصة. قد تحتوي النتائج على إيجابيات كاذبة وسلبيات خاطئة بسبب طبيعة التحليل الثابت. لا تتردد في شوكة وسحبها.
JDK> = 1.8 (يجب)
Scala> = 2.11 تم اختباره