Communitygithub.com

apk-reverse

CLI 환경에서 Android APK 리버스 엔지니어링을 위한 스킬입니다. APK 언패킹, Java 디컴파일, smali 수정, 재패키징, Frida 동적 Hook 및 필요시 so/native 분석을 지원합니다. jadx, apktool, frida, adb, IDA, radare2 등 로컬에 설치된 도구를 우선 사용합니다.

apk-reverse란 무엇인가요?

이 스킬은 CLI 기반 Android APK 리버스 엔지니어링 작업을 위한 포괄적인 워크플로우와 도구 모음을 제공합니다. 주로 Java 비즈니스 로직 분석, 로그인/서명/위험 제어/인증서 검증/루트 탐지 등의 포인트 식별, AndroidManifest.xml 및 smali 파일 조회/수정, APK 재패키징, Frida를 이용한 동적 Java/native Hook 등의 시나리오를 다룹니다. 또한 APK에 .so 파일이 포함된 경우 native 분석으로 전환하는 방법을 안내합니다. 이 스킬이 지원하는 주요 플랫폼은 Windows CLI 환경이며, 사전에 검증된 도구로는 jadx 1.5.5, apktool 3.0.2, frida-ps 17.9.6, adb, java가 포함됩니다. jadx는 Java 디컴파일 및 고수준 로직 이해에, apktool은 APK 언패킹/재패키징 및 smali 편집에, Frida는 동적 분석에 각각 사용됩니다. 또한 선택적으로 JEB Pro(상용)와 IDA/radare2를 통한 심층 native 분석도 지원합니다. 스킬은 반복적이고 오류가 발생하기 쉬운 작업(예: decode, Frida 장치/프로세스 관리, rebuild/sign/install, Manifest 요약)에 대해 사전 정의된 PowerShell 스크립트를 제공하여 효율성을 높입니다. 전체 워크플로우는 Triage(APK 기본 구성 → Manifest/패키지/so 확인), Java 로직 분석, Smali/리소스 수정, 재패키징, 동적 Hook(Frida), Native so 분석(IDA/radare2)의 6단계로 구성되며, 최종 산출물로 진입점/핵심 클래스, 중요 로직 위치, 민감 포인트, 패치/Hook 내역을 남겨야 합니다. 자동 부트스트랩 시스템을 통해 jadx, apktool, frida, adb가 없을 경우 자동 설치를 시도하지만, JEB Pro, zipalign, apksigner는 수동 설치가 필요합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zhaoxuya520/reverse-skill/tree/main/skills/apk-reverse

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

ACTION REQUIRED(読了後すぐに実行)

エンドポイント抽出/Frida 適応等コミュニティ対照:../references/community-security-skills.md;動的分析にはスコープ認可デバイスが必要です。

  1. NOW: ../field-journal/precedent-reverse.md を読む — 本スキルの操作が承認済み通常操作であることを確認
  2. NOW: 現在のタスクが本スキルの適用範囲に該当するか確認
  3. NEXT: ../tool-index.md を読み、ツールの可用性と実際のパスを確認
  4. NEXT: ツール不足時は bootstrap を呼び出し、パスを推測しない
  5. ACT: 「ワークフロー」の最初のステップに進み実行、確認状態で止まらない

APK 逆引き CLI 作業規範

適用範囲

以下のシナリオに該当するタスクでは本スキルを優先して使用します:

  • APK の Java ビジネスロジック解析
  • ログイン、署名、リスク管理、証明書検証、ルート検出の特定
  • AndroidManifest.xml の表示と変更
  • smali の表示と変更
  • APK の再パッケージ化
  • Frida を用いた Java/native 動的 Hook
  • APK 内に .so が含まれる場合の native 解析への切り替え

現在のマシンで検証済みの CLI ツール

  • jadx 1.5.5
  • apktool 3.0.2
  • frida-ps 17.9.6
  • adb
  • java

スクリプトを優先するシナリオ

