mcpField
R
Reverse Engineer Anything (Docker)

Reverse Engineer Anything (Docker)

ローカル
github.com/psyb0t開発ツール41 週間前に更新

Reverse Engineer Anything (Docker) について

Reverse Engineer Anything (Docker)は、ソースコードのないソフトウェアを調査するエージェントや分析者向けに、REAをDockerイメージにまとめています。Android解析用の依存関係を含み、Streamable HTTP MCP、stdio MCP、CLIの各モードを利用できます。

主な機能

  1. 01Android APKの調査と逆コンパイル
  2. 02Electron、.NET、Go、Rust、WASMの解析
  3. 03クラス検索と参照の追跡
  4. 04Androidリソースのデコード
  5. 05ネイティブバイナリ向けGhidraの任意導入
  6. 06トークンとセッション制御付きHTTPブリッジ

活用シーン

  1. 01APKのログイン処理やトークン保存先を調査
  2. 02Androidクラス間の参照を追跡
  3. 03ソースコードのないバイナリやアプリバンドルを解析
  4. 04HTTPまたはstdio MCPクライアントからREAを実行

MCP 対応

bearerトークン認証付きのStreamable HTTP MCPエンドポイント`/mcp`を提供し、ローカルクライアント向けにREAのstdio MCPサーバーも実行できます。HTTPセッションごとに別のREAプロセスが起動します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"psyb0t-reverse-engineer-anything": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"REA_BRIDGE_TOKEN",
"docker.io/psyb0t/reverse-engineer-anything:v0.1.1"
],
"env": {
"REA_BRIDGE_TOKEN": "<REA_BRIDGE_TOKEN>"
}
}
}
}
起動コマンドdocker run -i --rm -e REA_BRIDGE_TOKEN docker.io/psyb0t/reverse-engineer-anything:v0.1.1
設定が必要な環境変数
REA_BRIDGE_TOKENシークレットBearer token clients must send; at least 32 characters

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocidocker.io/psyb0t/reverse-engineer-anything:v0.1.1

ツール

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

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

詳細

docker-reverse-engineer-anything

CI version license Docker Pulls

REA(Reverse Engineer Anything)をDocker イメージにまとめました。Android APKを解析するために必要なものがすべて含まれており、 その前段にはStreamable HTTP MCPエンドポイントがあります。

REAはmorlutoのMCPサーバー兼CLIで、ソースコードのないソフトウェアをAIエージェントが調査できます。APKの逆コンパイル、参照の追跡、リソースの読み取り、adb経由でのデバイス操作、Electronバンドルや.NETアセンブリ、GoおよびRustのバイナリの解析が可能です。上流では、stdio経由でMCP通信を行い、JDK、JADX、Apktoolを自分でインストールする必要があるrea-agents npmパッケージとして提供されています。このイメージがその準備を代わりに行います。

これは非公式のパッケージです。REA本体は morluto/reaにあり、MITライセンスで公開されています。REAのツールのバグはそちらへ、イメージやHTTPブリッジのバグはこちらへ報告してください。

目次

イメージの内容

構成要素バージョン用途
REA(rea-agents)6.4.0解析エンジン、170個のMCPツール
OpenJDK 21(full)Debian 13REAはJADXブリッジをjdk.compilerでコンパイルするため、JREでは不十分です
jadx-headless-mcp0.7.1REAが固定するJADXブリッジのjar。REAのSHA-256と照合済み
Apktool3.0.3リソースと文字列のデコード
adb34.0.5デバイスツール。REAが検証したバージョン
Node.js24REAとブリッジを実行

APK解析に追加の設定は不要です。inspect_android_package、 search_android_classes、inspect_android_class、inspect_android_method、 trace_android_references、decode_android_resourcesはそのまま動作し、 REAの静的JavaScript/Electron、.NET、Go、Rust、WASM、SQLite、キャプチャツールも利用できます。

