mcpField
J
JADX-MCP-SERVER (Part of Zin's Reverse Engineering MCP Suite)

JADX-MCP-SERVER (Part of Zin's Reverse Engineering MCP Suite)

ローカル
github.com/zinja-coderセキュリティ8151 週間前に更新

JADX-MCP-SERVER (Part of Zin's Reverse Engineering MCP Suite) について

JADX-MCP-SERVERは、LLMクライアントをJADX-AI-MCPプラグインに接続し、逆コンパイルされたAndroidアプリをリアルタイムで分析するPython製MCPサーバーです。コード、マニフェスト、リソース、参照情報、デバッガーデータに加え、一部の編集操作も提供します。

主な機能

  1. 01逆コンパイルされたクラスとメソッドの取得
  2. 02マニフェストとアプリリソースの確認
  3. 03クラス、メソッド、参照の検索
  4. 04デバッガーのスタック、スレッド、変数の取得
  5. 05変数名の変更とコードコメントの追加

活用シーン

  1. 01逆コンパイルされたAndroidコードの脆弱性レビュー
  2. 02アプリのクラスやメソッド間の参照追跡
  3. 03APKのマニフェストとリソースファイルの確認
  4. 04デバッガー状態からアプリの実行を把握

MCP 対応

このサーバーはHTTP経由でJADX-AI-MCPプラグインを呼び出し、取得や変更のツールを提供します。MCPクライアントは逆コンパイルされたアプリの情報やデバッガーデータをリアルタイムで取得できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

JADX-MCP-SERVER(Zin's Reverse Engineering MCP Suite の一部)

⚡ JADX-AI-MCP Plugin と連携して、Claude などの LLM を使って Android APK を分析する、完全自動化された MCP サーバーです。脆弱性の発見、マニフェストの解析、リバースエンジニアリングを手軽に行えます。

GitHub contributors JADX-AI-MCP GitHub contributors JADX-MCP-SERVER GitHub all releases GitHub release (latest by SemVer) Latest release Java 11+ Python 3.10+ License

⭐ コントリビューター

貢献してくださった素晴らしい皆さんに感謝します ⭐

README の画像
ljt270864457
README の画像
badmonkey7
README の画像
p0px
README の画像
bx33661
README の画像
Haicaji
README の画像
Mostafa Nazari
README の画像
ChineseAStar
README の画像
cyal1
README の画像
tainn
README の画像
ZERO-A-ONE
README の画像
neoz
README の画像
SamadiPour
README の画像
wuseluosi
README の画像
CainYzb
README の画像
tbodt
README の画像
LilNick0101
README の画像
lwsinclair
README の画像
LYC-Android
README の画像
zbhello
README の画像
1yearning1
README の画像
mhsjzsq
README の画像
darkblack1234
README の画像
Merrg1n
バナー
ReadTheDocs:
  • Read The Docs で公開を開始しました。

今すぐダウンロード:https://github.com/zinja-coder/jadx-ai-mcp/releases

🤖 JADX-MCP-SERVER とは?

JADX MCP Server は、MCP(Model Context Protocol)を介して、変更を加えた jadx-gui(詳細:jadx-ai-mcp)とやり取りするスタンドアロンの Python サーバーです。LLM が逆コンパイルされた Android アプリのコンテキストとリアルタイムに通信できるようにします。

🤖 JADX-AI-MCP とは?

JADX-AI-MCP は、JADX デコンパイラー用のプラグインで、Model Context Protocol (MCP) と直接統合し、Claude のような LLM によるリアルタイムのリバースエンジニアリング支援を提供します。

イメージとしては、「逆コンパイル → コンテキストを考慮したコードレビュー → AI による提案」をすべてリアルタイムで行います。

高レベルシーケンス図
sequenceDiagram
LLM CLIENT->>JADX MCP SERVER: INVOKE MCP TOOL
JADX MCP SERVER->>JADX AI MCP PLUGIN: INVOKE HTTP REQUEST
JADX AI MCP PLUGIN->>REQUEST HANDLERS: INVOKE HTTP REQUEST HANDLER
REQUEST HANDLERS->>JADX GUI: PERFORM ACTION/GATHER DATA
JADX GUI->>REQUEST HANDLERS: ACTION PERFORMED/DATA GATHERED
REQUEST HANDLERS->>JADX AI MCP PLUGIN: CRAFT HTTP RESPONSE
JADX AI MCP PLUGIN->>JADX MCP SERVER:HTTP RESPONSE
JADX MCP SERVER->>LLM CLIENT: MCP TOOL RESULT

デモをご覧ください!

  • 迅速な分析を実行

https://github.com/user-attachments/assets/b65c3041-fde3-4803-8d99-45ca77dbe30a

  • 脆弱性をすばやく発見

https://github.com/user-attachments/assets/c184afae-3713-4bc0-a1d0-546c1f4eb57f

  • 複数の AI エージェントに対応

https://github.com/user-attachments/assets/6342ea0f-fa8f-44e6-9b3a-4ceb8919a5b0

  • APK のリソースを分析

https://github.com/user-attachments/assets/f42d8072-0e3e-4f03-93ea-121af4e66eb1

  • JADX を使用した APK のデバッグ中に使える AI アシスタント

https://github.com/user-attachments/assets/2b0bd9b1-95c1-4f32-9b0c-38b864dd6aec

次の 2 つのツールを組み合わせたものです:

  1. JADX-AI-MCP
  2. JADX MCP SERVER

Zin MCP Suite

現在の MCP ツール

以下の MCP ツールを利用できます。

逆コンパイルされたソースを返すツールは、デフォルトで Kotlin コンパイラーのメタデータ(@Metadata / @DebugMetadata。Kotlin のダンプの 25~50% を占めることがよくあります)を除去します。生のダンプを取得するには、slim=False を指定してください。除去しても行番号は変わらないため、with_line_numbers=True と add_comment(line=...) は引き続き機能します。

  • fetch_current_class(slim=True) — 選択したクラスの名前とソース全体を取得します
  • get_selected_text() — 現在選択されているテキストを取得します
  • get_all_classes() — プロジェクト内のすべてのクラスを一覧表示します
  • get_class_source(slim=True) — 指定したクラスのソース全体を取得します(with_line_numbers=True を指定すると、add_comment(line=...) で行番号を指定できます)
  • get_method_by_name(slim=True) — メソッドのソースを取得します
  • search_method_by_name() — クラスを横断してメソッドを検索します
  • search_classes_by_keyword() — ソースコードに特定のキーワードを含むクラスを検索します(ページネーションに対応)
  • get_methods_of_class() — クラス内のメソッドを一覧表示します
  • get_fields_of_class() — クラス内のフィールドを一覧表示します
  • get_smali_of_class() — クラスの smali を取得します
  • get_main_activity_class(slim=True) — AndroidManifest.xml ファイルに記載されたクラスを jadx から取得し、メインアクティビティを返します。
  • get_main_application_classes_code(slim=True) — AndroidManifest.xml で定義されたパッケージ名に基づき、メインアプリケーションのすべてのクラスのコードを取得します。
  • get_main_application_classes_names() — AndroidManifest.xml で定義されたパッケージ名に基づき、メインアプリケーションのすべてのクラス名を取得します。
  • get_android_manifest() — AndroidManifest.xml の内容を取得して返します。
  • get_manifest_component - マニフェストファイル全体ではなく、指定したマニフェストコンポーネントを取得します
  • get_strings() : strings.xml ファイルを取得します
  • get_all_resource_file_names() : アプリケーション内に存在するすべてのリソースファイル名を取得します
  • get_resource_file() : リソースファイルの内容を取得します
  • rename_variable() : メソッド内の変数名を変更します
  • add_comment() : クラス、メソッド、フィールド、またはコードの1行(line=)にコメントを追加します。コメントは JADX-GUI に表示され、プロジェクトとともに保存されます(同じ対象に再度コメントを追加すると更新され、空のコメントを指定すると削除されます)
  • list_comments() : プロジェクトに保存されているコメントを一覧表示します。クラスを1つ指定して絞り込むこともできます
  • debug_get_stack_frames() : jadx デバッガーからスタックフレームを取得します
  • debug_get_threads() : jadx デバッガーからスレッドの情報を取得します
  • debug_get_variables() : jadx デバッガーから変数を取得します
  • xrefs_to_class() : クラスへのすべての参照を検索します(メソッドレベルとクラスレベルの参照を返し、ページネーションに対応)
  • xrefs_to_method() : メソッドへのすべての参照を検索します(オーバーライド関連のメソッドを含み、ページネーションに対応)
  • xrefs_to_field() : フィールドへのすべての参照を検索します(そのフィールドにアクセスするメソッドを返し、ページネーションに対応)

注:Claude Desktop でテスト済みです。他の LLM への対応も今後テストされる可能性があります。

🗒️ プロンプトの例

🔍 基本的なコードの理解

"このクラスの役割を1段落で説明してください。"

"このメソッドの責務を要約してください。"

"このクラスに難読化はありますか?"

"このクラスが必要とする可能性のあるAndroid権限をすべて列挙してください。"

🛡️ 脆弱性の検出

"このメソッドに安全でないAPIの使用はありますか?"

"このクラスにハードコードされたシークレットや認証情報がないか確認してください。"

"このメソッドはユーザー入力を使用する前にサニタイズしていますか?"

"このコードによって引き起こされる可能性のあるセキュリティ上の脆弱性は何ですか?"

🛠️ リバースエンジニアリング支援

"難読化を解除して、クラスとメソッドの名前を分かりやすいものに変更してください。"

"このsmaliメソッド本来の目的を推測できますか?"

"このクラスはどのライブラリやSDKに含まれているようですか?"

📦 静的解析

"このクラス内のネットワーク関連API呼び出しをすべて列挙してください。"

"ファイルI/O操作とその潜在的なリスクを特定してください。"

"このメソッドはデバイス情報やPIIを漏えいしますか?"

🤖 AIによるコード変更

"このメソッドをリファクタリングして、読みやすさを向上させてください。"

"各手順を説明するコメントをこのコードに追加してください。"

"このJavaメソッドを解析用にPythonで書き直してください。"

📄 ドキュメントとメタデータ

"すべてのメソッドにJavadoc形式のコメントを生成してください。"

"このクラスはどのパッケージまたはアプリコンポーネントに属していると思われますか?"

"Androidコンポーネントの種類(Activity、Serviceなど)を特定できますか?"

🐞 デバッガーアシスタント

   "Fetch stack frames, varirables and threads from debugger and provide summary"

   "Based the stack frames from debugger, explain the execution flow of the application"

   "Based on the state of variables, is there security threat?"

🛠️ はじめに

こちらをお読みください

デモ:ローカルで脆弱性を見つけるコードレビューを実施

https://github.com/user-attachments/assets/4cd26715-b5e6-4b4b-95e4-054de6789f42

CLIの高度なオプション — フラグについて

2つの独立した接続があり、それぞれにホストとポートがあります。

┌─────────────┐    --host / --port     ┌──────────────────┐   --jadx-host / --jadx-port   ┌──────────────────┐
│  LLM Client │ ◄──────────────────►   │  jadx-mcp-server │ ──────────────────────────►   │  JADX-GUI Plugin │
│  (Claude,   │   Where the MCP server │                  │   Where the MCP server looks  │  (jadx-ai-mcp)   │
│   Codex..)  │   LISTENS for clients  │                  │   for the JADX plugin         │                  │
└─────────────┘                        └──────────────────┘                               └──────────────────┘
フラグデフォルト制御対象
--httpoffstdioの代わりにHTTPトランスポートを使用します
--host127.0.0.1MCP サーバーがリッスンする場所(LLM クライアント向けのバインドアドレス)
--port8651MCP サーバーがリッスンするポート
--jadx-host127.0.0.1JADXプラグインの場所(対象となるJADX-GUIマシン)
--jadx-port8650JADXプラグインが使用するポート
使用例

シナリオ1 — すべてが同じマシン上にある場合(最も一般的):

# Default: MCP server on localhost:8651, connects to JADX plugin on localhost:8650
uv run jadx_mcp_server.py --http

シナリオ2 — DockerコンテナまたはWSL(MCP サーバーにホストネットワークからアクセス可能):

# MCP server listens on ALL interfaces so the host can reach it
# JADX plugin is still on the same machine
uv run jadx_mcp_server.py --http --host 0.0.0.0

シナリオ3 — JADX-GUIが別のマシンで実行されている場合(例:リモートVM):

# MCP server runs locally, but connects to JADX plugin on a remote machine
uv run jadx_mcp_server.py --http --jadx-host 192.168.1.100

シナリオ4 — 完全なリモート構成(すべてが別々のマシン上にある):

# MCP server listens on all interfaces on port 9999
# JADX plugin is on a different machine at 192.168.1.100:8652
uv run jadx_mcp_server.py --http --host 0.0.0.0 --port 9999 --jadx-host 192.168.1.100 --jadx-port 8652

注意

⚠️ セキュリティ警告 — リモートバインド

--host 0.0.0.0(またはlocalhost以外のアドレス)を使用すると、MCP サーバーは認証なしの平文HTTPですべてのネットワークインターフェースにバインドされます。つまり、次のような状態になります。

  • ネットワーク上の誰でも接続して、すべてのMCPツールを呼び出せます
  • TLS暗号化はありません。通信を傍受される可能性があります
  • 攻撃者はサーバーを使って、逆コンパイルされたコードの読み取り、クラス/メソッド名の変更、デバッグ情報へのアクセスを行えます

対策:

  • 0.0.0.0へのバインドは、信頼できる隔離ネットワーク(例:Dockerブリッジ、ローカルVM)でのみ行ってください
  • ファイアウォールを使ってMCPポートへのアクセスを制限してください
  • 代わりにSSHトンネルの使用を検討してください:ssh -L 8651:127.0.0.1:8651 remote-host

同様に、--jadx-hostにlocalhost以外のアドレスを指定すると、MCP サーバーはそのホストに認証なしのHTTPリクエストを送信します。接続先が信頼できることを確認してください。

あらゆる OpenAI 互換モデルからサーバーを操作する

MCP 対応アプリは直接接続します。それ以外で POST /v1/chat/completions に対応するもの(OpenRouter、LiteLLM、vLLM、Ollama の OpenAI レイヤー、OmniRoute など)には、examples/openai_compatible_client.py が参考用アダプターとして利用できます。稼働中の jadx_mcp_server.py --http に接続し、MCP ツールの一覧を OpenAI の関数呼び出しツールに変換したうえで、モデルが回答するまで呼び出し → 実行 → 結果の返送というループを実行します。

# terminal 1
uv run jadx_mcp_server.py --http --host 127.0.0.1 --port 9000

# the example needs the openai SDK; the server itself does not
pip install -r examples/requirements.txt

# OpenAI
OPENAI_API_KEY=sk-... python examples/openai_compatible_client.py \
  --prompt "What does com.example.app.MainActivity do?"

# a local gateway (any placeholder key works)
OPENAI_BASE_URL=http://127.0.0.1:11434/v1 OPENAI_API_KEY=ollama OPENAI_MODEL=llama3.1 \
  python examples/openai_compatible_client.py

# show the tool schema the model is offered, without calling a model at all
python examples/openai_compatible_client.py --list-tools

--base-url、--api-key、--model(または OPENAI_BASE_URL/OPENAI_API_KEY/OPENAI_MODEL 環境変数)で、任意のプロバイダーを指定できます。--max-steps は質問ごとのツール実行回数の上限を設定し、--max-tool-chars は単一の結果を切り詰めるため、大きなクラスのダンプがモデルのコンテキストを圧迫するのを防げます。対話セッションを開始するには、--prompt を指定せずに実行してください。

🛣️ 今後のロードマップ

  • apktool のサポートを追加

  • hermes code(ReactNative アプリケーション)のサポートを追加

  • Docker のサポートを追加

  • より便利な MCP ツールを追加

  • LLM が JADX 上のコードを変更できるようにする

  • プロンプトテンプレートを追加し、LLM が Android APK ファイルにリソースとしてアクセスできるようにする

  • ローカル LLM をサポートする MCP クライアントを構築

  • 最終目標:すべての Android リバースエンジニアリングツールと APK 改変ツールを単一の MCP サーバーに接続し、雰囲気に任せるだけで APK ファイルを可能な限り簡単にリバースエンジニアリングできるようにする。

貢献者への注意事項

  • JADX-AI-MCP 関連のファイルはこちらにあります。

  • jadx-mcp-server 関連のファイルは、このリポジトリ内にのみあります。

🙏 謝辞

このプロジェクトは、@skylot が作成・保守する素晴らしいオープンソースの Android デコンパイラー、JADX のプラグインです。デコンパイルの中核となるロジックはすべて開発者に帰属します。このプロジェクトでは、AI 機能を備えた MCP サーバーをサポートするための拡張のみを行っています。

📎 元の README(JADX)

jadx のオリジナルの README.md は、参照とクレジット表記のため、このリポジトリに含まれています。

この MCP サーバーは、JADX-GUI の拡張性と素晴らしい Android リバースエンジニアリングコミュニティのおかげで実現しています。

また、Debian ベースの Linux 向け Claude デスクトップアプリを開発した @aaddrick にも心から感謝します。

最後に、Model Context Protocol を開発した @anthropics と @FastMCP チームに感謝します。

そして、このようなプロジェクトを可能にするライブラリや依存関係を作り上げている、すべてのオープンソースのメンテナーと貢献者に感謝します。

監査済み・評価バッジ取得済み

MseeP.ai Security Assessment Badge

監査を実施し、評価バッジを提供してくださった Mseep.net に感謝します。

依存関係

このプロジェクトでは、以下の素晴らしいライブラリを使用しています。

📄 ライセンス

このプラグインは、元の JADX リポジトリから Apache 2.0 License を継承しています。

⚖️ 法的警告

免責事項

ツール jadx-ai-mcp および jadx_mcp_server は、教育、研究、倫理的なセキュリティ評価のみを目的としています。これらは、明示的または黙示的な保証を伴わず、「現状のまま」提供されます。これらのツールの使用が、適用されるすべての法律、規制、倫理ガイドラインに準拠していることを確認する責任は、ユーザーのみが負うものとします。

jadx-ai-mcp または jadx_mcp_server を使用することで、所有するアプリケーションや分析する明示的な許可を得ているアプリケーションなど、テストを許可された環境でのみ使用することに同意したものとみなされます。許可のないリバースエンジニアリング、知的財産権の侵害、または悪意ある活動を目的としたこれらのツールの不正使用は、固く禁じられています。

jadx-ai-mcp および jadx_mcp_server の開発者は、これらのツールの使用または不正使用によって生じる損害、データの損失、法的責任、その他の結果について、一切の責任を負いません。ユーザーは、自らの行動およびその使用によって生じるあらゆる影響について、全責任を負うものとします。

責任を持って使用してください。知的財産を尊重してください。倫理的なハッキングの実践に従ってください。


🙌 貢献またはサポート

  • 役に立ちましたか?⭐️を付けてください
  • アイデアがありますか?issueを作成するか、PRを送ってください
  • これを基に何かを作りましたか?DMを送るか、私にメンションしてください。READMEに追加します!

リバースエンジニアリングとAIコミュニティのために、❤️を込めて作りました。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。