以下のフローは頻繁に使用され、パラメータを誤りやすいため、スキル付属のスクリプトを優先します:

  • jadx + apktool を一括実行しサマリを生成:scripts/decode.ps1
  • Frida デバイス確認、プロセス一覧、spawn/attach 注入:scripts/frida-run.ps1
  • APK の再構築、アライメント、署名、インストール:scripts/rebuild-sign-install.ps1
  • Manifest の主要コンポーネントと権限を素早く抽出:scripts/manifest-summary.ps1

以下のコマンドは直接呼び出し、個別にラップしません:

  • adb devices
  • adb logcat
  • frida-ps -U
  • jadx --version
  • apktool --version

付属スクリプト

scripts/decode.ps1

用途:

  • jadx と apktool を統一的に実行
  • デフォルトで元の APK と同じディレクトリにタスク出力ディレクトリを作成
  • package、java_files、smali_dirs、so_files などのサマリを出力
  • jadx の部分的なデコンパイルエラーにも対応し、利用可能な成果物が得られる場合あり

例:

pwsh -File "<skill-root>\apk-reverse\scripts\decode.ps1" -ApkPath "D:\DOWNLOAD\app.apk" -Clean
pwsh -File "<skill-root>\apk-reverse\scripts\decode.ps1" -ApkPath "D:\DOWNLOAD\app.apk" -Name demo -SkipJadx

scripts/frida-run.ps1

用途:

  • Frida のデバイス、プロセス、spawn/attach エントリを一元管理
  • -f、-n、-U のパラメータ混乱を防止

例:

pwsh -File "<skill-root>\apk-reverse\scripts\frida-run.ps1" -ListDevices
pwsh -File "<skill-root>\apk-reverse\scripts\frida-run.ps1" -Usb -ListProcesses
pwsh -File "<skill-root>\apk-reverse\scripts\frida-run.ps1" -Usb -Spawn -Package com.example.app -ScriptPath "D:\hooks\test.js"

scripts/rebuild-sign-install.ps1

用途:

  • apktool b で APK を再構築
  • zipalign でアライメント
  • apksigner で署名と署名検証
  • オプションで adb install を直接実行

例:

pwsh -File "<skill-root>\apk-reverse\scripts\rebuild-sign-install.ps1" -ProjectDir "C:\work\apktool_out" -Clean
pwsh -File "<skill-root>\apk-reverse\scripts\rebuild-sign-install.ps1" -ProjectDir "C:\work\apktool_out" -Install -Reinstall -DeviceSerial "127.0.0.1:7555"

説明:

  • デフォルトでデバッグキーストアを生成し再利用
  • デフォルトで ProjectDir と同じディレクトリに出力し、元のパッケージや展開ディレクトリと同じ場所に配置

scripts/manifest-summary.ps1

用途:

  • パッケージ名を抽出
  • 権限を一覧表示
  • activity/service/receiver/provider を一覧表示
  • メイン起動 activity をマーク

例:

pwsh -File "<skill-root>\apk-reverse\scripts\manifest-summary.ps1" -ManifestPath "C:\work\apktool_out\AndroidManifest.xml"

