appshark
v0.1.2
Appshark는 Android 앱에서 취약점을 스캔하기위한 정적 인 오염 분석 플랫폼입니다.
AppShark에는 특정 버전의 JDK -JDK 11이 필요합니다. 테스트 후 종속성 호환성 문제로 인해 다른 LTS 버전 JDK 8 및 JDK 16에서는 작동하지 않습니다.
우리는 당신이 프로젝트 Repo의 루트 디렉토리에서 작업하고 있다고 가정합니다. Gradle 도구로 전체 프로젝트를 구축 할 수 있습니다.
$ ./gradlew build -x test 위 명령을 실행하면 디렉토리 build/libs 에 아티팩트 파일 AppShark-0.1.2-all.jar 표시됩니다.
이전 단계와 마찬가지로, 우리는 여전히 프로젝트의 루트 폴더에 있다고 가정합니다. 도구를 사용하여 실행할 수 있습니다
$ java -jar build/libs/AppShark-0.1.2-all.jar config/config.json5 config.json5 에는 다음 구성 내용이 있습니다.
{
"apkPath" : " /Users/apks/app1.apk "
} 각 JSON에는 이러한 기본 필드가 있습니다.
, 기본값은 모두 *.json 파일 $ rulepath 디렉토리입니다 더 많은 구성 필드는 net.bytedance.security.app.ArgumentConfig 방문하십시오
Project Root 디렉토리에서 출력 경로를 out 으로 설정하는 구성 JSON 파일을 제공하면 분석을 실행 한 후 결과 파일 out/results.json 찾을 수 있습니다.
아래는 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는 Apache 라이센스 버전 2.0에 따라 라이센스가 부여됩니다
종달새