mcpField
R
Reverse Engineer Anything (Docker)

Reverse Engineer Anything (Docker)

本地服务
github.com/psyb0t开发工具41 周前更新

关于 Reverse Engineer Anything (Docker)

Reverse Engineer Anything (Docker) 将 REA 打包在 Docker 镜像中,供 Agent 和分析人员检查无源代码的软件。镜像包含 Android 分析依赖,并提供 Streamable HTTP MCP、stdio MCP 和命令行模式。

主要功能

  1. 01检查并反编译 Android APK
  2. 02分析 Electron、.NET、Go、Rust 和 WASM
  3. 03搜索类并追踪引用
  4. 04解码 Android 资源
  5. 05可选安装 Ghidra 以分析原生二进制
  6. 06带令牌和会话控制的 HTTP 桥接

适用场景

  1. 01检查 APK 登录流程及令牌存储
  2. 02追踪 Android 类之间的引用
  3. 03分析无源代码的二进制文件或应用包
  4. 04通过 HTTP 或 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 agent 检查没有源代码的软件:反编译 APK、追踪引用、读取资源、通过 adb 操作设备、深入分析 Electron 包、.NET 程序集、Go 和 Rust 二进制文件。上游以 rea-agents npm 包的形式发布,通过 stdio 使用 MCP,并要求你自行安装 JDK、JADX 和 Apktool。这个镜像替你完成了这些工作。

这是非官方打包。REA 本身位于 morluto/rea,采用 MIT 许可证。REA 工具中的问题请提交到上游;镜像或 HTTP 桥接中的问题请提交到这里。

目录

镜像包含内容

组件版本用途
REA (rea-agents)6.4.0分析引擎,包含 170 个 MCP 工具
OpenJDK 21 (full)Debian 13REA 使用 jdk.compiler 编译其 JADX 桥接程序;仅有 JRE 不够用
jadx-headless-mcp0.7.1REA 指定的 JADX 桥接 jar,已根据 REA 的 SHA-256 校验
Apktool3.0.3资源和字符串解码
adb34.0.5设备工具;这是 REA 验证过的版本
Node.js24运行 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"

然后向你的 Agent 提出类似这样的问题:“反编译 /work/app.apk 中的登录流程,并告诉我令牌存储在哪里。”路径是容器内的路径:挂载到 /work 的内容就是 REA 能看到的内容。

运行方式

入口点接受一个参数:

命令运行内容
bridge默认值。在 /mcp 上通过 8080 端口提供 Streamable HTTP MCP,需要 bearer token。
mcpREA 自带的 stdio MCP 服务,供仅支持 stdio 的客户端通过 docker run -i 启动。
其他任何值REA CLI,例如 --help 或 inspect-android-package /work/app.apk。
Streamable HTTP 桥接

桥接服务是在 rea mcp 前端运行的轻量 Node 服务。每个 MCP 会话都会启动独立的 REA 进程,因为 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 服务(与容器共享网络命名空间的 sidecar),并设置 REA_JEB_MCP_URL。
  • Hopper 是桌面应用,此处不支持。

配置

变量默认值描述
REA_BRIDGE_TOKEN必需Bearer 令牌,至少 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。日志以 JSON 格式输出到 stdout。
REA_INSTALL未设置启动时要安装的逗号分隔的可选工具。
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}。

安全

REA 可以运行、操控和检测它所分析的软件,并且自身不执行权限检查。容器就是安全边界,因此请严格限制:

  • 桥接服务没有令牌就不会启动,会以恒定时间比较令牌,检查 Host 标头,并且绝不会将令牌交给 REA。
  • 镜像以非特权 rea 用户运行。请按示例中的方式运行:根文件系统设为只读,为 /tmp 和 /home/rea 使用 tmpfs,移除所有功能,启用 no-new-privileges,以只读方式挂载目标,并将端口绑定到 127.0.0.1。
  • /tmp 不能设为 noexec:JVM 会从中加载原生库。
  • 要将其暴露给 localhost 以外的网络?请在前置位置配置 TLS,并将主机名添加到 REA_BRIDGE_ALLOWED_HOSTS。
  • 仅分析你拥有或获准检查的软件。REA 的 免责声明适用。

Agent 集成

  • 面向 Claude Code、Codex 和 OpenClaw 的技能: claude plugin install reverse-engineer-anything@psyb0t、 codex plugin add reverse-engineer-anything@psyb0t,或从 ClawHub 安装。它会向 Agent 介绍 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 包至少发布七天后才会采用,并通过冻结的锁文件安装,且禁用生命周期脚本;每个下载的 jar 都会与固定的 SHA-256 值进行校验。可选工具遵循相同规则:每个镜像版本只采用一个版本,且该版本至少发布七天,并通过其 SHA-256 值进行校验。基础镜像通过摘要固定。

开发

宿主机需要安装 Docker、Make、Git 和 shell。其他所有操作都在容器中运行。

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,然后通过桥接器调用 REA 的 Android 工具,对 Appium 的 ApiDemos APK 进行测试。测试还会启动一个设置了 REA_INSTALL=ghidra 的容器,让 Ghidra 通过桥接器分析一个二进制文件(在 arm64 上则会检查是否拒绝执行)。Ghidra 下载文件会缓存到 rea-integration-tools 卷中;make clean 会将其删除。

许可证

本仓库代码采用 WTFPL 许可证。REA 采用 MIT 许可证,捆绑的工具则保留各自的许可证:详见 THIRD_PARTY_NOTICES.md。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。