Reverse Engineer Anything (Docker) について
Reverse Engineer Anything (Docker)は、ソースコードのないソフトウェアを調査するエージェントや分析者向けに、REAをDockerイメージにまとめています。Android解析用の依存関係を含み、Streamable HTTP MCP、stdio MCP、CLIの各モードを利用できます。
主な機能
- 01Android APKの調査と逆コンパイル
- 02Electron、.NET、Go、Rust、WASMの解析
- 03クラス検索と参照の追跡
- 04Androidリソースのデコード
- 05ネイティブバイナリ向けGhidraの任意導入
- 06トークンとセッション制御付きHTTPブリッジ
活用シーン
- 01APKのログイン処理やトークン保存先を調査
- 02Androidクラス間の参照を追跡
- 03ソースコードのないバイナリやアプリバンドルを解析
- 04HTTPまたはstdio MCPクライアントからREAを実行
MCP 対応
bearerトークン認証付きのStreamable HTTP MCPエンドポイント`/mcp`を提供し、ローカルクライアント向けにREAのstdio MCPサーバーも実行できます。HTTPセッションごとに別のREAプロセスが起動します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e REA_BRIDGE_TOKEN docker.io/psyb0t/reverse-engineer-anything:v0.1.1REA_BRIDGE_TOKENシークレットBearer token clients must send; at least 32 charactersローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
docker-reverse-engineer-anything
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 13 | REAはJADXブリッジをjdk.compilerでコンパイルするため、JREでは不十分です |
| jadx-headless-mcp | 0.7.1 | REAが固定するJADXブリッジのjar。REAのSHA-256と照合済み |
| Apktool | 3.0.3 | リソースと文字列のデコード |
| adb | 34.0.5 | デバイスツール。REAが検証したバージョン |
| Node.js | 24 | REAとブリッジを実行 |
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を起動し、ベアラートークンを要求します。 |
mcp | REA独自の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にのみ出力します。
| 名前 | インストール内容 | ダウンロード時/インストール後 | アーキテクチャ | 有効になる機能 |
|---|---|---|---|---|
ghidra | Ghidra 12.1.4 | 570 MB/880 MB | amd64 | ネイティブの逆コンパイル、関数、クロスリファレンス、文字列 |
初回起動時には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_TOKEN | required | Bearer トークン。32 文字以上である必要があります。REA に渡されることはありません。 |
REA_BRIDGE_PORT | 8080 | コンテナ内のリッスンポートです。 |
REA_BRIDGE_HOST | 0.0.0.0 | コンテナ内のリッスンアドレスです。 |
REA_BRIDGE_PATH | /mcp | MCP エンドポイントのパスです。 |
REA_BRIDGE_ALLOWED_HOSTS | localhost,127.0.0.1,[::1] | 受け入れる Host ヘッダー名です(DNS リバインディング対策)。* で無効になります。 |
REA_BRIDGE_MAX_SESSIONS | 4 | 同時に実行できる MCP セッション数です。各セッションに個別の REA プロセスが割り当てられます。 |
REA_BRIDGE_IDLE_TIMEOUT_SECONDS | 1800 | アイドル状態のセッションは閉じられ、REA プロセスは停止します。 |
REA_BRIDGE_MAX_BODY_BYTES | 4194304 | 受け入れるリクエストボディの最大サイズです。 |
REA_BRIDGE_LOG_LEVEL | info | debug、info、warn、error のいずれかです。ログは stdout に JSON 形式で出力されます。 |
REA_INSTALL | unset | 起動時にインストールする、カンマ区切りのオプトインツールです。 |
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 をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。