這是針對Android應用程序的聯合先進的缺陷評估框架(JAADS,JADE的原始名稱重命名以避免潛在的商標問題),於2014年寫成。 Jaadas是用Java和Scala編寫的工具,具有煙灰的力量,既可以為Android應用程序提供靜止劑和術中靜態分析。它的功能包括API濫用分析,局部服務崩潰(意圖崩潰),過程間風格的污點流量分析(從意圖到敏感的API,即從意圖中獲得可包裹的,並使用它來開始活動)。
Jaadas還可以將多智能結合在一起,並將它們完全分析。 Jaadas的大多數檢測功能都可以在Groovy Config File和Text File(Soot的源和接收器文件)中定義。
Jaadas被包裝到一個JAR存檔中,我提供了一個默認的漏洞規則文件。 Jaadas有兩個主要模式。
FullAnalysis釋放了Jaadas和煙灰的全部功能,包括處理間全應用分析和處理間數據流分析。但是它可能會消耗大量時間,並且可能不會在記憶少(<16GB)的機器上完成。默認值是全模式。
FastAnalysis通常在不到1分鐘的時間內完成,並用於大規模批處理分析。殘疾人間分析可實現最高靈活性。在正常情況下,此模式足以用於普通審核。
- 近時間分析可以實現快速分析和禁用全分析。
分析命令行: java -jar jade-0.1.jar vulnanalysis -f 1.apk -p /xxx/android-sdks/platforms/ -c /xxx/JAADAS/jade/config/ --fastanalysis
### -C Option -C必須作為配置文件的目錄提供,包括污點規則,源和接收器,脆弱的API描述等。如果您不了解配置文件內容,請不要修改它們,請將其保持原樣。
### -P選項-P選項指定Android Platform目錄,通常僅指向$ {Android_sdk}/Platforms/。
SOOT需要呈現Platform.jar的特定版本,例如,如果您的分析目標具有TargetsDK = 22,則SOOT將尋找Platforms/Android-22/Android.jar,否則會引起錯誤。如果您沒有特定的罐子,實際上,您可以在那個位置上做一個像徵性的,可以指出您已經擁有的Android-16.jar,以使煙灰感到高興。它不會影響分析結果精度。
-f選項指定要分析的APK。
Jaadas將輸出結果輸出到列表中以進行控制台,並將JSON-ED結果寫入輸出/目錄:{MD5_OF_INPUT_APK} .txt。可以在此倉庫的輸出目錄中找到一個樣本:https://github.com/flankerhqd/jaadas/blob/blob/master/master/master/output/92DB77BBE1CAE9004F11EF11EF11EF9D3D6CBF08.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 -jar -XMX8192M Jade -0.1.jar
Jaadas由Gradle組織。在源目錄的根部運行gradle fatJar ,將在./jade/build/中生成單捆jar的根,每個目錄實際上代表了最初的git子模塊。為了簡單起見,我將它們結合到同一根目錄,您可以根據需要更改它,跟踪上游煙灰更改。
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
感謝Soot作者(https://github.com/sable/soot)提供瞭如此良好的框架。
這只是一個研究原型,自行使用。由於靜態分析的性質,結果可能包含誤報和假否定性。隨意分叉並拉動它。
JDK> = 1.8(必須)
Scala> = 2.11測試