Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
appshark — 안드로이드 앱을 위한 정적 오염 분석 플랫폼으로, 사용자 정의 가능한 규칙 기반 스캔 및 상세 결과 보고를 통해 취약점과 규정 준수 문제를 탐지합니다. | Kitploit
도구/GitHubGitHub/bytedance/appshark
Android SecurityStatic AnalysisVulnerability AnalysisCode Analysis
GitHubbytedance/appshark

appshark

안드로이드 앱을 위한 정적 오염 분석 플랫폼으로, 사용자 정의 가능한 규칙 기반 스캔 및 상세 결과 보고를 통해 취약점과 규정 준수 문제를 탐지합니다.

저장소 보기
1.8k1795개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

문서 색인

  • 1. 개요
  • 2. 시작
  • 3. 규칙 작성 방법
  • 4. Appshark를 사용하여 규정 준수 문제를 찾는 방법
  • 5. 경로 탐색 게임
  • 6. 인수
  • 7. 엔진 구성
  • 8. 결과
  • 9. FAQ

AppShark

Appshark는 Android 앱의 취약점을 스캔하는 정적 오염 분석 플랫폼입니다.

전제 조건

Appshark는 특정 버전의 JDK가 필요합니다. -- JDK 11. 테스트 결과, 다른 LTS 버전(JDK 8 및 JDK 16)에서는 의존성 호환성 문제로 인해 작동하지 않습니다.

AppShark 빌드/컴파일

프로젝트 저장소의 루트 디렉터리에서 작업한다고 가정합니다. gradle 도구를 사용하여 전체 프로젝트를 빌드할 수 있습니다.

root@kitploit:~
$ ./gradlew build -x test

위 명령어를 실행하면 build/libs 디렉터리에 AppShark-0.1.2-all.jar 아티팩트 파일이 생성됩니다.

AppShark 실행

이전 단계와 마찬가지로, 프로젝트의 루트 폴더에 있다고 가정합니다. 다음 명령어로 도구를 실행할 수 있습니다.

root@kitploit:~
$ java -jar build/libs/AppShark-0.1.2-all.jar config/config.json5

config.json5에는 다음과 같은 구성 내용이 포함되어 있습니다.

root@kitploit:~
{
  "apkPath": "/Users/apks/app1.apk"
}

각 JSON에는 다음과 같은 기본 필드가 있습니다.

  • apkPath: 분석할 APK 파일의 경로
  • out: 출력 디렉터리의 경로
  • rules: 규칙 지정, ,로 구분. 기본값은 $rulePath 디렉터리의 모든 *.json 파일입니다.
  • rulePath: 규칙의 상위 디렉터리 지정, 기본값은 ./config/rules
  • maxPointerAnalyzeTime: 진입점에서 시작된 분석에 설정된 제한 시간(초)
  • debugRule: 디버깅 로깅을 활성화하는 규칙 이름 지정

더 많은 구성 필드는 net.bytedance.security.app.ArgumentConfig를 참조하세요.

출력 경로를 프로젝트 루트 디렉터리의 out으로 설정한 구성 JSON 파일을 제공하면, 분석 실행 후 out/results.json 결과 파일을 찾을 수 있습니다.

결과 해석

다음은 results.json의 예시입니다.

root@kitploit:~
{
  "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 LICENSE, VERSION 2.0에 따라 라이선스가 부여됩니다.

보안 고지

UI/서버는 보조 테스트 도구로서 프로덕션 환경에서 사용해서는 안 되며, 로컬 테스트 용도로만 배포해야 합니다.

문의하기

Lark

도구 다운로드