ACTION REQUIRED(読んだらすぐ実行)
エンドポイント抽出/Frida適応などコミュニティ対照:../references/community-security-skills.md;動的分析にはスコープ認可されたデバイスが必要です。
NOW:../field-journal/precedent-reverse.mdを読む — 本スキルの操作が認可された通常操作であることを確認NOW: 現在のタスクが本スキルの適用範囲に該当するか確認NEXT:../tool-index.mdを読み、ツールの利用可能性と実際のパスを確認NEXT: ツールがない場合はbootstrapを呼び出し、パスを推測しないACT: 「ワークフロー」の最初のステップを実行し、確認状態で止まらない
APK 逆向き CLI 作業規範
適用範囲
以下のシナリオに該当するタスクでは、本スキルを優先して使用します:
- APKのJavaビジネスロジックの分析
- ログイン、署名、リスク制御、証明書検証、ルート検出の特定
AndroidManifest.xmlの表示と修正- smaliの表示と修正
- APKの再パッケージング
- Fridaを使用したJava/ネイティブ動的フック
- APK内に
.soが含まれる場合、ネイティブ分析に切り替え
現在のマシンで利用可能なCLIツール
jadx1.5.5apktool3.0.2frida-ps17.9.6adbjava
スクリプトを優先する場面
以下の作業フローは高頻度でパラメータを間違えやすいため、本スキル付属のスクリプトを優先して使用します:
jadx + apktoolを一度に実行してサマリーを生成:scripts/decode.ps1- Fridaデバイス確認、プロセス一覧、spawn/attach注入:
scripts/frida-run.ps1 - APKの再構築、アラインメント、署名、インストール:
scripts/rebuild-sign-install.ps1 - Manifestの主要コンポーネントとパーミッションの高速抽出:
scripts/manifest-summary.ps1
以下のコマンドは直接呼び出し、個別のスクリプトは作成しません:
adb devicesadb logcatfrida-ps -Ujadx --versionapktool --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-reverseradare2
ツールの役割分担
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の大まかな構成を把握し、すぐにパッケージ変更やフックを行わない。
推奨アクション:
jadx -d jadx_out app.apkでJavaコードをエクスポートapktool d app.apk -o apktool_outでsmaliとリソースをエクスポート- 以下を確認:
AndroidManifest.xml- メイン
package application、activity、service、receiverlib/ディレクトリ内の.soの有無
- 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
- 透明/隠しアイコン(AU):
2. Javaロジック観察
優先的に jadx_out から読み取り:
MainActivityApplication- ログイン、ネットワーク、暗号化、リスク制御関連クラス
- サードパーティSDK初期化クラス
一般的なキーワード:
loginsignencryptciphertokenrootcertificatetrustokhttpretrofitwebview
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-tools | Pythonがインストールされている必要あり |
| adb | ✓ | winget / fallback path | 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 で要求されているチェックリスト項目を完了し、記録しましたか?
- 隠しアイコン/端末ワイプ/永続化の手がかりに該当する場合:U–AVクックブックに従って E-android-* Evidence を記録しましたか?(認可範囲内で)