Android-Pentesting-Skill について
Android-Pentesting-Skillは、Android APKの監査とリバースエンジニアリング向けのセキュリティスキルです。段階的な静的解析を行い、必要に応じて動的検証を加えます。アプリ固有のコードに範囲を絞り、検証状況と具体的なPoCを含む指摘を作成します。
主な機能
- 01モードを選んでAPKを監査
- 02コンポーネントやディープリンクの攻撃面を把握
- 03データフローを追跡して脆弱性を選別
- 04Semgrepと専用の静的検査に対応
- 05具体的なPoC付きの指摘を作成
活用シーン
- 01APKや逆コンパイル済みコードを監査
- 02エクスポートコンポーネントとディープリンクを検査
- 03モバイルアプリの脆弱性やマルウェアを分析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dragonjar/ android-pentesting-skill --skill android-pentesting-skillインストール後、Claude Code で/android-pentesting-skillを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitattributes.gitignoreCONTRIBUTING.mdLICENSEREADME.es.mdREADME.mdassets/frida-scripts/README.mdandroid-constructors-hook.jsandroid-anti-frida-countermeasures.jsandroid-argument-manipulation.jsandroid-early-instrumentation.jsdexdump.jsandroid-native-wrapper.jsbiometric-bypass.jsanti-frida-bypass.jscomprehensive-tracer.jsandroid-file-access-monitor.jscrypto-intercept.jsflag-secure-bypass.jsflutter-channel-hook.jsintent-logger.jsjni-tracer.jsmediaprojection-bypass.jsipc-abuse-helper.jsmethod-tracer.jsnative-heap-tracer.jsmem-layout-viewer.jskeystore-inspector.jsjwt-token-monitor.jsnative-hook.js詳細
Android APK セキュリティ監査
概要
決定論的な6段階の静的解析と、任意で動的確認を行うワークフローです。早い段階でノイズを取り除き、パッケージの対象範囲を絞ってください。ソース、伝播経路、シンクを把握できている場合、または動的確認が必要であることを明示している場合にのみ、脆弱性を報告してください。
使用する場面
- ユーザーからセキュリティレビュー用の APK ファイルが提供された場合
- ユーザーから逆コンパイル済み Android ソースコードの解析を依頼された場合
- テスト用に APK を変更または再パッケージ化する必要がある場合
- モバイルセキュリティテストや脆弱性評価を行いたい場合
- エクスポートされたコンポーネント、ディープリンク、インテントインジェクションのテスト支援が必要な場合
- Android リバースエンジニアリングやマルウェア解析について言及された場合
重要なルール
- トレースしたコンテキストを伴わない grep のヒットだけを報告してはいけません
- 検索対象は必ずアプリの名前空間に限定してください(ライブラリ由来のノイズを避けてください)
- デコードに失敗した場合は、直ちに停止して報告してください
- 指摘事項では必ず命令形を使用してください
- 検証を省略してはいけません。不確かな場合は「動的確認が必要」と明記してください
- 具体的な PoC(adb コマンド、Frida フック、または悪意のあるインテント)を必ず提示してください
- 同じ根本原因について指摘事項を重複させてはいけません
品質に関する注意:時間をかけて徹底的に分析してください。速度よりも品質が重要です。検証手順を省略しないでください。偽陽性は見落としよりも深刻です。
実行モデル
使用するツール:コアワークフローでは bash、write、edit、read、glob、grep を使用します。
ツールチェーンの要件
開始前に、次のツールがインストールされていることを確認してください。
- APKTool 3.0.2+(
apktool --version)— aapt2 のみのモード。Java 17+ が必要です - JADX 1.5.5+(
jadx --version) - Android SDK Platform Tools 36.0.2(
adb、fastboot) - Android SDK Build Tools 36.0.0(
apksigner、zipalign、aapt2、d8) - Frida 17.x(
frida --version)— デバイス上の Frida-server は frida core(fridaPython パッケージ)のバージョンと一致している必要があります。frida-tools ではありません - Objection 1.12.5+(
objection --version) - APKiD 3.1.0+(
apkid --version)
scripts/06-setup/preflight-check.sh(bash)、scripts/06-setup/preflight-check.py(汎用、JSON 出力)、または scripts/06-setup/preflight-check.ps1(PowerShell)を実行して、すべてのツールを確認してください。インストール手順については references/environment-setup.md を参照してください。
AI を活用した解析
このスキルには、AI を活用した解析機能が含まれています。このスキルを実行する AI モデルにはコード解析機能が組み込まれているため、指摘事項の精度向上に向けて戦略的に活用してください。
AI を使用する場面
- 逆コンパイル済みコードのセマンティックな脆弱性を解析する場合
- 複雑なデータフロー(ソースからシンクまで)をトレースする場合
- 概念実証エクスプロイトを生成する場合
- 自動スキャンによる偽陽性を絞り込む場合
- 難読化されたコードの動作を理解する場合
- レポートの品質とコンテキストを向上させる場合
AI の使用方法
- 特定のコード領域を解析する:すべての脆弱性を見つけるよう AI に依頼するのではなく、疑わしいコードに対象を絞ってください
- コンテキストを提示する:スニペットだけでなく、関数またはクラス全体を含めてください
- CVSS スコアを依頼する:CVSS 4.0 による重大度評価を求めてください
- 指摘事項を検証する:AI による指摘事項は、必ずコードと Frida テストで検証してください
AI 解析用プロンプト
完全な手法とプロンプトのテンプレートについては references/ai-pentesting-guide.md を参照してください。
簡単な例:
ANALYZE: Is this SQL injection exploitable?
Code: <vulnerable_query_with_user_input>
Context: <userId from Intent extra>
For each finding provide:
- CWE ID and CVSS 4.0 score
- Exploitation scenario
- Frida script to demonstrate (if applicable)
参考:
references/ai-pentesting-guide.md— AI 解析手法の全容
一覧:
references/project-manifest.mdは、パッケージ化されたすべてのファイルとディレクトリを網羅した正確な一覧です。
監査モードの選択
ユーザーのリクエストを満たす最小のモードを選択してください。すべての機能フラグとプリセットについては、references/audit-modes.mdを参照してください。
| モード | デフォルトの用途 | 備考 |
|---|---|---|
quick | 初回のトリアージ | デコード、マニフェスト、対象を絞った静的チェック、カバレッジの記述。 |
static | デバイス/エミュレーターなし | 静的解析のみ。実行時にしか確認できない問題にはNeeds Dynamic Confirmationと記載します。 |
full | 標準的なAPK監査 | 静的解析+動的解析+MASVS+任意のエグゼクティブリスクスコア。 |
protected-app | パッキング/RASPによって解析が妨げられる場合 | 保護アプリ向けのフォールバックに従い、カバレッジの不足を記録します。 |
osint | 公開情報による露出の補足 | 対象範囲内の受動的なOSINTのみ。 |
reporting-only | 既存の検出結果JSON | 重複排除、トリアージ、MASVS、リスクスコア、レポート。 |
任意の入力アダプター — Gmail APK の取り込み
scripts/00-ingestion/fetch-apk-gmail.pyは、監査ワークフローの開始前に、Gmailの添付APKを作業ディレクトリへダウンロードします。これは任意の入力アダプターであり、監査フェーズではありません。Phase -1から5には一切変更を加えず、ファイルとingestion-manifest.json(ファイルごとの送信者、メッセージID、添付ファイルID、sha256)のみを生成します。
# List matches without downloading
python3 scripts/00-ingestion/fetch-apk-gmail.py --output-dir ./ingested/ --dry-run
# Download (requires OAuth credentials outside the repo)
python3 scripts/00-ingestion/fetch-apk-gmail.py --output-dir ./ingested/ --sender [email protected] --max 5
安全性モデル:Gmailの読み取り専用OAuthスコープ、送信者の許可リスト、APKのマジックバイト検証と無効ファイルの隔離、sha256による冪等性、自動インストールなし。認証情報のパスはGMAIL_INGEST_CREDENTIALS/GMAIL_INGEST_TOKEN環境変数で指定し、Gitの追跡対象から除外されます。scripts/00-ingestion/README.mdを参照してください。
Phase 0 — デコードとフレームワークの検出
APKのデコード
apktool d app.apk -o decoded/ # Decode resources + smali
jadx -d jadx_output app.apk # Decompile to Java
apkid app.apk # Detect framework/packer
フレームワークの検出
解析を適切に調整できるよう、早い段階でアプリのアーキテクチャを特定します。
React Native:grep -r "com.facebook.react" decoded/AndroidManifest.xml · assets/内にlibhermes.soとindex.android.bundleがあるか確認します
Flutter:grep -r "io.flutter" decoded/AndroidManifest.xml · libflutter.soとassets/flutter_assets/があるか確認します
Cordova/Ionic:grep -r "org.apache.cordova" decoded/AndroidManifest.xml · assets/www/にcordova.jsがあるか確認します
Xamarin:grep -r "mono\|com.xamarin" decoded/AndroidManifest.xml · libmonodroid.soがあるか確認します
.NET MAUI:assemblies/*.dll(マネージドDLLバンドル)、assemblies/TrimmerRoots.xml、libxamarin-android/Mono.Android.dllのアーティファクトがあるか確認します · scripts/01-cross-platform/dotnet-maui-analysis.sh <apk> <out>を実行して、マネージドアセンブリの自動抽出、ilspycmdによる逆コンパイル、C#のセキュリティトリアージを行います
参照:検出スクリプト、Frida検出フック、フレームワーク固有のセキュリティ上の考慮事項については、
references/hybrid-webview-frameworks.mdを参照してください。
参照:.NET MAUI/Xamarinのマネージドアセンブリ(IL/DLL)の抽出、C#固有のセキュリティチェックリスト、monoランタイム向けFridaフックについては、
references/dotnet-maui-security.mdを参照してください。
クロスプラットフォーム解析スクリプト:Cordova/Ionic、Flutter、React Native、Unityアプリケーションのフレームワーク固有の静的解析には、
scripts/01-cross-platform/cordova-analysis.sh、scripts/01-cross-platform/flutter-analysis.sh、scripts/01-cross-platform/react-native-analysis.sh、scripts/01-cross-platform/unity-analysis.shをそれぞれ使用してください。これらのスクリプトはフレームワーク固有のメタデータを抽出し、ネイティブモジュールの使用状況を特定して、各フレームワーク固有のセキュリティ上の考慮事項を明らかにします。
難読化の検出
- ProGuard/R8:
a.b.c、a$a、a$1のようなクラス名 - DexGuard:追加の文字列暗号化とネイティブメソッド
- カスタム難読化:通常とは異なるパターン、命名規則の混在
参照:詳細な検出パターンについては、
references/static-analysis-patterns.mdを参照してください。
Phase 1 — 攻撃対象領域のマッピング
AndroidManifest.xmlの解析
cat decoded/AndroidManifest.xml
aapt2 dump badging app.apk
エクスポートされたコンポーネント
エクスポートされたコンポーネントは攻撃対象となります。
| コンポーネント | エクスポートされる条件 | セキュリティチェック |
|---|---|---|
| アクティビティ | android:exported="true" | インテントフィルター、権限要件 |
| サービス | android:exported="true" | インテントフィルター、権限要件 |
| レシーバー | android:exported="true" | インテントフィルター、権限要件 |
| プロバイダー | android:exported="true" | パス権限、読み取り/書き込み権限 |
ディープリンクスキーム
すべてのディープリンクスキームを抽出し、記録します。
<intent-filter>
<data android:scheme="scheme" android:host="host" />
</intent-filter>
セキュリティ関連の XML リソース
res/xml/ で、network_security_config.xml(TLS/クリアテキスト)、ファイルプロバイダーのパス、設定を確認します。
参考資料:マニフェストのチェック項目全50件以上については、
references/android-manifest-checklist.mdを参照してください。 IPC/インテントの悪用:references/intent-injection.mdとreferences/pendingintent-security.mdを参照してください。
フェーズ 2 — 対象を絞ったトリアージ
スコープを限定した Grep パターン
必ずアプリの名前空間内のみを grep してください。references/static-analysis-patterns.md のパターンを使用します。
| カテゴリ | パターン例 | 確認対象 |
|---|---|---|
| WebView のシンク | loadUrl\(, evaluateJavascript | 信頼できない URL の読み込み |
| IPC のソース | getIntent(), onNewIntent() | サニタイズされていないデータの入力 |
| インテントのリレー | getParcelableExtra, getSerializableExtra, startActivity\(, sendBroadcast\( | ネストされたインテント/混乱した代理人のパターン |
| ハードコードされたシークレット | password\s*=, api[_-]?key | コード内の認証情報 |
| エンコードされたリテラル | Base64\.decode, "\x[0-9a-f]" | 難読化された文字列 |
| 脆弱な暗号 | DES/, MD5, "AES/ECB" | 安全でないアルゴリズム |
| 安全でないストレージ | SharedPreferences, MODE_WORLD_READABLE | 保護されていないデータ → references/data-storage-auditing.md |
| ネットワーク/TLS | TrustManager, X509TrustManager | SSL 検証の回避 |
| ネイティブブリッジ | System\.loadLibrary, JNI メソッド | ネイティブコードのインターフェース |
リソースファイルの分析
シークレットがないか、res/values/strings.xml を確認します。
grep -iE "(key|token|secret|password|api)" decoded/res/values/strings.xml
参考資料:脆弱性の種類ごとに分類された100件以上の grep パターンについては、
references/static-analysis-patterns.mdを参照してください。
フェーズ 2.5 — 静的解析ルール(任意)
semgrep ベースの静的解析モジュールは、OWASP MASTG ルールで grep パターンを補完します。
# Enable semgrep in auto-audit-static.sh
bash scripts/auto-audit-static.sh app.apk --semgrep
# Run semgrep scan standalone
python3 scripts/03-static-analysis/semgrep-scan.py decoded/ --output findings-semgrep.json
# Merge findings with existing findings
python3 scripts/03-static-analysis/merge-findings.py --input findings.json semgrep.json --output merged.json
# Update rules from upstream
bash scripts/03-static-analysis/update-rules.sh --fetch
機能:
- 暗号、ネットワーク、ストレージ、認証を対象とする、MASTG に準拠した70件以上のルール
- ブロックしないフォールバック(semgrep が利用できない場合も処理を続行)
- マージ前に CWE とタイトルで重複を排除
- フェーズ 2.5 は grep パターンの実行後、データフローのトレース前に実行
参考資料:ルールのカテゴリと更新ワークフローについては、
scripts/03-static-analysis/semgrep-scan.py --helpを参照してください。
高度な静的検出器 — ZipSlip、XEE、アクセシビリティ、クリップボード
grep パターンおよび semgrep ルールでは補えないギャップを埋める、4種類の検出器です。
# Run against an already-decoded directory (from Phase 0)
bash scripts/03-static-analysis/advanced-static-checks.sh -d decoded/ -o adv-static/
# Or decode + check in one step
bash scripts/03-static-analysis/advanced-static-checks.sh -a app.apk -o adv-static/
検出対象:ZIP パストラバーサル(CWE-22/23)、XML 外部エンティティ(CWE-611)、エクスポートされたアクセシビリティサービス(CWE-926)、バックグラウンドでのクリップボード取得(CWE-200)。advanced-static-findings.json(source: grep)と人間が読めるレポートを出力します。
APK バージョン差分 — N-day ハンティング(任意)
対象 APK の2つのバージョン(例:セキュリティ修正の前後)がある場合は、差分を調べて修正箇所を特定し、根本にある脆弱性を再発見します。
# Full diff: inventory, decompiled sources, secrets rotation
bash scripts/03-static-analysis/version-diff-audit.sh --old app-v1.2.apk --new app-v1.3.apk
# Fast path without jadx decompilation
bash scripts/03-static-analysis/version-diff-audit.sh --old v1.apk --new v2.apk --skip-jadx
シグナル:新しいバージョンで削除されたシークレット(修正を確認 → N-day)、マニフェスト差分で新たに追加されたエクスポート済みコンポーネント、新しいネイティブライブラリ。version-diff-findings.json(source: diff)を出力します。シークレットの値は出力されず、パターン名、ファイル、ハッシュの接頭辞のみが出力されます。
参考資料:バグハンティングのワークフロー全体については、
references/app-version-diffing.mdを参照してください。
フェーズ 3 — データフローのトレース
ソースからシンクへの手法
信頼できないソースから危険なシンクまでのデータフローをマッピングします。
一般的なソース
| ソース | メソッド | 例 |
|---|---|---|
| IPC(アクティビティ) | getIntent() | 悪意のあるインテントデータ |
| IPC(サービス) | onStartCommand() | 起動時の追加データ |
| ディープリンク | getIntent().getData() | URL パラメーター |
| WebView | JavascriptInterface | 信頼できない JavaScript 呼び出し |
| ネットワーク | HttpResponse | API レスポンス |
| ストレージ | SharedPreferences | 保存されたユーザー入力 |
| 外部 | Environment.getExternalStorageDirectory() | ファイルシステムのデータ |
一般的なシンク
| シンク | メソッド | 影響 |
|---|---|---|
| コマンド実行 | Runtime.exec()、ProcessBuilder | RCE |
| WebView の読み込み | loadUrl()、loadData() | XSS、フィッシング |
| ファイル操作 | FileWriter、FileOutputStream | パストラバーサル、LFI |
| IPC ブロードキャスト | sendBroadcast() | インテントインジェクション |
| リフレクション | Class.forName()、getMethod() | コード実行 |
| ネイティブ呼び出し | JNI | ネイティブコード実行 |
| SQL | SQLiteDatabase.execSQL() | SQL インジェクション |
判定ルール
| ルール | 条件 | アクション |
|---|---|---|
| 1 | ソースからシンクへの直接的なフロー | 可能性が高いとして報告 |
| 2 | 静的解析による間接的なフロー | 経路が明確な場合は可能性が高いとして報告 |
| 3 | 動的呼び出し/リフレクティブな呼び出し | 動的な確認が必要としてマーク |
| 4 | ネイティブ境界 | 動的な確認が必要としてマーク |
| 5 | ライブラリコード | アプリが安全にラップしているか確認 |
| 6 | サニタイズなし | 重大度を引き上げる |
grep では見つからない手動チェック項目
| チェック項目 | grep で見つからない理由 | 確認方法 |
|---|---|---|
| 実行時権限 | requestPermissions() の呼び出し | onRequestPermissionsResult を追跡 |
| カスタム権限の保護 | checkPermission() | 権限チェックを探す |
| アクティビティの遷移とインテントの中継 | startActivity() では、ネストされたインテントの転送や付与フラグが隠れる | インテントの構築、Parcelable による中継、FLAG_GRANT_* の使用を追跡 |
| ファイルプロバイダーのパス | XML とコード | パスを公開されたコンテンツ URI に対応付ける |
| コンテンツプロバイダーのクエリ | query() | URI の構築を追跡 |
参考:最新の攻撃ベクトルについては、
references/attack-patterns.mdを参照してください。インテントインジェクション、ディープリンクの悪用、WebView のユニバーサル XSS、タスクハイジャック、ファイルプロバイダーのパストラバーサル、ブロードキャストの窃取、コンポーネントのハイジャックを扱っています。
フェーズ 4 — 動的解析(任意)
難読化、リフレクション、ネイティブコード、実行時保護などにより静的解析が行き詰まった場合に使用します。
実行時防御分析(RDA)
実行時防御分析モジュールは、Frida を使用して解析対策メカニズムを検出し、回避します。
# Run static audit first; RDA is a separate Phase 4 module
bash scripts/auto-audit-static.sh app.apk --semgrep
# Or via frida-exploit-helper.py
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --runtime-defense
# List available detectors
bash scripts/02-rasp/runtime-defense-analyzer.sh --list
# Run with active bypass mode (attempt to bypass detections)
bash scripts/02-rasp/runtime-defense-analyzer.sh app.apk com.target.app --active-mode --authorized-lab
利用可能な検出器カタログ(18 項目:実行可能な検出器 14 個と、該当しないバックエンド/クラウド項目 4 個):
rootbeer— RootBeer ライブラリの検出safetynet— SafetyNet のアテステーションemulator— エミュレーターの検出debug— デバッガーの検出frida-detect— Frida の検出screenshot— スクリーンショット防止機能の検出screenrecorded— 画面録画の検出talsec、approov、dexguard、appdome、doverunner、digitalai— 商用 RASP/シールド機能の検出contrast、imperva、dynatrace、accuknox— Android APK の直接検出には該当しないものとしてカタログに登録
出力:検出器の結果を含む findings-rda.json
参考:検出器の詳細なドキュメントについては、
scripts/02-rasp/README.mdを参照してください。
Drozer IPC プロービング
Drozer を使用したバインダーレベルの対話(プロバイダー、アクティビティ、サービス、レシーバー)により、静的なコンポーネントマッピングを補完します。
# Safe enumeration only (default)
bash scripts/07-tools/drozer-automated.sh -p com.target.app
# Print exact commands without running them
bash scripts/07-tools/drozer-automated.sh -p com.target.app --print-commands
# Exploitation probes (SQLi strings, path traversal) — authorized lab only
bash scripts/07-tools/drozer-automated.sh -p com.target.app --authorized-lab
出力:drozer-findings.json(source: drozer)と、ステージごとの生の証拠を含む drozer-report.md
参考:コンポーネントごとのプレイブックについては、
references/drozer-ipc-playbook.mdを参照してください。
Firebase の露出チェック(認可されたアセットのみ)
APK から抽出した Firebase URL/API キーを自動検証します(読み取りのみの簡易チェックで、書き込みは行いません)。
# From APK sources/resources
bash scripts/07-tools/firebase-check.sh -a app.apk -o firebase/
# Direct URL or offline key extraction
bash scripts/07-tools/firebase-check.sh -u "https://proj.firebaseio.com" -o firebase/
bash scripts/07-tools/firebase-check.sh -a app.apk --offline
判定:/.json?shallow=true への HTTP 200 は DB が公開状態であることを示します(重大)。401/403 は保護済みです。--offline はキー一覧に関する情報提供のみを目的とした検出結果を出力します。
参考:
references/firebase-security.md→ 自動検証セクション。
ADB バックアップの抽出
allowBackup が有効な場合、USB/PC へのアクセス権を持つ攻撃者が何を抽出できるかをテストします。
# Interactive: triggers adb backup on the connected device
bash scripts/07-tools/adb-backup-extract.sh -a com.target.app
# Parse an existing .ab file (24-byte header, zlib)
bash scripts/07-tools/adb-backup-extract.sh --from-file backup.ab -o backup-audit/
出力:backup-findings.json(source: adb)とバックアップの機密性に関する判定。暗号化されたバックアップは、仕様上サポート対象外のため、終了コード 3 で終了します。
参考資料:.ab 形式、MDM/仕事用プロファイルの攻撃対象領域、エンタープライズ向けチェックリストについては、
references/adb-backup-enterprise.mdを参照してください。
高度な動的解析手法
gRPC の傍受、SMS/OTP 傍受テスト、root 不要の Play Integrity バイパス手法(LSPatch、Zygisk+PIF)、エミュレーターと実機の選択マトリクス、リポジトリのトレーサースクリプトを使用したグレーボックステストの網羅性:
参考:
references/advanced-dynamic-techniques.md。
認可された RASP バイパスの検証
RDA の検出後は、検出器ごとに Frida ロジックを重複させるのではなく、DRY バイパスランナーを使用してください。
# List reusable bypass profiles
bash scripts/02-rasp/rasp-bypass-runner.sh --list-profiles
# Build a reviewed command from detector names
bash scripts/02-rasp/rasp-bypass-runner.sh \
--package com.target.app \
--detectors rootbeer,frida_detect,talsec \
--print-command
# Execute only in an authorized lab
bash scripts/02-rasp/rasp-bypass-runner.sh \
--package com.target.app \
--from-rda findings-rda.json \
--run --authorized-lab
信頼できる唯一の情報源は scripts/02-rasp/bypass-profiles.json です。このランナーは assets/frida-scripts/ 以下のスクリプトを再利用します。検出器ファイルにバイパスロジックをコピーしないでください。網羅範囲、制限事項、レポート要件については、references/rasp-bypass-workflow.md を参照してください。
Frida の統合
# Spawn app with hook
frida -U -f com.example.app -l script.js
# Attach to running process
frida -U com.example.app -l script.js
frida-exploit-helper.py の使用方法
frida-exploit-helper.py スクリプトは、スクリプトを同梱し、よく使われるパターンを備えた Frida 操作用の便利なラッパーです。
使用する場面:以下の場合は、Frida CLI を直接使う代わりに frida-exploit-helper.py を使用してください。
- 同梱された Frida スクリプト(SSL ピンニングのバイパス、ルート検出のバイパスなど)
- メモリの簡易操作(読み取り、書き込み、ベースアドレスの検索)
- 使用可能なスクリプトの確認
- Frida ワークフローの簡略化
同梱スクリプトを使った例:
# SSL pinning bypass
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --script ssl-pinning-bypass
# Root detection bypass
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --script root-detection-bypass
# List all available bundled scripts
python3 scripts/07-tools/frida-exploit-helper.py --list-scripts
# Display app memory layout (find base addresses)
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --layout
# Hook specific functions (malloc, free, etc.)
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --hook malloc,free
# Read memory at address
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --read 0x12345678 64
# Write to memory address
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --write 0x12345678 deadbeef
主なフラグ:
-p, --package— 対象のパッケージ名(ほとんどの操作で必須)--script— 同梱スクリプト名(選択肢を確認するには--list-scriptsを使用)または .js ファイルへのパス--spawn/-s— 対象パッケージの新しいプロセスを起動--attach/-a— 実行中のプロセスにアタッチ--list-scripts— 使用可能な Frida 同梱スクリプトをすべて表示--layout— メモリレイアウトとベースアドレスを表示--hook— フック対象の関数をカンマ区切りで指定--read ADDRESS SIZE— アドレス(16進数)とサイズ(バイト単位)を指定してメモリを読み取り--write ADDRESS DATA— アドレス(16進数)を指定してデータを書き込みます。データは16進数または文字列で指定できます--base <library>— 指定したモジュールのベースアドレスを取得(ライブラリ名が必要)
参考:すべてのオプションと同梱スクリプトの一覧については、
scripts/07-tools/frida-exploit-helper.py --helpを参照してください。
参考:同梱 Frida スクリプトは
assets/frida-scripts/にあります。正式な一覧については、references/frida-scripts-index.mdを参照してください。 実行時の重点トリアージ:ファイルシステム/ストレージの可視性にはassets/frida-scripts/android-file-access-monitor.js、JNI/ネイティブ境界の検出にはassets/frida-scripts/jni-tracer.js、パッシブな IPC ログ記録と意図的なプロバイダー/ディープリンクの検証にはassets/frida-scripts/ipc-abuse-helper.jsを使用してください。
スクリプトの成熟度レベル:
- STABLE(既知の適用範囲あり):文書化された適用範囲内で本番利用可能です。
ssl-pinning-bypass.jsは主要な Java TLS/TrustManager の経路をカバーします(正確な一覧はヘッダーを参照してください。OkHttp/WebView を普遍的に網羅するものではありません)。root-detection-bypass.js、biometric-bypass.js、network-interceptor.jsなどは幅広くカバーしますが、すべてを網羅するわけではありません。- BETA:動作しますが不完全です。注意して使用してください
JNI トレース(ネイティブライブラリのトレース)
高度な JNI およびネイティブライブラリの分析には、jnitrace を使用します。
# Install jnitrace
pip install jnitrace
# Trace all JNI functions in a native library (spawn mode)
jnitrace -l libnative-lib.so -m spawn com.target.app
# Trace with attach mode (attach to already-running app)
jnitrace -l libnative-lib.so -m attach com.target.app
# Trace only JNI methods matching a regex (include filter)
jnitrace -l libnative-lib.so -m spawn com.target.app \
-i ".*decrypt.*|.*sign.*"
# Exclude noisy JNI methods
jnitrace -l libnative-lib.so -m spawn com.target.app \
-e "GetStringUTFChars|ReleaseStringUTFChars"
# Hide JNIEnv/JavaVM struct calls to reduce noise
jnitrace -l libnative-lib.so -m spawn com.target.app \
--ignore-env --ignore-vm
# Output trace to JSON file for later analysis
jnitrace -l libnative-lib.so -m spawn com.target.app \
-o trace-output.json
プログラムからの使用方法(npm パッケージ経由):
npm install jnitrace-engine
次の場合は jnitrace を使用します。
- カスタム JNI バインディングの分析
- ネイティブライブラリの動作の把握
- ネイティブクラッシュのデバッグ
- ネイティブコードでの暗号処理のトレース
注:
jnitraceを使用するには、Frida の spawn モードでアプリを起動する必要があります。詳細については、references/native-analysis.mdおよび代替の Frida ベースの方法であるjni-tracer.jsを参照してください。
Objection コマンド
# Modern syntax (preferred): objection -n <package> start
objection -n com.example.app start
# Legacy syntax (deprecated but still works): objection -g <package> explore
objection -g com.example.app explore
# Enumerate components
android hooking list activities
android hooking list services
android hooking list receivers
# Bypass protections
android sslpinning disable
# Enumerate Android Keystore entries
android keystore list
ADB ランタイムテスト
# Test exported activity
adb shell am start -n com.example.app/.MainActivity -a android.intent.action.VIEW -d "scheme://host"
# Test exported receiver
adb shell am broadcast -a com.example.app.ACTION -e key "value"
# Monitor logs
adb logcat | grep com.example.app
SSL ピンニングのバイパス:
references/dynamic-analysis-setup.md+assets/frida-scripts/ssl-pinning-bypass.jsSplit APK / AAB のランタイム処理:pm path、adb install-multiple、bundletoolのワークフローについては、references/dynamic-analysis-setup.md#9-split-apk--aab-runtime-handlingを参照してください。 RASP のバイパス:アンチデバッグ、アンチ Frida、エミュレーター検出、ネイティブのルート検査のエスカレーションについては、references/rasp-bypass.md+assets/frida-scripts/native-root-detection-probe.jsを参照してください。 保護されたアプリのフォールバック:ランタイム抽出、spawn モードでの計装、組み込み計装へのフォールバック、静的解析のみのカバレッジ処理については、references/packer-modern-unpacking.md#protected-app-fallback-decision-treeを参照してください。 サンドボックス監査:scripts/07-tools/inspect-app-sandbox.sh <pkg> <out>は、root 化されたデバイス/エミュレーターから tar-over-adb 経由で/data/data/<pkg>を取得し、平文の認証情報、全ユーザーが読み取り可能なファイル、暗号化されていないデータベースを監査します(検出結果のsource=sandbox)。 Logcat 漏えいモニター:python3 scripts/07-tools/live-logcat-analyzer.py --package <pkg> --output findings.json [--duration 120]は logcat をストリーミングし、トークン/PII/スタックトレースを編集して検出し、source=logcatの検出結果を出力します。
フェーズ 5 — 分類とレポート
コンプライアンススコア(任意)
CVSS の検出結果とともに、MASVS v2 コンプライアンススコアを生成します。
# Generate MASVS compliance score
python3 scripts/05-scoring/calculate-score.py findings.json --json-output > score.json
# Generate full report with MASVS score
python3 scripts/07-tools/generate-report.py --input findings.json --masvs --output report.html
# Use custom MASVS mapping
python3 scripts/07-tools/generate-report.py --input findings.json --masvs --masvs-mapping scripts/05-scoring/masvs-mapping.json --output report.html
スコアリング方法:
- MASVS v2 の 23 項目の管理策を評価
- 重要度に基づいて加重減点(Critical×10、High×5、Medium×2、Low×1)
- 最終スコア:0~100 点。レターグレード(A/B/C/D/F)付き
グレードの基準:
- A:90~100(優秀)
- B:80~89(良好)
- C:70~79(許容可能)
- D:60~69(不良)
- F:0~59(重大)
参考資料:管理策の定義、マッピングの意味、未テスト項目の処理については、
scripts/05-scoring/README.mdおよびreferences/masvs-scoring-model.mdを参照してください。
エグゼクティブリスクスコア(任意)
エグゼクティブレポートを作成する際は、重複排除と信頼度のトリアージを行った後に限り、集約リスクスコアを含めてください。これを CVSS および MASVS と明確に区別するため、references/risk-score-model.md を使用してください。
- CVSS = 個々の脆弱性の深刻度
- MASVS = 管理策の適用範囲/コンプライアンス状況
- エグゼクティブリスクスコア = 運用上の総合的なリスクとカバレッジの不足
誤検知として棄却された項目はスコアから減点しないでください。未解決の保護コード、欠落した分割ファイル、または省略された動的検証は、確認済みの脆弱性ではなく、カバレッジの不足として扱ってください。
OSINT による情報拡充(任意)
エンゲージメントの範囲でパッシブな偵察が許可されている場合は、references/osint-apk-recon.md を使用してフェーズ 5 の情報を拡充してください。
- パッケージ名、アプリラベル、ファーストパーティのドメイン、エンドポイント、編集済みのシークレットのフィンガープリントを相関付けます。
- アクティブなプロービングが明示的に許可されていない限り、パッシブな公開情報源のみを検索します。
- 報告前に、ドメインをファーストパーティ、ファーストパーティである可能性が高いもの、サードパーティ SDK、または不明に分類します。
- OSINT の証拠は、対象範囲内のアプリの検出事項または公開情報の露出に関する主張を裏付ける場合に限り、報告に含めます。
信頼度レベル
| レベル | 定義 | 根拠の例 |
|---|---|---|
| 確認済み | ソースからシンクまでのトレース全体を検証済み | サニタイズなしで、IPC ソースから Runtime.exec() までの直接的な呼び出しチェーンを確認 |
| 可能性が高い | 強い根拠があるが、わずかな不足点がある | 静的トレースは明確だが、リフレクションにより最終シンクが不明瞭 |
| 動的検証が必要 | 静的解析では結論が出ない | 難読化されたコード、または実行時の検証が必要なネイティブ境界 |
重大度
CVSS 4.0 を使用します。完全な方法論と重大度の対応付けについては、references/cvss-scoring-guide.md を参照してください。
検出事項テンプレート
## [ID] - [Title]
**Confidence**: [Confirmed/Likely/Needs Dynamic Confirmation]
**Severity**: [Critical/High/Medium/Low] (CVSS: [X.X])
**CWE**: [CWE-ID]
**OWASP**: [OWASP Category]
### Description
[1-2 sentences explaining what the vulnerability is]
### Affected Components
- **File**: `path/to/file.java`
- **Method**: `methodName()`
- **Component**: `[Activity/Service/Receiver/Provider]` (if applicable)
### Attack Scenario
1. Attacker [action, e.g., sends malicious intent with crafted data]
2. App [processing step, e.g., extracts parameter without validation]
3. Data propagates through [call chain]
4. Reaches sink [dangerous operation]
5. Results in [impact, e.g., arbitrary command execution]
### Proof of Concept
```bash
adb shell am start -n com.example.app/.MainActivity \
-a android.intent.action.VIEW \
-d 'exploit://host/path?payload=cmd%7Ccat%20/data/data/com.example.app/databases/db'
または、動的検証用の Frida フックスクリプトを指定してください。
影響
- 機密性:[高/中/低/なし] — [説明]
- 完全性:[高/中/低/なし] — [説明]
- 可用性:[高/中/低/なし] — [説明]
修正方法
// Provide secure code example
Intent intent = getIntent();
if (intent != null && intent.getData() != null) {
String input = intent.getData().getQueryParameter("path");
if (isValidPath(input)) {
loadUrl(input);
} else {
Log.w(TAG, "Invalid path detected");
}
}
private boolean isValidPath(String path) {
return path != null && !path.contains("..") &&
path.matches("^/safe/\\w+\\.html$");
}
CVSS 4.0 の計算
[ベクター文字列とスコアの内訳を表示]
### Coverage Statement
End your report with:
カバレッジ分析:
- 静的解析:完了(逆コンパイルされたすべてのソースを分析済み)
- 動的解析:[完了/一部完了/未実施](一部完了の場合は理由)
- 範囲:[com.example.app.* 名前空間のみ]
- フレームワーク:[React Native/Flutter/ネイティブ/標準]
- 難読化:[ProGuard/R8/DexGuard/カスタム/なし]
制限事項:
- [制限事項を列挙します。例:「ネイティブコードの分析には追加ツールが必要」]
- [分析できなかったコンポーネント]
- [追加の検証が必要な検出事項]
検出事項の合計:X 件(重大:Y 件、高:Z 件、中:A 件、低:B 件)
> **Reference**: `references/reporting-templates.md` for executive summary format, remediation priority matrix, and presentation templates.
### Automated Report Generation
Use the `generate-report.py` script to generate professional HTML or Markdown reports from findings JSON:
```bash
# Generate HTML report
python3 scripts/07-tools/generate-report.py \
--input findings.json \
--output report.html \
--app-name "My App" \
--package-name "com.example.app"
# Generate Markdown report
python3 scripts/07-tools/generate-report.py \
--input findings.json \
--output report.md \
--app-name "My App" \
--package-name "com.example.app"
このスクリプトは、JSON 配列形式と JSONL(1 行につき 1 件の検出事項)の両方に対応しており、以下を自動的に実行します:
- 検出事項を重大度順(重大を最初)に並べ替えます
- CVSS 4.0 の重大度スコアを計算します
- リスク評価を含むエグゼクティブサマリーを生成します
- OWASP MASTG カテゴリに対応付けます
- 整形済みの概念実証と修正方法のセクションを提供します
想定される JSON 構造については、scripts/test-findings.json を参照してください。規範となる契約は references/schemas/finding.schema.json です。すべての出力スクリプトは、このスキーマに照らして検出事項を検証します。
APK の変更ワークフロー
1. デコード
apktool d app.apk -o app-modified/
2. 変更 — Smali のパッチ適用
app-modified/smali/ 内の Smali ファイルを編集します:
.method public checkSecurity()Z
.locals 1
# Original: iget-boolean v0, p0, Lcom/example/App;->securityEnabled:Z
# Patched — always return true
const/4 v0, 0x1
return v0
.end method
リソースの変更
app-modified/res/ 内の XML ファイルまたはリソースファイルを編集します:
<bool name="debug_mode">true</bool>
3. 再ビルド
apktool b app-modified/ -o app-modified.apk
4. 署名
# Generate keystore (first time only)
keytool -genkeypair -v -keystore my-release-key.jks -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000
# Align first
zipalign -v 4 app-modified.apk app-aligned.apk
# Sign (apksigner supports v1, v2, v3, v3.1 signatures)
# Verify keystore exists before signing
if [ ! -f "my-release-key.jks" ]; then
echo "Error: Keystore not found. Create it with keytool first."
exit 1
fi
# --ks-key-alias is required when the keystore contains multiple keys; recommended in all cases
apksigner sign \
--ks my-release-key.jks \
--ks-key-alias androiddebugkey \
--ks-pass pass:myPassword \
--key-pass pass:myPassword \
--out app-signed.apk \
app-aligned.apk
# Verify signature
apksigner verify --verbose app-signed.apk
5. インストールと検証
adb install -r app-signed.apk
参考資料:高度な再パッケージ化、署名検証のバイパス、ADB デバッグについては、
references/dynamic-analysis-setup.mdを参照してください。Smali 編集の例外ケースとトラブルシューティングについては、references/apk-modification-guide.mdを参照してください。
トラブルシューティング
APK のデコードに失敗する
apktool d -f app.apk -o decoded/ # Force mode (re-decodes even if output dir exists)
aapt2 dump badging app.apk # Verify APK integrity
apkid app.apk # Detect packer/protector
注:Apktool 3.0+ では、
-api/--api-levelフラグが削除されています。API レベルは APK から自動検出されるようになりました。 パックされている場合 → 展開方法については、references/packing-unpacking.mdを参照してください。
JADX で不正なコードが表示される
jadx --show-bad-code -v app.apk # Show code even with errors
jadx --decompilation-mode fallback app.apk
jadx-gui app.apk # GUI for manual inspection
Frida でアタッチできない
adb shell ps -A | grep frida
adb shell getprop ro.product.cpu.abi
adb shell "su -c 'killall frida-server'"
adb shell "su -c '/data/local/tmp/frida-server -D &'"
完全なセットアップ手順:
references/dynamic-analysis-setup.md
難読化されたコードが読めない
- 難読化ツールを特定します:
apkid app.apk - JADX の難読化解除を有効にします:
jadx --deobf app.apk references/static-analysis-patterns.md→「Obfuscation Patterns」を参照してください- 実行時の動作を確認するには、フェーズ 4 に進みます
動的解析にエスカレーションするタイミング
難読化が不明瞭な場合、リフレクション、JNI 境界、デバッグ/root 検出、SSL ピンニングがある場合、静的解析には限界があります。→ references/dynamic-analysis-setup.md を使用してフェーズ 4 に進んでください。
例
例 1:簡易評価
com.example.app.apk → デコード → フレームワークの検出 → マニフェストの監査 → シークレットの検索 → CVSS レポート
例 2:SSL ピンニングのバイパス
frida -U -f com.target.app -l ssl-pinning-bypass.js → 失敗した場合は references/rasp-bypass.md を参照してください
例 3:APK の再パッケージ化
デコード → 変更 → 再ビルド → 署名 → インストール(references/apk-modification-guide.md を参照)
エージェント運用契約
この契約では、すべての監査で作成する成果物、次に進むタイミング、停止するタイミング、および検出事項の報告方法を定めています。
必須監査成果物
APK の監査ごとに、以下の成果物を作成します。
| 成果物 | フェーズ | 説明 |
|---|---|---|
scope.json | -1 | パッケージ名、対象範囲、認可の確認 |
toolchain-report.json | 0 | ツールのバージョン、利用可否、事前チェックの結果 |
app-profile.json | 0 | フレームワーク、難読化、アーキテクチャ |
attack-surface.json | 1 | エクスポートされたコンポーネント、ディープリンク、権限 |
findings.json | 2-4 | 標準スキーマに準拠したすべての検出事項 |
evidence/ | 2-4 | スクリーンショット、ログ、PoC コマンド |
coverage-matrix.json | 5 | MASVS コントロールのカバレッジ状況 |
final-report.html | 5 | エグゼクティブサマリーと技術的な検出事項 |
停止条件 — 直ちに停止して報告すること
| 条件 | 対応 |
|---|---|
| APK のデコードに失敗した | エラーログとともに DECODE_FAILURE を報告 |
| パッケージ名を特定できない | SCOPE_UNCLEAR を報告して停止 |
| 対象の名前空間を分離できない | SCOPE_TOO_BROAD を報告 |
| 動的テストが要求されているが Frida またはデバイスがない | 検出事項に Needs Dynamic Confirmation と記載 |
| 暗号化またはパックされた APK により分析が妨げられる | カバレッジの一部に欠落があることを添えて PACKED_APK を報告 |
検出事項の状態
| 状態 | 使用する場合 | CVSS 必須 |
|---|---|---|
| Confirmed | ソースからシンクまでのトレースを完全に検証済み | はい |
| Likely | 強力な証拠はあるが、トレースに軽微な欠落がある | はい |
| Needs Dynamic Confirmation | 静的分析では確定できない(難読化、リフレクション、JNI) | TBD |
| Informational | ベストプラクティス違反、リスクは低い | 任意 |
| Rejected | 以前報告され、誤検出であることが確認済み | 該当なし |
APK タイプ別の対応
| タイプ | 分析方法 |
|---|---|
| Standard APK | 6 フェーズのワークフロー全体を実施 |
| Split APK / AAB | フェーズ 0 → ベースと動的機能を判別し、完全なスプリットセットを取得/インストールして、各スプリットを個別に分析します。dynamic-analysis-setup.md#9-split-apk--aab-runtime-handling を参照 |
| Packed/Protected | フェーズ 0 → 静的分析のベースラインを作成し、ランタイム抽出/spawn モード/埋め込み型インストルメンテーションを代替手段として試します。妨げられた場合は、カバレッジの欠落を添えて PACKED_APK を報告 |
| React Native | フェーズ 0 → Hermes バイトコードを抽出し、scripts/01-cross-platform/react-native-analysis.sh を使用 |
| Flutter | フェーズ 0 → Blutter 分析とネイティブ SSL フックを実施 |
| Xamarin | フェーズ 0 → Mono ランタイムを特定し、同梱されたアセンブリを分析 |
| Obfuscated | フェーズ 2 → grep を強化し、利用可能な場合はフェーズ 4 の動的分析を実施 |
エビデンス基準
すべての検出事項には、以下が必要です。
- ファイルと行への参照(動的分析の場合は Frida トレース)
- エビデンスの抜粋(関連するコード/データ)
- 攻撃シナリオ(攻撃者がどのように悪用するか)
- CVSS 4.0 ベクトル(Confirmed/Likely の場合)、または
TBD(Needs Dynamic の場合)
カバレッジの宣言
すべてのレポートの最後に、以下を記載します。
{
"coverage": {
"static_analysis": "complete | partial | not-performed",
"dynamic_analysis": "complete | partial | not-performed",
"framework": "react-native | flutter | cordova | xamarin | native",
"obfuscation": "proguard | dexguard | custom | none",
"native_code": "analyzed | not-analyzed | not-applicable",
"rasp": "detected | not-detected | not-tested"
},
"total_findings": { "critical": 0, "high": 0, "medium": 0, "low": 0 }
}
リファレンス一覧
| フェーズ | ファイル | フェーズ | ファイル |
|---|---|---|---|
| 0 | environment-setup, opencode-tooling, static-analysis-patterns, hybrid-webview-frameworks, kotlin-patterns, kotlin-async-security, kotlin-compose-security, kotlin-multiplatform-security, malware-analysis, tool-installation | 3 | attack-patterns, intent-injection, pendingintent-security, firebase-security, deep-link-exploitation, real-world-android-vulnerabilities |
| 1 | android-manifest-checklist, android-version-security, android-14-15-security-changes, android-15-security-guide, android-16-security-guide, androidx-security-migration, secure-storage-migration, data-storage-auditing | 4 | dynamic-analysis-setup, native-code-analysis, native-analysis, rasp-bypass, rasp-bypass-workflow, packing-unpacking, packer-modern-unpacking, react-native-hermes-analysis, frida-version-matching-guide, android-keystore2-testing, biometric-testing-comprehensive, frida-advanced-patterns, android-anti-frida-countermeasures |
| 2 | dependency-analysis, supply-chain-security | 5 | cvss-scoring-guide, cvss-calculator, reporting-templates, finding-template-cards, finding-quality-triage, masvs-scoring-model, risk-score-model, osint-apk-recon, audit-modes, frida-scripts-index, cheat-sheet-commands, cheat-sheet-frida-scripts |
| Mod | apk-modification-guide, modern-android-coverage | FW | react-native-security, react-native-new-arch, flutter-security, flutter-blutter-analysis, jetpack-compose-security-deep-dive, fuzzing-guide, passkey-fido2-security, mobsf-integration |
| CI | automation-scripts, ci-cd-integration | AI | ai-pentesting-guide, ai-prompts/java-security-analyzer, ai-prompts/native-binary-analyzer, ai-prompts/exploit-generator, ai-prompts/report-enhancer |
| プラットフォーム | scripts/04-android-15-16/android15-apis.js, scripts/04-android-15-16/passkey-test.js, scripts/04-android-15-16/privacy-sandbox-test.sh | カーネル | android-binder-cve-2023-20938 |
| 全般 | mastg-quick-reference, mastg-best-practices, mastg-privacy-testing, quick-commands, quick-start-guide, workflow-diagram, cross-platform-testing-setup, play-integrity-api-testing, burp-mobsf-integration-guide |
スクリプト:
scripts/01-cross-platform/— フレームワーク固有の解析(Cordova、Flutter、React Native、Unity)scripts/02-rasp/— ランタイム防御解析(RDA)scripts/03-static-analysis/— semgrep スキャン+merge-findingsscripts/04-android-15-16/— Android 15/16 固有の APIscripts/05-scoring/— MASVS v2 準拠スコアリングscripts/06-setup/— preflight-check+検証。変更後はスキル自体を検証してください:bash scripts/06-setup/validate-frida-scripts.sh(すべてのassets/frida-scripts/*.js+RASP 検出器)およびbash scripts/06-setup/validate-shell-scripts.sh(すべての*.sh)。scripts/07-tools/— コアツール(frida-exploit-helper、generate-report、correlate-findings、mobsf-api-scan、burp-findings-export、rop-helper)auto-audit-static.sh— メインオーケストレーターaudit-android-components.sh— コンポーネント監査 エクスプロイト:exploitation-guide、heap-exploitation、exploitation-decisions、android-binder-cve-2023-20938RASP バイパス:scripts/02-rasp/rasp-bypass-runner.shはscripts/02-rasp/bypass-profiles.jsonを使用して、再利用可能な Frida バイパススタックを構成します。references/rasp-bypass-workflow.mdを参照してください。 アセット:assets/frida-scripts/内の Frida スクリプト(references/frida-scripts-index.mdを参照);全ファイルの一覧はreferences/project-manifest.mdにあります。
読み込み方針:対象となる技術的課題に遭遇した場合にのみ、該当するリファレンスファイルを読み込んでください。すべてのリファレンスを一度に読み込まないでください。
プラットフォーム固有の注意事項
Windows(PowerShell)、macOS、Linux の詳細なセットアップについては、
references/environment-setup.mdを参照してください。macOS では、grep -Pの代わりにrg(ripgrep)を使用してください。BSD grep は PCRE をサポートしていません。
既知の実装上の不足点(2026年4月の修正作業時点)
コードと主張の全体監査で、以下の不足点が特定され、一部対処されました。
- Semgrep 連携(フェーズ 2.5):以前は
--jsonフラグが渡されておらず、まったく機能していませんでした。現在はsemgrep-scan.pyで修正されています。 - エージェントのコンテキストでの事前チェック:対話型の安全性/スコープに関するプロンプトは、
--jsonまたは非 TTY 環境では停止したり失敗したりする可能性がありました。現在は、エージェント/CI による実行時には、明確な注記を表示して自動的にスキップされます。 - Frida のバイパス対応範囲に関する主張:複数の「STABLE」/「30+ implementations」という記述(特に
ssl-pinning-bypass.js)は、実際のコードに対して誇張されていました。スクリプトのヘッダーと主要ドキュメントに注記を加え、スクリプト自体も対応範囲を正確に示すようになりました。 - シェルのエラー処理:特に
audit-android-components.shには、包括的な&>/dev/nullと引用符で囲まれていないループが複数ありました。重要なデコード処理では、実際のログ取得とタイムアウトを備えたrun_loggedヘルパーを使用するようになりました。ほかの負荷の高いツール呼び出しには、引き続き対応が必要です。 - DRY/共有ライブラリ:
scripts/lib/(検出結果のスキーマ、正規化ツール、MASVS ヘルパー)は、インポートのハックが原因でほとんど使われていませんでした。一部の接続作業は始まっていますが、重複している 5~6 個のload_findings実装を完全に一元化する作業はまだ保留中です。 - コミット済みのアーティファクト:多数の
__pycache__/と*.pycファイルが存在していました。.gitignoreは拡張されています。
これらは、この変更の修正計画で追跡されています。新しい環境で監査全体を信頼する前に、必ず事前チェックとバリデーターを実行してください。
このスキルでは、印象的に聞こえる主張よりも、誠実で再現可能な結果を優先します。判断に迷う場合は、「動的な確認が必要」と明記し、対応範囲の不足点を明確に示してください。