
Android APK/XAPK/JAR/AAR 파일을 디컴파일하고, jadx를 사용하여 HTTP API, 인증 패턴 및 호출 흐름을 추출하며, R8에 강한 Kotlin 이름 복구 기능을 통해 보안 연구 및 침투 테스트를 지원합니다.
Android APK/XAPK/JAR/AAR 파일을 디컴파일하고 앱에서 사용하는 HTTP API (Retrofit 엔드포인트, OkHttp 호출, 하드코딩된 URL, 인증 패턴)를 추출하여 원본 소스 코드 없이도 이를 문서화하고 재현할 수 있는 Claude Code 스킬입니다.
최상의 Kotlin 지원: 최신 Android 앱은 Kotlin/KMP로 작성되며 R8로 심하게 난독화됩니다. 이 스킬은 R8이 제거할 수 없는 메타데이터에서 원래 Kotlin 클래스 이름을 복구하고, Ktor, Apollo (GraphQL), Koin에서 API를 추출합니다 — 기존의 Retrofit/OkHttp 스택뿐만 아니라. 자세한 내용은 아래 Kotlin 이름 복구를 참조하세요.
Windows / PowerShell 지원 (실험적): bash 스크립트와 함께 제공되는
*.ps1스크립트는 최근 커뮤니티 기여로, 아직 안정화 중입니다. 문제가 발생하면 이 저장소에 이슈를 열어주세요 (기여자의 업스트림 포크가 아닙니다): PowerShell 스크립트는 @SimoneAvogadro가 여기서 유지 관리합니다.
필수:
선택 사항 (권장):
자세한 설치 지침은 plugins/android-reverse-engineering/skills/android-reverse-engineering/references/setup-guide.md를 참조하세요.
Claude Code 내에서 실행:
/plugin marketplace add SimoneAvogadro/android-reverse-engineering-skill
/plugin install android-reverse-engineering@android-reverse-engineering-skill
스킬은 이후 모든 세션에서 영구적으로 사용할 수 있습니다.
git clone https://github.com/SimoneAvogadro/android-reverse-engineering-skill.git
그런 다음 Claude Code에서:
/plugin marketplace add /path/to/android-reverse-engineering-skill
/plugin install android-reverse-engineering@android-reverse-engineering-skill
/decompile path/to/app.apk
전체 워크플로(종속성 확인, 디컴파일 및 초기 구조 분석)를 실행합니다.
스킬은 다음과 같은 문구에 반응합니다:
스크립트는 독립적으로도 사용할 수 있습니다:
# 종속성 확인
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/check-deps.sh
# 누락된 종속성 설치 (OS 및 패키지 관리자 자동 감지)
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/install-dep.sh jadx
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/install-dep.sh vineflower
# 디컴파일 전에 APK/XAPK 지문 분석 (Phase 0 분류):
# 프레임워크, HTTP 스택, 난독화 수준, 네이티브 라이브러리, 주목할 만한 SDK
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/fingerprint.sh app.apk
# jadx로 APK 디컴파일 (기본)
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh app.apk
# XAPK 디컴파일 (내부 각 APK 자동 추출 및 디컴파일)
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh app-bundle.xapk
# Fernflower로 디컴파일
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh --engine fernflower library.jar
# 두 엔진 실행 및 비교
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh --engine both --deobf app.apk
# API 호출 찾기 — 기본적으로 모든 지원 스택 전체 검색
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --retrofit
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --urls
# 최신 Kotlin/KMP 스택 및 난독화 저항 추출
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --ktor # Ktor client
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --apollo # Apollo / GraphQL
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --paths # R8 인라이닝에서 살아남는 인용된 경로 리터럴
대부분의 실제 Kotlin/KMP 앱은 R8을 통해 배포되므로 디컴파일된 클래스는 a.b.c 형태로 나옵니다. R8은 JVM 심볼을 이름을 바꾸지만 Kotlin 메타데이터 문자열을 제거할 수 없습니다 — Kotlin 런타임(리플렉션, 코루틴)은 런타임에 원래 정규화된 이름이 필요합니다. 이 스킬은 해당 @DebugMetadata / @Metadata 어노테이션을 분석하여 난독화됨 → 실제 클래스 이름 매핑을 재구성합니다. 일반적인 앱에서 실제로 읽고 싶은 *Repository / *ViewModel / *UseCase / *Impl 클래스의 약 100%를 복구합니다.
# 1. 디컴파일된 소스에서 매핑 구축
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/recover-kotlin-names.sh output/sources/ output/names/
# → output/names/mapping.tsv, mapping.json, by_package/
# 2. 쿼리: 난독화된 이름 확인, 실제 이름으로 검색, 또는 grep
# 각 히트에 복구된 클래스 이름이 주석으로 달린 소스 검색
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/lookup-name.sh output/names/ LoginRepository
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/lookup-name.sh output/names/ -o a.b.c
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/lookup-name.sh output/names/ --grep 'login' output/sources/
android-reverse-engineering-skill/
├── .claude-plugin/
│ └── marketplace.json # Marketplace catalog
├── plugins/
│ └── android-reverse-engineering/
│ ├── .claude-plugin/
│ │ └── plugin.json # Plugin manifest
│ ├── skills/
│ │ └── android-reverse-engineering/
│ │ ├── SKILL.md # Core workflow (Phase 0–5)
│ │ ├── references/
│ │ │ ├── setup-guide.md
│ │ │ ├── jadx-usage.md
│ │ │ ├── fernflower-usage.md
│ │ │ ├── api-extraction-patterns.md
│ │ │ ├── kotlin-name-recovery.md
│ │ │ ├── third_party_hosts.txt # denylist for first/third-party bucketing
│ │ │ └── call-flow-analysis.md
│ │ └── scripts/
│ │ ├── check-deps.sh # Bash
│ │ ├── check-deps.ps1 # PowerShell
│ │ ├── install-dep.sh
│ │ ├── install-dep.ps1
│ │ ├── decompile.sh
│ │ ├── decompile.ps1
│ │ ├── fingerprint.sh # Phase 0 — pre-decompile triage
│ │ ├── recover-kotlin-names.sh # R8 → real Kotlin class names
│ │ ├── lookup-name.sh # query the recovered name map
│ │ ├── find-api-calls.sh
│ │ └── find-api-calls.ps1
│ └── commands/
│ └── decompile.md # /decompile slash command
├── LICENSE
└── README.md
이 스킬을 만드는 데 기여해 주신 분들께 감사드립니다:
recover-kotlin-names.sh, lookup-name.sh), Ktor / Apollo / Koin / HMAC 추출 패턴 (#16)check-deps.ps1, install-dep.ps1, decompile.ps1, find-api-calls.ps1) 및 decompile.sh에서 분할/번들 APK 감지 (#8)ThexXTURBOXx/dex2jar 포크로 마이그레이션 (#12)SKILL.md 검색 키워드) (#4)이 플러그인은 합법적인 목적으로만 제공되며, 여기에는 다음이 포함되나 이에 국한되지 않습니다:
귀하는 단독으로 이 도구의 사용이 모든 관련 법률, 규정 및 서비스 약관을 준수하도록 할 책임이 있습니다. 소유하지 않거나 분석할 권한이 없는 소프트웨어의 무단 리버스 엔지니어링은 해당 관할권의 지적 재산권 법률 및 컴퓨터 사기 법률을 위반할 수 있습니다.
저자는 이 도구의 오용에 대한 어떠한 책임도 부인합니다.
Apache 2.0 — LICENSE 참조
| 기능 | 설명 |
|---|
| 우선 지문 분석 (Phase 0) | APK/XAPK를 몇 초 만에 분류 — 전체 디컴파일 시간을 소모하기 전에 프레임워크(Flutter / React Native / Cordova / Xamarin / 네이티브 Kotlin), HTTP 스택, 난독화 수준 및 네이티브 라이브러리를 감지합니다 |
| 디컴파일 | jadx 및 Fernflower/Vineflower를 사용하여 APK, XAPK, JAR, AAR 파일을 디컴파일합니다 (단일 엔진 또는 나란히 비교) |
| Kotlin 이름 복구 | R8이 제거할 수 없는 Kotlin 메타데이터를 사용하여 R8 난독화된 바이너리에서 원래 *Repository / *ViewModel / *UseCase 클래스 이름을 재구성합니다 |
| API 추출 | Retrofit, OkHttp, Volley 및 최신 Kotlin/KMP 스택: Ktor, Apollo (GraphQL), Koin DI — 엔드포인트, 하드코딩된 URL, 인증 헤더, 토큰 및 HMAC 요청 서명 체계 |
| 호출 흐름 추적 | Activities/Fragments에서 ViewModels 및 저장소를 거쳐 HTTP 호출까지 추적합니다 |
| 구조 분석 | 매니페스트, 패키지, 아키텍처 패턴 |
| 난독화 처리 | R8에 강한 경로/URL 추출 및 ProGuard/R8 출력 탐색 전략 |