O AppShark é uma plataforma de análise de mancha estática para digitalizar vulnerabilidades em um aplicativo Android.
O AppShark requer uma versão específica do JDK - JDK 11. Após o teste, não funciona em outras versões do LTS, JDK 8 e JDK 16, devido ao problema de compatibilidade de dependência.
Assumimos que você está trabalhando no diretório raiz do repo do projeto. Você pode construir todo o projeto com a ferramenta Gradle.
$ ./gradlew build -x test Depois de executar o comando acima, você verá um arquivo de artefato AppShark-0.1.2-all.jar no diretório build/libs .
Como a etapa anterior, assumimos que você ainda está na pasta raiz do projeto. Você pode executar a ferramenta com
$ java -jar build/libs/AppShark-0.1.2-all.jar config/config.json5 O config.json5 possui o seguinte conteúdo de configuração.
{
"apkPath" : " /Users/apks/app1.apk "
} Cada JSON tem esse campo básico.
, . O padrão é tudo *.json arquivos no diretório $ rulepath Para mais campo de configuração, visite net.bytedance.security.app.ArgumentConfig
Se você fornecer um arquivo JSON de configuração que define o caminho de saída out o diretório raiz do projeto, encontrará o arquivo out/results.json após a execução da análise.
Abaixo está um exemplo dos 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 está licenciado sob a licença Apache, versão 2.0
Cotovia