ネイティブバイナリ(APK内の.soライブラリや、その他のELF、PE、Mach-O)の逆コンパイルにはGhidraが必要です。無料ですが約900 MB追加されるため、あらかじめイメージには含めていません。REA_INSTALL=ghidraを設定すると、コンテナの初回起動時にダウンロードされます。オプトインツールを参照してください。

イメージはlinux/amd64とlinux/arm64向けにビルドされます。CIでは両アーキテクチャでAPKテストを実行します。Ghidraはamd64のみ対応しています。

クイックスタート

export REA_BRIDGE_TOKEN="$(openssl rand -hex 32)"
mkdir -p targets && cp /path/to/app.apk targets/

docker run -d --name rea \
  -e REA_BRIDGE_TOKEN \
  -p 127.0.0.1:8080:8080 \
  --read-only \
  --tmpfs /tmp:rw,nosuid,size=4g \
  --tmpfs /home/rea:rw,nosuid,size=256m \
  --cap-drop ALL \
  --security-opt no-new-privileges \
  -v "$PWD/targets:/work:ro" \
  psyb0t/reverse-engineer-anything:latest

claude mcp add --transport http rea http://localhost:8080/mcp \
  --header "Authorization: Bearer $REA_BRIDGE_TOKEN"

次に、エージェントに「/work/app.apkのログイン処理を逆コンパイルして、トークンがどこに保存されるか見せて」のように頼んでください。パスはコンテナ内のパスです。/workにマウントしたものがREAから認識されます。

実行方法

エントリーポイントは引数を1つ受け取ります。

コマンド実行内容
bridgeデフォルトです。ポート8080の/mcpでStreamable HTTP MCPを起動し、ベアラートークンを要求します。
mcpREA独自のstdio MCPサーバーです。stdioのみ対応のクライアントからdocker run -iで実行します。
その他REA CLIです。例:--helpまたはinspect-android-package /work/app.apk。
Streamable HTTPブリッジ

ブリッジはrea mcpの前段で動作する小さなNodeサービスです。REAはプロセスごとに解析状態を保持するため、MCPセッションごとに独自のREAプロセスが割り当てられます。進行状況通知を含め、メッセージは変更せずにそのまま通過します。セッションが終了するのは、DELETEを受け取ったとき、アイドルタイムアウト後、またはコンテナ停止時です。セッションに紐づくREAプロセスも終了します。

stdio MCP

ローカルコマンドのみを起動するクライアント向け:

{
  "mcpServers": {
    "rea": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "--read-only",
        "--tmpfs",
        "/tmp:rw,nosuid,size=4g",
        "--tmpfs",
        "/home/rea:rw,nosuid,size=256m",
        "--cap-drop",
        "ALL",
        "--security-opt",
        "no-new-privileges",
        "-v",
        "/absolute/path/to/targets:/work:ro",
        "psyb0t/reverse-engineer-anything:latest",
        "mcp"
      ]
    }
  }
}
CLI
docker run --rm --network none --read-only \
  --tmpfs /tmp:rw,nosuid,size=4g --tmpfs /home/rea:rw,nosuid,size=256m \
  --cap-drop ALL --security-opt no-new-privileges \
  -v "$PWD/targets:/work:ro" \
  psyb0t/reverse-engineer-anything:latest \
  search-android-classes /work/app.apk MainActivity

出力はJSONです。すべてのコマンドは--helpで確認できます。

オプトインツール

REAで利用できるツールの中には、再配布は無料でも、すべてのイメージに含めるには大きすぎるものがあります。REA_INSTALLでツール名を指定し、/opt/rea-toolsにボリュームをマウントしてください。

docker run -d --name rea \
  -e REA_BRIDGE_TOKEN \
  -e REA_INSTALL=ghidra \
  -v rea-tools:/opt/rea-tools \
  -p 127.0.0.1:8080:8080 \
  --read-only \
  --tmpfs /tmp:rw,nosuid,size=4g \
  --tmpfs /home/rea:rw,nosuid,size=256m \
  --cap-drop ALL \
  --security-opt no-new-privileges \
  -v "$PWD/targets:/work:ro" \
  psyb0t/reverse-engineer-anything:latest

