
Statische Taint-Analyse-Plattform für Android-Apps, die Schwachstellen und Compliance-Probleme mithilfe anpassbarer regelbasierter Scans und detaillierter Ergebnisberichte erkennt.
Appshark ist eine statische Taint-Analyse-Plattform zur Erkennung von Schwachstellen in Android-Apps.
Appshark benötigt eine bestimmte Version von JDK -- JDK 11. Nach Tests funktioniert es aufgrund von Abhängigkeitskompatibilitätsproblemen nicht mit anderen LTS-Versionen wie JDK 8 und JDK 16.
Wir gehen davon aus, dass Sie sich im Stammverzeichnis des Projekt-Repositorys befinden. Sie können das gesamte Projekt mit dem Gradle-Tool erstellen.
$ ./gradlew build -x test
Nach der Ausführung des obigen Befehls sehen Sie die Artefaktdatei AppShark-0.1.2-all.jar im Verzeichnis build/libs.
Wie im vorherigen Schritt gehen wir davon aus, dass Sie sich noch im Stammverzeichnis des Projekts befinden. Sie können das Tool mit folgendem Befehl ausführen:
$ java -jar build/libs/AppShark-0.1.2-all.jar config/config.json5
Die config.json5 enthält die folgenden Konfigurationsinhalte.
{
"apkPath": "/Users/apks/app1.apk"
}
Jede JSON-Datei hat diese grundlegenden Felder.
, getrennt. Standardmäßig sind es alle *.json-Dateien im $rulePath-VerzeichnisFür weitere Konfigurationsfelder besuchen Sie bitte net.bytedance.security.app.ArgumentConfig
Wenn Sie eine Konfigurations-JSON-Datei bereitstellen, die den Ausgabepfad als out im Stammverzeichnis des Projekts festlegt, finden Sie
nach der Analyse die Ergebnisdatei out/results.json.
Nachfolgend ein Beispiel der results.json.
{
"AppInfo": {
"AppName": "test",
"PackageName": "net.bytedance.security.app",
"min_sdk": 17,
"target_sdk": 28,
"versionCode": 1000,
"versionName": "1.0.0"
},
"SecurityInfo": {
"FileRisk": {
"unZipSlip": {
"category": "FileRisk",
"detail": "",
"model": "2",
"name": "unZipSlip",
"possibility": "4",
"vulners": [
{
"details": {
"position": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>",
"Sink": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r31",
"entryMethod": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void f()>",
"Source": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r3",
"url": "/Volumes/dev/zijie/appshark-opensource/out/vuln/1-unZipSlip.html",
"target": [
"<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r3",
"pf{obj{<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>:35=>java.lang.StringBuilder}(unknown)->@data}",
"<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r11",
"<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r31"
]
},
"hash": "ec57a2a3190677ffe78a0c8aaf58ba5aee4d2247",
"possibility": "4"
},
{
"details": {
"position": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>",
"Sink": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r34",
"entryMethod": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void f()>",
"Source": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r3",
"url": "/Volumes/dev/zijie/appshark-opensource/out/vuln/2-unZipSlip.html",
"target": [
"<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r3",
"pf{obj{<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>:33=>java.lang.StringBuilder}(unknown)->@data}",
"<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r14",
"<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r34"
]
},
"hash": "26c6d6ee704c59949cfef78350a1d9aef04c29ad",
"possibility": "4"
}
],
"wiki": "",
"deobfApk": "/Volumes/dev/zijie/appshark-opensource/app.apk"
}
}
},
"DeepLinkInfo": {
},
"HTTP_API": [
],
"JsBridgeInfo": [
],
"BasicInfo": {
"ComponentsInfo": {
},
"JSNativeInterface": [
]
},
"UsePermissions": [
],
"DefinePermissions": {
},
"Profile": "/Volumes/dev/zijie/appshark-opensource/out/vuln/3-profiler.json"
}
AppShark ist unter der APACHE LICENSE, VERSION 2.0 lizenziert.
Die Benutzeroberfläche/der Server ist ein unterstützendes Testwerkzeug, das nicht in Produktionsumgebungen verwendet werden sollte und nur für lokale Tests bereitgestellt werden kann.
Lark 