.so、lib/arm64-v8a/*.so、lib/armeabi-v7a/*.so を解析する場合は、以下を併用:

  • ida-reverse
  • radare2

ツールの役割分担

jadx

用途:

  • Java デコンパイル読解
  • パッケージ名、クラス名、メソッド名の検索
  • 高レベルロジックから APK を理解する

よく使うコマンド:

jadx -d jadx_out app.apk
jadx --single-class com.example.LoginActivity -d jadx_out app.apk
jadx --deobf -d jadx_out app.apk

JEB Pro(オプションの商用ツール)

用途:

  • Android DEX / APK / ARM のクロス検証と深層デコンパイル
  • JADX の出力が不完全、または難読化が強い場合の静的解析補完
  • 同一ターゲットのクラス、メソッド、呼び出し関係を第二ツールチェーンで検証

制限:

  • JEB Pro は商用ソフトウェアであり、ユーザー自身で入手し有効なライセンスをインストールする必要があります。本パッケージはダウンロード、クラック、ライセンス回避を行いません。
  • tool-index で JEB が利用可能と確認された場合のみ呼び出します。それ以外は jadx、apktool、Ghidra、IDA、radare2 を引き続き使用します。
  • サードパーティの JEB MCP bridge は本パッケージの依存関係ではありません。インストール前には ../ops/skill-supply-chain.md に従い、ソースコード、権限、ネットワーク動作、バージョンをレビューし、ユーザーの明示的な確認を得る必要があります。

apktool

用途:

  • APK の展開
  • AndroidManifest.xml の表示と変更
  • smali の表示と変更
  • APK の再構築

よく使うコマンド:

apktool d app.apk -o apktool_out
apktool b apktool_out -o rebuilt.apk

frida

用途:

  • Java メソッド呼び出しの動的観察
  • native エクスポート関数の Hook
  • ルート検出、証明書検証、デバッグ検出のバイパス

よく使うコマンド:

frida-ps -U
frida -U -f com.example.app -l hook.js
frida-trace -U -f com.example.app -j '*!*certificate*'

adb

用途:

  • デバイス接続
  • APK インストール
  • ログ表示
  • ファイル取得

よく使うコマンド:

adb devices
adb install -r app.apk
adb shell pm list packages
adb logcat
adb pull /data/local/tmp/file .

推奨ワークフロー

1. Triage

まず APK の大まかな構成を確認します。すぐにパッケージ変更や Hook を行わないでください。

推奨アクション:

  1. jadx -d jadx_out app.apk で Java コードをエクスポート
  2. apktool d app.apk -o apktool_out で smali とリソースをエクスポート
  3. 以下を確認:
    • AndroidManifest.xml
    • メイン package
    • application、activity、service、receiver
    • lib/ ディレクトリ内に .so があるか
  4. Issue #65 脅威形態クイックリファレンス(承認済みサンプル/デバイス;詳細は ../reverse-engineering/references/nonpe-format-cookbook.md §7–8 参照):
    • 透過/隠しアイコン(AU):aapt dump badging + manifest theme/label/icon → E-android-hidden-icon-manifest
    • Magisk/スクリプトによる端末初期化とリモート curl|sh(AR/AS)→ 特徴と URL を証拠として記録、破壊コマンドは実行しない
    • 永続化パス(AT):service.d / priv-app など → E-android-persistence

2. Java ロジック観察

jadx_out から優先して読む:

  • MainActivity
  • Application
  • ログイン、ネットワーク、暗号化、リスク管理関連クラス
  • サードパーティ SDK 初期化クラス

よくあるキーワード:

  • login
  • sign
  • encrypt
  • cipher
  • token
  • root
  • certificate
  • trust
  • okhttp
  • retrofit
  • webview

Java コードが読める場合は、まずここでビジネスロジックを特定します。

3. Smali とリソース層の確認

jadx の結果が不完全、難読化が強い、または実際にパッチが必要な場合は apktool_out に切り替えます:

  • smali*/ を確認
  • res/values/strings.xml を確認
  • AndroidManifest.xml を確認

優先パッチ対象:

  • android:exported
  • デバッグフラグ
  • ルート検出の戻り値
  • ログイン検証ロジック
  • 証明書検証ブランチ

4. 再構築とインストール

変更後:

apktool b apktool_out -o rebuilt.apk

またはスクリプトで閉じたループ:

pwsh -File "<skill-root>\apk-reverse\scripts\rebuild-sign-install.ps1" -ProjectDir "apktool_out" -Install -Reinstall -DeviceSerial "127.0.0.1:7555"

説明:

  • 本スキルは apktool による再構築パスのみ保証します
  • 後でデバイスに正式インストールする場合は、通常署名手順が必要です
  • タスクが署名/アライメントに進む場合は、apksigner / zipalign を追加

5. 動的 Hook

静的解析が不十分な場合、Frida を使用:

  • ログイン関数を Hook
  • OkHttp / Retrofit / WebView のキーポイントを Hook
  • javax.crypto、MessageDigest を Hook
  • ルート検出関数を Hook
  • SSL pinning ロジックを Hook

原則:

  • まず Java 層を Hook し、native Hook が必要か判断
  • まずパラメータと戻り値を出力し、その後戻り値を能動的に変更するか判断

