Ini adalah kerangka penilaian cacat canggih bersama untuk aplikasi Android (JAADS, nama asli Jade berganti nama untuk menghindari masalah merek dagang potensial), yang ditulis pada tahun 2014. Jaadas adalah alat yang ditulis dalam Java dan Scala dengan kekuatan jelaga untuk menyediakan aplikasi statis interprocedure dan intraprocedure untuk aplikasi dan aplikasi grup. Fitur-fiturnya meliputi analisis penyalahgunaan API, analisis layanan-layanan-layanan (crash) lokal, analisis aliran noda gaya antar-prosedur (dari niat ke API sensitif, yaitu mendapatkan parselable dari niat, dan menggunakannya untuk memulai aktivitas).
Jaadas juga dapat menggabungkan Multidex menjadi satu dan menganalisisnya sama sekali. Sebagian besar kemampuan deteksi Jaadas dapat didefinisikan dalam file konfigurasi dan file teks Groovy (sumber jelaga dan file wastafel).
Jaadas dikemas ke dalam arsip JAR tunggal dan saya memberikan file aturan kerentanan default. Ada dua mode utama untuk jaadas.
FullAnalysis melepaskan kekuatan penuh jaadas dan jelaga, termasuk analisis aplikasi seluruh-prosedur dan analisis dataflow antar-prosedur. Tetapi mungkin juga menghabiskan banyak waktu dan mungkin tidak selesai pada mesin dengan memori kecil (<16GB). Default adalah mode penuh.
FastAnalysis biasanya selesai dalam waktu kurang dari 1 menit dan dimaksudkan untuk analisis batch skala besar. Analisis antar-prosedur dinonaktifkan untuk mencapai fleksibilitas maxmium. Dalam situasi normal mode ini cukup untuk audit umum.
--Fastanalysis memungkinkan fasanalisis dan menonaktifkan analisis full.
Baris perintah untuk analisis: java -jar jade-0.1.jar vulnanalysis -f 1.apk -p /xxx/android-sdks/platforms/ -c /xxx/JAADAS/jade/config/ --fastanalysis
Opsi ### -C -C harus disediakan sebagai direktori untuk file konfigurasi, termasuk aturan noda, sumber dan wastafel, deskripsi API yang rentan dan sebagainya. Jika Anda tidak memahami konten file konfigurasi, jangan memodifikasinya, biarkan apa adanya.
### -opsi P Opsi -p Menentukan direktori platform Android, yang biasanya hanya menunjuk ke $ {android_sdk}/platform/.
Syot membutuhkan versi spesifik platform.jar yang akan disajikan, misalnya, jika target analisis Anda memiliki targetsDK = 22, maka jelaga akan mencari platform/android-22/android.jar, jika tidak akan menimbulkan kesalahan. Jika Anda tidak memiliki toples tertentu, sebenarnya Anda bisa membuat simbolis pada posisi itu menunjukkan apa yang sudah Anda miliki, katakanlah, android-16.jar untuk membuat jelaga bahagia. Itu tidak akan mempengaruhi presisi hasil analisis.
-F Opsi Menentukan APK yang akan dianalisis.
Jaadas akan menghasilkan hasil dalam daftar ke konsol dan juga menulis hasil json-ed ke output/ direktori: {md5_of_input_apk} .txt. Sampel dapat ditemukan di direktori output repo ini: https://github.com/flankerhqd/jaadas/blob/master/output/92db77bbe1cae9004f11ef9d3d6cbf08.txt
Potongan:
}, {
"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)> "
}]}Untuk menghindari oom, tambahkan -xmx opsi ke commandline, misalnya java -jar -xmx8192m jade -0.1.jar
Jaadas diselenggarakan oleh Gradle. Jalankan gradle fatJar di akar direktori sumber dan toples tunggal yang dibundel akan dihasilkan di ./jade/build/ Setiap direktori sebenarnya mewakili submodule Git awalnya. Untuk kesederhanaan saya menggabungkannya ke direktori root yang sama dan Anda dapat mengubahnya sesuai keinginan, melacak perubahan jelaga hulu.
https://speakerdeck.com/flankerhqd/jade-joint-advanced-defect-assesment
https://github.com/flankerhqd/jaadas/wiki
https://github.com/flankerhqd/jaadas/releases/download/release0.1/jaadas-0.1.zip
Terima kasih penulis jelaga (https://github.com/sable/soot) karena memberikan kerangka kerja yang baik.
Ini hanyalah prototipe penelitian, gunakan dengan risiko Anda sendiri. Hasilnya mungkin mengandung positif palsu dan negatif palsu karena sifat analisis statis. Jangan ragu untuk membayar dan menariknya.
JDK> = 1.8 (harus)
Scala> = 2.11 Diuji