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/native 動的 Hook
- APK 内に
.soが含まれる場合の native 解析への切り替え
現在のマシンで検証済みの 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 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 を行わないでください。
推奨アクション:
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. 動的 Hook
静的解析が不十分な場合、Frida を使用:
- ログイン関数を Hook
OkHttp/Retrofit/WebViewのキーポイントを Hookjavax.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 + wrapper | jar を自動ダウンロードし、bat を生成して %USERPROFILE%\Tools\apktool\ に配置 |
| JEB Pro | ✗ | ユーザー手動インストール、有効なライセンスが必要 | オプションの Android / ARM クロス検証ツール;サードパーティ MCP bridge は個別監査が必要 |
| frida / frida-ps | ✓ | pip install frida-tools | Python がインストールされている必要がある |
| 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 を記録したか(認可範囲内)?