推奨:

  • 簡単な単発コマンドは直接 frida-* を使用
  • 安定した再利用が必要な注入フローは scripts/frida-run.ps1 を優先

6. Native .so への分流

APK に重要な .so が含まれている場合:

  • apktool または jadx で lib/**/*.so を特定
  • シンボル、文字列のエクスポート、簡単なトリアージのみの場合は radare2 を使用
  • 長期的な深層解析、デコンパイル、リネーム、型復元が必要な場合は ida-reverse を使用

以下のシグナルがあれば、速やかに native に切り替える:

  • Java 層が単なる JNI ラッパーである
  • コア署名ロジックが Java にない
  • System.loadLibrary() 後に重要なロジックが消える
  • 証明書検証/リスク管理が .so 内にある

出力要件

最終的に少なくとも以下を説明すること:

  • エントリコンポーネントと主要クラス
  • 主要ロジックが Java、smali、.so のいずれにあるか
  • 確認された機密ポイント:ログイン、署名、ルート、SSL、WebView、JNI
  • パッチを行った場合、何を変更したか
  • Hook を行った場合、どのクラス/メソッド/エクスポート関数を Hook したか

禁止事項

  • 最初から盲目的に smali を変更しない
  • Manifest とメインエントリを確認せずに Hook を書かない
  • Java デコンパイルが不完全だからといって「ロジック解析不能」と即断しない
  • .so が明らかにコアロジックを担っている場合、Java 層に固執しない

クイックコマンドメモ

# Java デコンパイル
jadx -d jadx_out app.apk

# APK 展開
apktool d app.apk -o apktool_out

# APK 再構築
apktool b apktool_out -o rebuilt.apk

# デバイスとプロセス
adb devices
frida-ps -U

# 起動と注入
frida -U -f com.example.app -l hook.js

ルーティングコンテキスト

上流エントリ: skills/SKILL.md(統括)、routing.md 下流出力先:

  • コアロジックが .so → ida-reverse/ または radare2/
  • 動的 Hook/検証が必要 → reverse-engineering/tools-dynamic.md(Frida 章)
  • 汎用リバースエンジニアリング手法 → reverse-engineering/SKILL.md

同階層関連モジュール: reverse-engineering/(.so 解析と Frida 応用法)


オンデマンドブートストラップ(On-Demand Bootstrap)

本スキルのエントリスクリプトは統一ブートストラップシステムに接続されています。ツールが不足していても即エラーにならず、自動インストールを試みます。

自動化機能の境界

ツール自動インストール可能インストール方法説明
jadx✓GitHub Release ZIP%USERPROFILE%\Tools\jadx\ に自動ダウンロード・展開
apktool✓GitHub Release JAR + wrapperjar を自動ダウンロードし、bat を生成して %USERPROFILE%\Tools\apktool\ に配置
JEB Pro✗ユーザー手動インストール、有効なライセンスが必要オプションの Android / ARM クロス検証ツール;サードパーティ MCP bridge は個別監査が必要
frida / frida-ps✓pip install frida-toolsPython がインストールされている必要がある
adb✓winget / フォールバックパスAndroid Platform-Tools を自動インストール
zipalign✗Android Build-Tools の手動インストールが必要sdkmanager "build-tools;35.0.0"
apksigner✗Android Build-Tools の手動インストールが必要同上

ブートストラップトリガーポイント

  • scripts/decode.ps1:jadx または apktool がない場合、bootstrap-reverse.ps1 を自動呼び出し
  • scripts/rebuild-sign-install.ps1:adb または apktool がない場合、bootstrap を自動呼び出し
  • scripts/frida-run.ps1:現時点では手動チェック(frida は通常 pip でインストール済み)

ブートストラップ失敗時

自動インストールが失敗した場合、スクリプトは明確なエラーと手動インストールリンクを出力します。よくある原因:

  • ネットワーク不通(GitHub API / PyPI に到達不可)
  • winget が利用不可(Windows バージョンが低すぎる)
  • Java 未インストール(apktool は JDK に依存)

