Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
apk-interceptor — 倫理的ハッキング向けのAndroidディープリンク、Intent、WebViewブリッジ評価支援ツール | Kitploit
ツール/GitHubGitHub/sterrasec/apk-interceptor
Androidセキュリティ脆弱性分析モバイルアプリペンテストウェブアプリケーション悪用情報収集ペネトレーションテスト
GitHubsterrasec/apk-interceptor

apk-interceptor

倫理的ハッキング向けのAndroidディープリンク、Intent、WebViewブリッジ評価支援ツール

リポジトリを見る
911ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

apk-interceptor

Build Check

Android deeplink、Intent、WebViewブリッジの評価支援ツール

apk-interceptorは、許可されたアプリケーションセキュリティ評価のためのポータブルなAndroidテストAPKです。セキュリティエンジニアが、AndroidアプリがカスタムURIスキーム、ディープリンク、エクスポートされたActivity、WebView JavaScriptブリッジなどの外部エントリポイントをどのように処理するかを検証するのに役立ちます。

このツールは意図的に制約されています:

  • android.permission.INTERNET を宣言しません
  • 外部サーバーにデータを送信しません
  • シェルコマンドを実行しません
  • root、Magisk、Frida、またはランタイムインストルメンテーションを必要としません
  • ローカルの content:// ペイロードファイルを1つだけ配信します
  • ビルド時に固定された1つのカスタムURIスキームを登録します

動機

Androidアプリケーションのセキュリティ評価中、静的解析による多くの発見事項は、確認される前にデバイス上での小さな概念実証(PoC)が必要です:カスタムURIスキームの登録、明示的インテントの送信、ローカル content:// ペイロードの配信、またはJavaScriptがWebViewブリッジに到達できるかどうかの確認などです。

ケースごとに新しい使い捨てテストアプリを構築するのは反復的でエラーが発生しやすい作業です。マニフェストエントリ、オーソリティ、URI許可、パッケージ名、またはインテント構築のわずかな違いが検証を遅らせ、結果の再現を難しくする可能性があります。

apk-interceptorは、その確認ステップを再現可能にするために作成されました。評価のたびに新しいPoC APKを書く代わりに、必要な許可されたスキームまたはアプリケーションIDでこのツールをビルドし、デバイス上でテストを実行し、設計上制約されたワークフローを維持します:INTERNET権限なし、外部データ送信なし、シェル実行なし、root依存なし。

テストできること

apk-interceptorは以下の評価タスクに役立ちます:

詳細な脆弱性ウォークスルー:

  • カスタムURIスキームの乗っ取り
  • ディープリンクのオープンリダイレクト
  • 信頼できないインテントデータを持つエクスポートされたActivity
  • content:// を介したWebView JavaScriptブリッジの露出

アプリは、送信したインテント、受信したディープリンク、ブリッジコールバック、JavaScriptの結果、およびエラーのインメモリ評価ログを保持します。アプリのプロセスが終了するとログは消えます。ログは永続化されないため、作業中にスクリーンショットや画面録画で証拠を記録してください。

他のツールとの比較

apk-interceptorは**確認(confirmation)**ツールであり、発見(discovery)や悪用(exploitation)のフレームワークではありません。静的解析からテスト対象(スキーム、Activityクラス、ブリッジ名)をすでに把握していることを前提とし、到達可能性を検証して証拠を記録するための安全なオンデバイス手段を提供します。評価デバイスにインストールし、クライアントと共有することも想定して構築されているため、INTERNET権限、シェル実行、データ外部送信、root要件は一切含まれていません。

一般的なAndroidツール群との位置づけは以下のとおりです:

apk-interceptorが代替ツールに対して最も明確な優位性を持つ2つの領域:

  • スキーム乗っ取りの証拠:実際にスキームを登録する2番目のアプリとして動作し、受信したすべてのパラメータをログに記録します。これは adb/静的解析では示せないものです。
  • content:// → WebViewブリッジの検証:非エクスポートの単一ファイルプロバイダで、ペイロードは一時的なインテント読み取り許可を通じてのみ配信され、さらにペイロードの構文を先に検証するローカルセルフテストWebViewを備えています。

送信とインターセプト

apk-interceptorは送信とインターセプトを別物として扱います。これは使用前に理解すべき最も重要な点です:

