Dies ist ein Joint Advanced Defect Assessment Framework für Android -Anwendungen (JAADS, Originalname Jade, um eine potenzielle Markenausgabe zu vermeiden), die 2014 geschrieben wurde. Jaadas ist ein Tool, das in Java und Scala geschrieben wurde, um sowohl die statische Analyse für die statische Analyse für Android -Anwendungen bereitzustellen. Zu den Merkmalen gehören die API-Missbrauchsanalyse, eine lokale Analyse des Dienstes (Intent Crash), die Analyse der Taint Flow (von Absicht bis hin zu empfindlicher API, dh, dh ein Parzelable von Intent und verwenden Sie sie, um die Aktivität zu starten).
Jaadas können auch Multidex zu einem kombinieren und sie insgesamt analysieren. Die meisten Erkennungsfunktionen von Jaadas können in einer Groovy -Konfigurationsdatei und in der Textdatei (Soot -Quell- und Sink -Datei) definiert werden.
Jaadas ist in ein einzelnes Jar -Archiv verpackt und ich stelle eine Standarddatei für Verwundbarkeitsregeln an. Es gibt zwei Hauptmodus für Jaadas.
FullAnalysis entfesselt die volle Leistung von Jaadas und Ruß, einschließlich der Analyse der Ganzanwendung und der Analyse der Datenflussdatenflow. Es kann aber auch viel Zeit verbrauchen und kann nicht auf Maschinen mit kleinem Speicher (<16 GB) abgeschlossen werden. Standard ist ein Vollmodus.
FastAnalysis endet normalerweise in weniger als 1 Minute und ist für eine großflächige Chargenanalyse bestimmt. Die Analyse der Inter-Procedure ist deaktiviert, um die maxmiumflexibilität zu erreichen. In normalen Situationen reicht dieser Modus für eine gemeinsame Prüfung aus.
-Die Fastanalyse ermöglicht eine Fastanalyse und deaktiviert die Vollanalyse.
Befehlszeile für die Analyse: java -jar jade-0.1.jar vulnanalysis -f 1.apk -p /xxx/android-sdks/platforms/ -c /xxx/JAADAS/jade/config/ --fastanalysis
### -C Option -c muss als Verzeichnis für Konfigurationsdateien bereitgestellt werden, einschließlich Melderegeln, Quelle und Sinke, anfällige API -Beschreibung usw. Wenn Sie den Inhalt der Konfigurationsdateien nicht verstehen, ändern Sie sie nicht und lassen Sie sie so, wie es ist.
### -P Option -P -Option Gibt das Android -Plattform -Verzeichnis an, das normalerweise nur auf $ {android_sdk}/Plattformen/zeigt.
Soot erfordert, dass die spezifische Version von Platform.jar vorgestellt wird. Wenn Ihr Analyse-Ziel beispielsweise Ziele hat, sucht Soot nach Plattformen/Android-22/android.jar, da ansonsten Fehler aufwirft. Wenn Sie nicht über das spezifische Glas verfügen, können Sie in dieser Position tatsächlich einen Symbolen machen und zeigen, was Sie bereits beispielsweise Android-16.jar haben, um Ruß zu glücklich zu machen. Es beeinflusst die Analyseergebnispräzision nicht.
-F -Option gibt die zu analysierende APK an.
Jaadas gibt das Ergebnis in einer Liste in die Konsole aus und schreibt auch JSON-ED-Ergebnis in Ausgabe/ Verzeichnis: {Md5_of_input_apk} .txt. Ein Beispiel finden Sie im Ausgabeverzeichnis dieses Repo
Snippet:
}, {
"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)> "
}]}Um OOM zu vermeiden, fügen Sie die Option -xmx zu commandline hinzu, z.
Jaadas wird von Gradle organisiert. Rennen Sie gradle fatJar am Quellverzeichnis und das Single-Bündel-Glas wird unter ./jade/build/ jedes Verzeichnis erzeugt, das ursprünglich ein Git-Submodul darstellt. Der Einfachheit halber kombiniere ich sie mit denselben Root -Verzeichnissen und Sie können sie nach Belieben ändern. Richten Sie die Änderungen der Upstream -Ruß nach.
https://speakerdeck.com/flankerhqd/jade-joint-advanced-defect-assment
https://github.com/flankerhqd/jaadas/wiki
https://github.com/flankerhqd/jaadas/releass/download/release0.1/jaadas-0.1.zip
Vielen Dank an Soot -Autoren (https://github.com/Sable/soot) für die Bereitstellung eines so guten Frameworks.
Dies ist nur ein Forschungsprototyp, der auf eigenes Risiko verwendet wird. Die Ergebnisse können aufgrund der Art der statischen Analyse falsch positive und falsche Negative enthalten. Fühlen Sie sich frei zu gib und ziehen Sie es.
JDK> = 1,8 (Muss)
Scala> = 2.11 getestet