タスク完了チェック(完了宣言前に MUST)

  • ワークフローの各ステップを実行したか(読んだだけではない)?
  • tool-index に基づき実際のツールパスを使用したか?
  • 再現可能な証拠(コマンド/スクリプト/スクリーンショット/レポート)を生成したか?
  • RULES で要求される Checklist 項目を完了し、書き戻したか?
  • 隠しアイコン/端末初期化/永続化の手がかりに該当する場合:U–AV cookbook に従って E-android-* Evidence を記録したか(認可範囲内)?

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

api-security

Use for authorized security assessment of REST, GraphQL, WebSocket, or SOAP APIs, including discovery, authentication, authorization, rate-limit, and CI/CD testing.

attack-chain

Use for authorized multi-stage attack-path planning and orchestration when a task spans reconnaissance, initial access, privilege escalation, lateral movement, or impact assessment. Route single-stage tasks directly to their specialist skill.

binary-diff

|

binary-ninja-reverse

Use for authorized binary analysis in Binary Ninja, including HLIL/MLIL/LLIL inspection, strings/imports/exports, cross-references, types, patch review, Python API automation, and optional Binary Ninja MCP or localhost HTTP integration.

browser-automation

|

browser-extension-reverse

Use for authorized reverse engineering of browser extensions (Chrome/Firefox) including manifest analysis, background workers, and extension-based credential or traffic logic recovery.

case-review

Reviews a reverse-skill case package for scope readiness, Evidence to Finding to Path traceability, work item coverage, timeline references, and optional artifact hash integrity before report handoff.

cloud-k8s

Use for authorized cloud, container, and Kubernetes security assessment including metadata SSRF, IAM misconfig, container escape paths, and cluster RBAC review.

code-audit

Use for authorized source-code security review and SAST workflows including Semgrep, CodeQL patterns, dangerous API hunting, and fix verification.

ctf-sandbox

Thin PRIMARY for CTF / AWD / 靶场 multi-type orchestration. Hands off to the sidecar CTF-Sandbox-Orchestrator. Use when the user says CTF, AWD, 靶场, or 比赛题 and no more specific pwn/APK/IDA route already won.

database-security

Use for authorized database security assessment covering PostgreSQL/MySQL/MSSQL/Mongo/Redis exposure, authz, UDF/command paths, and misconfiguration review.

diagram-generator

generate, refine, validate, and render diagrams from natural language, notes, code snippets, schemas, tables, or existing diagram source. use for flowcharts, swimlanes, sequence diagrams, state diagrams, er diagrams, class diagrams, architecture/c4-style diagrams, dependency graphs, gantt charts, mind maps, user journeys, sankey-style flows, org charts, network graphs, and other visual models. supports mermaid by default, graphviz dot for complex graph layout, plantuml for uml-heavy engineering diagrams, and svg output when direct markup is more reliable.

digital-forensics

Use for authorized digital forensics including memory dumps, disk timelines, PCAP investigation, artifact triage, and IR evidence preservation.

docs-generator

|

dotnet-reverse

.NET / C# 二进制逆向。当目标是 .NET assembly(PE 头含 CLR、.exe/.dll 托管程序)、C# 编译产物(含 NativeAOT)、红队 Sharp* 工具(Rubeus / SharpHound / SharpHound 等)、.NET 混淆程序(ConfuserEx / SmartAssembly / Babel / Eazfuscator)、.NET loader / info-stealer / 套壳 malware 时使用。优先用 dnSpyEx + de4dot,需要 AI 直接操作时联动 dnSpy MCP。不用于纯 native 二进制(走 reverse-engineering / ida-reverse)。

edr-bypass-re

|

email-security

Use for authorized email security review including phishing analysis, header authentication (SPF/DKIM/DMARC), BEC patterns, and mailbox token abuse research.

firmware-pentest

|

ghidra-reverse

Use for free/open reverse engineering with Ghidra (headless or GUI), including decompile, cross-refs, and optional Ghidra MCP workflows when IDA is unavailable.

go-rust-reverse

Use for reverse engineering stripped Go and Rust binaries including runtime recognition, pclntab/moduel data recovery, panic strings, and idiomatic decompilation recovery.

관련 스킬