起動時に、REAの実行前に、エントリーポイントが指定されたツールのうち、まだボリュームに存在しないものをインストールします。イメージで固定されたバージョンをダウンロードし、SHA-256が一致しない場合は拒否してから、展開し、REAがそのツールを使えるように設定します。次回以降の起動ではボリューム内のツールが見つかるため、ダウンロードはスキップされます。これはmcpやCLIを含むすべてのモードで動作し、ログはstderrにのみ出力します。

名前インストール内容ダウンロード時/インストール後アーキテクチャ有効になる機能
ghidraGhidra 12.1.4570 MB/880 MBamd64ネイティブの逆コンパイル、関数、クロスリファレンス、文字列

初回起動時にはGitHubへのネットワークアクセスが必要です。ボリュームがない場合、--read-onlyコンテナにはツールの保存場所がないため、その旨のメッセージを表示して終了します。書き込み可能なコンテナでは独自のレイヤーにインストールされ、新しいコンテナを起動するたびに再ダウンロードされます。Ghidraの 公式リリースにはarm64用のデコンパイラーがないため、arm64ではREA_INSTALL=ghidraを指定すると、正常に動作しない状態でのインストールを避けるため、その理由を示して拒否します。

独自のツールを用意する

有料またはログインが必要なツールはダウンロードされません。自分でインストールし、REAが利用できるように設定してください。

  • 独自ビルドのGhidra(arm64ビルドや新しいバージョンなど):マウントしてGHIDRA_INSTALL_DIRを設定します。GHIDRA_INSTALL_DIRが設定されている場合は、REA_INSTALL=ghidraより優先されます。
  • IDA:インストール先をマウントし、REAのIDAガイドに従ってREA_IDA_MCP_CONFIGを設定します。
  • JEB:REAがループバックでアクセスできる場所(コンテナのネットワーク名前空間を共有するサイドカー)でMCPサーバーを実行し、REA_JEB_MCP_URLを設定します。
  • Hopperはデスクトップアプリのため、ここではサポートされていません。

Configuration

変数デフォルト説明
REA_BRIDGE_TOKENrequiredBearer トークン。32 文字以上である必要があります。REA に渡されることはありません。
REA_BRIDGE_PORT8080コンテナ内のリッスンポートです。
REA_BRIDGE_HOST0.0.0.0コンテナ内のリッスンアドレスです。
REA_BRIDGE_PATH/mcpMCP エンドポイントのパスです。
REA_BRIDGE_ALLOWED_HOSTSlocalhost,127.0.0.1,[::1]受け入れる Host ヘッダー名です(DNS リバインディング対策)。* で無効になります。
REA_BRIDGE_MAX_SESSIONS4同時に実行できる MCP セッション数です。各セッションに個別の REA プロセスが割り当てられます。
REA_BRIDGE_IDLE_TIMEOUT_SECONDS1800アイドル状態のセッションは閉じられ、REA プロセスは停止します。
REA_BRIDGE_MAX_BODY_BYTES4194304受け入れるリクエストボディの最大サイズです。
REA_BRIDGE_LOG_LEVELinfodebug、info、warn、error のいずれかです。ログは stdout に JSON 形式で出力されます。
REA_INSTALLunset起動時にインストールする、カンマ区切りのオプトインツールです。
REA_TOOLS_DIR/opt/rea-toolsオプトインツールのインストール先です。ここにボリュームをマウントしてください。

REA 独自の変数は、そのまま引き継がれます。たとえば、大きな APK 向けの REA_JADX_HEAP_MIB や REA_JADX_OPERATION_TIMEOUT_MS、REA_LOG_LEVEL、 REA_MCP_MAX_RESPONSE_BYTES などです。REA の ドキュメントを参照してください。イメージでは JAVA_HOME、REA_JADX_MCP_JAR、REA_APKTOOL_COMMAND、REA_ADB_PATH が プリセットされています。

