Communitygithub.com

apk-reverse (APK逆向)

CLI環境でAndroid APKのリバースエンジニアリングを行うためのスキルです。APKの解凍、Java逆コンパイル、smali修正、再パッケージング、Frida動的Hook、必要に応じたso/ネイティブ分析に対応します。

apk-reverse (APK逆向) とは?

このスキルは、CLIベースのAndroid APKリバースエンジニアリングを効率的に実行するための包括的な作業手順とスクリプト群を提供します。主なユースケースは、Javaビジネスロジックの分析、ログイン/署名/リスク制御/ルート検出などのセキュリティ関連ポイントの特定、AndroidManifest.xmlやsmaliの修正、APKの再パッケージング、Fridaを用いたJava/ネイティブ層の動的フックです。スキルはjadx、apktool、Frida、adbなど、マシンに既存のツールを優先して利用し、不足するツールは自動的にインストールを試みます(ブートストラップ機能)。スクリプト(decode.ps1、frida-run.ps1、rebuild-sign-install.ps1、manifest-summary.ps1)により、高頻度かつエラーが発生しやすい作業を自動化し、分析者はコアロジックに集中できます。また、タスクの種類に応じてJava層、smali層、動的フック、ネイティブ.so分析のいずれに重点を置くかを判断するワークフローを推奨しており、出力として入口コンポーネント、重要クラス、発見された脆弱性ポイントなどを明確に報告することが求められます。

対応✓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/ネイティブ動的フック
  • APK内に .so が含まれる場合、ネイティブ分析に切り替え

現在のマシンで利用可能な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ブリッジは本パッケージの依存関係ではありません。インストール前には ../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メソッド呼び出しの動的観察
  • ネイティブエクスポート関数のフック
  • ルート検出、証明書検証、デバッグ検出のバイパス

一般的なコマンド:

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の大まかな構成を把握し、すぐにパッケージ変更やフックを行わない。

推奨アクション:

  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. 動的フック

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

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

原則:

  • 先にJava層をフックし、必要に応じてネイティブフックを検討
  • まず引数と戻り値を出力し、その後戻り値を能動的に変更するか判断

推奨:

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

6. Native .so への分流

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

  • apktool または jadx で lib/**/*.so を見つける
  • シンボルエクスポート、文字列、簡易トリアージのみであれば radare2 を使用
  • 長期的な詳細分析、逆コンパイル、リネーム、型復元が必要な場合は ida-reverse を使用

以下のシグナルが出たら、速やかにネイティブ分析に切り替えます:

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

出力要件

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

  • エントリコンポーネントとキークラス
  • 重要なロジックがJava、smali、.so のいずれにあるか
  • 確認された脆弱性ポイント:ログイン、署名、root、SSL、WebView、JNI
  • パッチを適用した場合、その内容
  • フックを実行した場合、フックしたクラス/メソッド/エクスポート関数

禁止事項

  • 最初から盲目的にsmaliを修正しない
  • Manifestとメインエントリを確認する前にフックを作成しない
  • 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/
  • 動的フック/検証が必要な場合 → 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 + wrapper自動ダウンロードし、jarを保存、batを生成して %USERPROFILE%\Tools\apktool\ へ
JEB Pro✗ユーザー手動インストール&有効なライセンスが必要オプションのAndroid / ARM相互検証ツール;サードパーティMCPブリッジは個別監査が必要
frida / frida-ps✓pip install frida-toolsPythonがインストールされている必要あり
adb✓winget / fallback pathAndroid 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 で要求されているチェックリスト項目を完了し、記録しましたか?
  • 隠しアイコン/端末ワイプ/永続化の手がかりに該当する場合:U–AVクックブックに従って 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.

関連スキル