アクションモジュールビルド時にカスタムスキームが必要?
別のアプリにインテントまたはディープリンクを送信するSenderいいえ、実行時に任意のURI、パッケージ、またはActivityを入力します
カスタムスキームのディープリンクをインターセプト(受信)するInterceptorはい、ビルド時にスキームがAPKに固定されます

評価対象アプリに細工したディープリンクを送信する場合、再ビルドは不要です。Senderタブの**暗黙的ディープリンク(Implicit Deeplink)**モードを使用して任意のURIを入力してください。

ディープリンクをインターセプトする場合、つまりAndroidがカスタムスキームをapk-interceptorにルーティングさせて潜在的なスキーム乗っ取りを観察できるようにするには、--scheme でそのスキームを指定してAPKをビルドする必要があります。スキームは意図的にビルド時に固定されます(設計上のガードレール)。apk-interceptorは実行時に任意のスキームを登録することは決してありません。評価対象のスキームを変更する場合は、再ビルドして再インストールしてください。

要件

  • Android SDK 35を備えたAndroid Studio
  • Android 12以上のデバイスまたはエミュレータ
  • JDK 17以上
  • デバイスへのインストールと任意のコマンドラインテスト用の adb

ビルドとインストール

評価を許可されたカスタムURIスキームを指定してAPKをビルドします:

root@kitploit:~
./build-interceptor.sh --scheme <authorized_custom_scheme>
adb install ./out/apk-interceptor-<authorized_custom_scheme>-debug.apk

オプションのビルドフラグ:

root@kitploit:~
./build-interceptor.sh \
  --scheme <authorized_custom_scheme> \
  --app-id <custom.application.id> \
  --output ./out