GET /healthz はトークンなしで応答します:{"status":"ok","sessions":N}。

Security

REA は対象のソフトウェアを実行、操作、計測できますが、独自の権限チェックは行いません。コンテナが境界となるため、設定を厳格にしてください:

  • ブリッジはトークンなしでは起動せず、トークンを定時間比較し、Host ヘッダーを確認します。また、トークンが REA に渡されることはありません。
  • イメージは非特権ユーザー rea として実行されます。例と同じ方法で実行してください: 読み取り専用のルートファイルシステム、/tmp と /home/rea に tmpfs を使用し、すべてのケイパビリティを削除し、 no-new-privileges を設定し、対象を読み取り専用でマウントし、ポートを 127.0.0.1 にバインドします。
  • JVM は /tmp からネイティブライブラリを読み込むため、/tmp に noexec を設定できません。
  • localhost の外部に公開する場合は、前段に TLS を配置し、ホスト名を REA_BRIDGE_ALLOWED_HOSTS に追加してください。
  • 所有しているソフトウェア、または調査を許可されているソフトウェアのみを解析してください。REA の 免責事項が適用されます。

Agent integrations

  • Claude Code、Codex、OpenClaw 向けのスキル: claude plugin install reverse-engineer-anything@psyb0t、 codex plugin add reverse-engineer-anything@psyb0t、または ClawHub からインストールできます。エージェントに APK のワークフローを教え、ロックダウンされた CLI ラッパーを同梱します。まず claude plugin marketplace add psyb0t/agents でマーケットプレイスを追加してください。
  • OpenClaw プラグイン @psyb0t/reverse-engineer-anything:実行中のコンテナへの stdio ブリッジです。REA_URL と REA_BRIDGE_TOKEN を設定してください。
  • MCP レジストリ:io.github.psyb0t/reverse-engineer-anything。

バージョンと更新

イメージのバージョンはこのリポジトリ独自のもの(VERSION)です。REA のバージョンは上記の表と package.json に記載されています。REA はほぼ毎日リリースを公開しています。このイメージでは、REA のリリースやその他の npm パッケージは、公開から少なくとも 7 日経過してから取り込み、固定されたロックファイルを使ってライフサイクルスクリプトを無効にした状態でインストールし、ダウンロードしたすべての jar ファイルの SHA-256 が固定値と一致することを確認します。オプトインツールにも同じルールを適用します。イメージのリリースごとに 1 つのバージョンを取り込み、公開から少なくとも 7 日経過してから SHA-256 を確認します。ベースイメージはダイジェストで固定します。

開発

ホストには Docker、Make、Git、シェルが必要です。それ以外はすべてコンテナ内で実行されます。

make help        # every target
make lint        # tsc, eslint, prettier, shellcheck, hadolint
make test        # bridge unit tests + the image against a real APK
make build       # build psyb0t/reverse-engineer-anything locally
make run         # run the bridge on 127.0.0.1:8080 (needs REA_BRIDGE_TOKEN)
make pkg-update PKG=rea-agents   # move to the newest REA that clears the age gate

統合テストでは、強化されたコンテナを起動して、トークンがない場合に 401 が返されることを確認した後、ブリッジ経由で Appium の ApiDemos APK を対象に REA の Android ツールを実行します。また、REA_INSTALL=ghidra を指定したコンテナも起動し、Ghidra がブリッジ経由でバイナリを解析することを確認します(arm64 では代わりに拒否されることを確認します)。Ghidra のダウンロードは rea-integration-tools ボリュームにキャッシュされます。make clean を実行すると削除されます。

ライセンス

このリポジトリのコードは WTFPL です。REA は MIT ライセンスで、同梱ツールにはそれぞれ独自のライセンスが適用されます。THIRD_PARTY_NOTICES.md をご覧ください。

コメント

MCP は初めてですか?

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

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