这是针对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测试