--app-id はビルド時にインストールされるアプリケーションID(デバイス上のパッケージIDと content://<applicationId>.payload オーソリティ)を設定します。デフォルトは com.sterrasec.apkinterceptor です。異なる評価用に複数の個別インストール可能なビルドが必要な場合は、--app-id で上書きしてください。Windowsでは build-interceptor.bat が相当します。

デフォルトのスキーム intercept-poc-example は無害なプレースホルダです。ビルドスクリプトはこのデフォルトスキームで評価用APKを生成することを拒否します。

初回起動

各アプリバージョンの初回起動時に、apk-interceptorは許可された使用に関するダイアログを表示します。**理解しました(I understand)**をタップすると、同じバージョンでは再度ダイアログは表示されません。Senderタブには、他のアプリにインテントを送信できるため、常時警告が表示されます。

許可された使用ダイアログ

スクリーンショット

SenderPayloadInterceptor
SenderタブPayloadタブInterceptorタブ

アプリモジュール

Interceptor

このタブは、カスタムURIスキームのインターセプトを検証するために使用します。

表示される内容:

  • このAPKにコンパイルされたスキーム
  • ダミーのデフォルトスキームがまだ使用されている場合の警告
  • 受信したディープリンクログ
  • テストクエリパラメータフィールド
  • テストディープリンクを送信(Send Test Deeplink)
  • クリア(Clear)

基本的なワークフロー:

  1. 評価対象のカスタムスキームでAPKをビルドします。
  2. 評価対象アプリと一緒にインストールします。
  3. 評価フロー、ブラウザ、adb、または内蔵の**テストディープリンクを送信(Send Test Deeplink)**ボタンから、そのスキームのディープリンクをトリガーします。
  4. Androidがリンクをapk-interceptorにルーティングした場合は、Interceptorタブを開いて受信したURIとクエリパラメータを確認します。

**テストディープリンクを送信(Send Test Deeplink)について:これは常に固定の test ホストで <scheme>://test?<your params> を送信します。したがって、評価対象アプリの特定のディープリンクルートを駆動するためではなく、apk-interceptorがスキームを受信してログに記録することを確認するためのものです。評価対象アプリの必要なホストまたはパスに一致する細工したディープリンクを送信するには、代わりにSenderタブの暗黙的ディープリンク(Implicit Deeplink)**モードを使用してください。

adbの例:

root@kitploit:~
adb shell am start -W \
  -a android.intent.action.VIEW \
  -d 'my-authorized-scheme://test?source=adb\&message=hello%20world'

adb shell で複数のクエリパラメータを送信する場合は \& を使用してください。そうしないと、デバイスのシェルが & をコマンド区切り文字として扱う可能性があります。

期待される結果:

  • apk-interceptorがInterceptorタブで開く
  • RECEIVED ログエントリが表示される
  • ログエントリをタップすると、完全なURIとパラメータリストが展開される

Sender

このタブは、許可されたテスト中に制御されたインテントを送信するために使用します。

モード:

  • 暗黙的ディープリンク(Implicit Deeplink):Intent(ACTION_VIEW, Uri.parse(uri)) を送信します
  • 明示的Activity(Explicit Activity):特定のパッケージとActivityクラスにインテントを送信します

フィールドとコントロール:

  • 暗黙的ディープリンクモード用のURI
  • 明示的Activityモード用のパッケージ名
  • 明示的Activityモード用のActivityクラス
  • ローカルペイロードURIをインテントデータとして設定するcontent:// URIを添付(Attach content:// URI)(**明示的Activity(Explicit Activity)**モードでのみ表示。下記の注を参照)
  • 添付したペイロードURIへの読み取りアクセスを許可するFLAG_GRANT_READ_URI_PERMISSION
  • インテントを送信(Send Intent)

暗黙的ディープリンクのワークフロー:

  1. **暗黙的ディープリンク(Implicit Deeplink)**を選択します。
  2. 評価対象アプリのディープリンクパターンに一致するURIを入力します。
  3. **インテントを送信(Send Intent)**をタップします。
  4. 評価対象アプリの動作とapk-interceptorのログを観察します。

明示的Activityのワークフロー:

  1. 対象のActivityがエクスポートされており、許可の範囲内であることを確認します。
  2. **明示的Activity(Explicit Activity)**を選択します。
  3. 評価対象アプリのパッケージ名を入力します。
  4. エクスポートされたActivityのクラス名を入力します。
  5. 必要に応じて**content:// URIを添付(Attach content:// URI)**を有効にします。
  6. **インテントを送信(Send Intent)**をタップします。

注:

  • apk-interceptorは、評価対象アプリがインテントを安全に処理したかどうかを把握できません。評価対象アプリの動作、ログ、またはテストハーネスを観察する必要があります。
  • content:// の添付は、対象のActivityが信頼できないインテントデータをWebViewに渡すかどうかをテストするときに役立ちます。
  • **content:// URIを添付(Attach content:// URI)は明示的Activity(Explicit Activity)**モードでのみ提供されます。ペイロードはインテントの data として配信されるため、**暗黙的ディープリンク(Implicit Deeplink)**モードで入力したURIを上書きしてしまうので、そこではオプションが非表示になります。
  • PayloadProvider はエクスポートされていません。評価対象アプリが添付された content:// ペイロードを読み取れるのは、FLAG_GRANT_READ_URI_PERMISSION によってインテントが一時的な読み取りアクセスを許可するためだけです。そのフラグを有効にしたままにし、インテントを通じてURIを配信してください。他の方法で開かれた content:// URIは、別のアプリからは読み取れません。

Payload

このタブは、ローカルのHTMLペイロードを作成し、apk-interceptor自身のセルフテストWebViewでJavaScriptブリッジの構文を検証するために使用します。

含まれる内容:

  • HTML エディタ
  • ページ読み込み後に評価されるJavaScript エディタ
  • ブリッジオブジェクト名
  • 生成された content:// URI
  • ペイロードを保存(Save Payload)
  • セルフテストを実行(Run Self-Test)
  • セルフテストWebView
  • ブリッジ結果とコンソールログ

生成されるペイロードURIの形式:

root@kitploit:~
content://<applicationId>.payload/current.html

プロバイダはこの固定ファイルのみを配信します:

root@kitploit:~
filesDir/payloads/current.html

ペイロードのセルフテストワークフロー:

  1. HTML フィールドにHTMLを入力または貼り付けます。
  2. ローカルでテストしたいブリッジオブジェクト名(例:localBridge)を入力します。
  3. HTML内またはJavaScriptエディタにJavaScriptを追加します。
  4. **ペイロードを保存(Save Payload)**をタップします。
  5. **セルフテストを実行(Run Self-Test)**をタップします。
  6. ログの BRIDGE_RESULT、console.log、evaluateJavascript result エントリを確認します。

セルフテストJavaScriptの例:

root@kitploit:~
console.log("payload loaded");
window.localBridge.logResult(window.localBridge.getInfo());

セルフテストブリッジが公開するもの:

root@kitploit:~
window.<bridgeName>.logResult("message");
window.<bridgeName>.getInfo();

重要な制限:

セルフテストWebViewは、ローカルペイロードとブリッジ呼び出しの構文がapk-interceptor内で動作することを確認します。別のアプリのWebViewがペイロードを実行したか、独自のブリッジを呼び出したかを観察することはできません。評価対象アプリについては、そのアプリのUI、ログ、テストフック、またはアプリがデバッグ可能な場合はChrome DevToolsで確認してください。

脆弱性を対象としたワークフロー

1. カスタムURIスキームの乗っ取り

リスク:

Androidアプリが検証済みのApp Linkの代わりにカスタムURIスキームを登録しています。他のアプリも同じスキームを登録できるため、Androidがアプリ選択ダイアログを表示したり、リンクを別のアプリにルーティングしたりする可能性があります。

apk-interceptorで確認できること:

  • スキームを別のアプリが登録できるかどうか
  • Androidがapk-interceptorをハンドラとして提供するかどうか
  • ディープリンクパラメータに機密値が含まれるかどうか

手順:

  1. マニフェストまたはドキュメントから評価対象アプリのカスタムスキームを特定します。
  2. そのスキームでapk-interceptorをビルドします。
  3. 同じテストデバイスにapk-interceptorと評価対象アプリをインストールします。
  4. 許可されたテストフローからディープリンクをトリガーします。
  5. apk-interceptorが受信した場合は、Interceptorログを確認します。

記録すべき証拠:

  • OSの選択ダイアログの動作(表示された場合)
  • 受信した完全なURI
  • クエリパラメータと機密値が含まれているかどうか
  • リンクをルーティングするために必要なユーザー操作

2. ディープリンクパラメータインジェクション

リスク:

評価対象アプリが、十分な検証なしにナビゲーション、URL読み込み、機能フラグ、アカウント選択、またはレンダリングのためにディープリンクパラメータを信頼しています。

apk-interceptorで確認できること:

  • 細工したパラメータが受け入れられるかどうか
  • アプリが意図しない画面に遷移するかどうか
  • 安全でないURL/パス/コンテンツの値が使用されるかどうか

手順:

  1. 評価対象アプリのディープリンク形式を特定します。
  2. Sender を開きます。
  3. **暗黙的ディープリンク(Implicit Deeplink)**を選択します。
  4. 制御されたパラメータを持つ許可されたテストURIを入力します。
  5. **インテントを送信(Send Intent)**をタップします。
  6. 評価対象アプリの動作を観察します。

プレースホルダの例:

root@kitploit:~
my-authorized-scheme://open?next=https%3A%2F%2Fauthorized-test.example%2Flanding

明示的にスコープ内でない限り、実際のサードパーティのドメインやアカウントを使用しないでください。

3. エクスポートされたActivityのアクセス制御

リスク:

エクスポートされたActivityが、呼び出し元、ユーザー状態、または必要な許可を検証せずに機密アクションを実行したり、機密データを表示したりします。

apk-interceptorで確認できること:

  • エクスポートされたActivityが別のアプリから起動するかどうか
  • 期待されるチェックなしに機密動作を実行するかどうか
  • インテントデータがその動作を変更するかどうか

手順:

  1. Activityがエクスポートされており、スコープ内であることを確認します。
  2. Sender を開きます。
  3. **明示的Activity(Explicit Activity)**を選択します。
  4. パッケージ名とActivityクラスを入力します。
  5. 必要に応じてローカルの content:// ペイロードURIを添付します。
  6. **インテントを送信(Send Intent)**をタップします。
  7. 評価対象アプリがアクセス制御を実施しているかどうかを観察します。

記録すべき証拠:

  • Activityが起動されたかブロックされたか
  • 認証または許可のプロンプトの有無
  • 機密アクションまたはデータの露出
  • Activityによって使用されたインテントデータ

4. content:// を介したWebView JavaScriptブリッジの露出

リスク:

評価対象アプリが、addJavascriptInterface を介してJavaScriptブリッジも公開するWebViewに、信頼できない content:// インテントデータを読み込みます。

apk-interceptorで確認できること:

  • ローカルのHTMLペイロードを content:// として配信できるかどうか
  • 対象のWebViewがペイロードを読み込むかどうか
  • そのソースからのJavaScriptがブリッジに到達できるかどうか

手順:

  1. 許可された分析中に対象のActivityとブリッジオブジェクト名を特定します。
  2. Payload を開きます。
  3. 期待されるブリッジを呼び出すHTML/JSを作成します。
  4. **セルフテストを実行(Run Self-Test)**を使用してローカルで構文を検証します。
  5. Sender を開きます。
  6. **明示的Activity(Explicit Activity)**を選択します。
  7. 対象のパッケージとActivityクラスを入力します。
  8. **content:// URIを添付(Attach content:// URI)**を有効にし、FLAG_GRANT_READ_URI_PERMISSION を有効にしたままにします。
  9. **インテントを送信(Send Intent)**をタップします。
  10. 評価対象アプリを観察して、そのWebViewがペイロードを読み込み、ブリッジ呼び出しが実行されたかどうかを判断します。

重要な制限:

apk-interceptorは、別のアプリが明示的に結果を返したり表示したりしない限り、そのアプリから結果を受け取ることはできません。このツールは、ローカルペイロードを配信して構文を検証するように設計されており、データを外部送信するためのものではありません。

コマンドラインチェック

APKがネットワークアクセスを要求しないことを確認します:

root@kitploit:~
aapt dump permissions ./out/apk-interceptor-<scheme>-debug.apk

期待される結果:android.permission.INTERNET がないこと。

apk-interceptorへのディープリンクを明示的にトリガーします:

root@kitploit:~
adb shell am start -W \
  -n com.sterrasec.apkinterceptor/.InterceptActivity \
  -a android.intent.action.VIEW \
  -d 'my-authorized-scheme://test?source=adb'

Androidのリゾルバ経由でディープリンクをトリガーします:

root@kitploit:~
adb shell am start -W \
  -a android.intent.action.VIEW \
  -d 'my-authorized-scheme://test?source=adb'

明示的なコマンドは InterceptActivity の動作を確認します。暗黙的なコマンドはマニフェストのインテントフィルタとリゾルバの動作を確認します。

テスト

ユニットテストはRobolectricを使用してJVM上で実行されるため、デバイスやエミュレータは不要です。PayloadProvider をカバーしており、プロバイダが単一の current.html ペイロード以外を配信しないようにするパスホワイトリストとトラバーサルチェックを含みます。

root@kitploit:~
./gradlew testDebugUnitTest

テスト結果は app/build/reports/tests/testDebugUnitTest/index.html に書き込まれます。同じタスクが main へのすべてのプッシュとプルリクエストでCIに実行されます。

設計上のガードレール

  • android.permission.INTERNET なし
  • 外部データ送信や自動的なデータ外部送信なし
  • シェルコマンド実行機能なし
  • root、Magisk、Frida、またはインストルメンテーションへの依存なし
  • 実行時に任意のスキームを登録しない
  • 汎用ファイル配信プロバイダなし
  • PayloadProvider は /current.html のみを配信します

ライセンス

MIT

ツールをダウンロード
シナリオモジュール検証に役立つ内容
カスタムURIスキームの乗っ取りInterceptor別のアプリが同じカスタムスキームを登録してリンクを受信できるかどうか
ディープリンクパラメータの処理Sender評価対象アプリが安全でないクエリ/パスパラメータを受け入れるかどうか
エクスポートされたActivityの露出SenderエクスポートされたActivityが別のアプリから直接起動できるかどうか
content:// を介したWebViewブリッジの露出Payload + SenderローカルのHTMLペイロードがWebView JavaScriptブリッジに到達できるかどうか
ローカルペイロードの構文チェックPayloadHTML/JSペイロードがセルフテストWebViewで実行されるかどうか
ツール役割apk-interceptorとの違い
jadx / MobSF / QARK / Semgrep脆弱なエントリポイントを(静的に)発見するapk-interceptorはスキャンや逆コンパイルを行いません。すでにある発見事項を確認します
deep-C / NSdeepLink / adb am startディープリンクを列挙・送信するapk-interceptorも送信できますが、差別化点は乗っ取ったスキームを受信して正確なURIとパラメータを表示することです
drozer汎用オンデバイス攻撃フレームワーク(エージェント+多くの場合root)apk-interceptorは意図的な安全ガードレールを備えた単一の軽量APKで、範囲がより狭く、クライアントに安全に配布しやすいです
Metasploit / Frida武器化またはフッキング(例:addJavascriptInterface RCE)apk-interceptorは無害なペイロードでブリッジの到達可能性を確認するだけです。データを外部送信したり、シェルコマンドを実行したりすることは決してありません