打开一个应用。深入骨髓地读懂它。
[!NOTE] Marrow(原名 REA Studio)是一个独立项目。REA 的作者并未参与制作,也不为其背书。 Marrow 运行的是你自行安装的 REA,并不自带副本。请从 morluto/rea 或 rea-agents npm 包获取 REA。
Marrow 是一款面向 macOS、Windows 和 Linux 的逆向工程应用,基于 REA 构建。REA 通过其 MCP 服务器完成分析。Marrow 为 逆向工程师提供了他们期望的窗口:包含反汇编的 Listing、反编译器、函数图、符号树、字节、字符串、引用、书签和搜索,布局方式与许多人已经熟悉的经典 CodeBrowser 一致。
原生二进制文件在该 CodeBrowser 中打开。Apple 捆绑包、Electron 应用、网页、Android APK、 .NET 程序集、固件、数据包捕获和版本比较各自拥有独立的窗口,而 REA 工具窗口会列出每一个 REA 工具,并为每个工具提供对应的表单。
屏幕上的一切都来自 REA 的应答,以及 REA 所报告的证据和局限性。Marrow 本身不解析文件,当工具失败时,它会显示 REA 返回的错误。分析在你自己的计算机上运行。
你可以通过两种方式将 Claude 引入同一会话。将你自己的 Anthropic API 密钥粘贴到 AI 聊天中,在 Marrow 内与 Claude 对话;或者开启 AI 中枢,连接 Claude Code、Claude Desktop 或任何其他 MCP 客户端。无论哪种方式,Claude 都能运行 REA 的工具、移动视图、重命名 函数、添加注释和书签,而你可以全程观看,并且 Marrow 会在任何内容离开分析环境之前向你确认。
从最新版本获取适用于你系统的安装程序:
Mac 使用 DMG(Apple Silicon 或 Intel),Windows 使用 .exe 安装程序,Linux 使用 AppImage 或
.deb。它们尚未签名,因此系统会在你首次打开 Marrow 时发出警告;
发行说明中说明了如何绕过该警告。
npm install --global rea-agents。它需要 Node.js 22.23.4+、24.22.1+ 或 26.12.1+。rea doctor --provider ghidra 会告诉你 REA
能否使用它们。Marrow 会在人们通常放置它们的位置查找 Ghidra(Mac 上的 ~/Applications,
Windows 上的主文件夹或 C:\,Linux 上的主文件夹或 /opt),并在
Homebrew、Program Files 或 /usr/lib/jvm 中查找 JDK 21。工具选项 > REA 引擎可让你将其指向
其他位置。当 Marrow 启动时,Getting Started 会检查 REA、Ghidra 和 Java,并告诉你如何获取缺失的部分。Help > Contents 可随时再次打开它。
git clone https://github.com/utabk/marrow.git
cd marrow
npm install
npm run dev
/bin/ls,或
Windows 上的 C:\Windows\System32\notepad.exe。对于通用 macOS 二进制文件,Marrow 会询问要分析
哪种架构。entry)。在 Listing 或
Decompiler 中双击某个名称以跟随它,按 ⌥←(Windows 和 Linux 上为 Alt+←)返回。要在 Marrow 内聊天,请打开 Window > AI Chat,点击 API Key,然后粘贴来自
Anthropic Console 的密钥。你也可以在启动 Marrow 之前设置
ANTHROPIC_API_KEY。密钥使用你系统的密钥存储(macOS Keychain、
Windows 的 DPAPI,或 Linux 上的 GNOME Keyring 或 KWallet)加密存储,且只有 Marrow 的主进程会读取它。
在聊天顶部的菜单中选择 Claude Opus、Sonnet 或 Haiku。
要使用你已有的 agent,请打开 Window > AI Hub 并开启服务器。该窗口会显示
Claude Code 需要运行的命令(claude mcp add marrow -- …)以及要粘贴到
Claude Desktop 配置中的代码块。该 hub 监听本地套接字(Windows 上为命名管道),并且在
任何 MCP 消息之前,Marrow 和连接器各自证明自己知道保存在你 Marrow
配置文件中的密钥,因此没有其他程序可以冒充其中任何一方。它不需要在 Marrow 中设置 API 密钥。
你打开的每个程序都会获得自己的 rea mcp 进程,因为 REA 每个
连接只保留一个打开的目标。Marrow 的主进程通过 stdio 上的 MCP 与这些进程通信。各窗口
通过一个小型类型化桥接从主进程获取数据,自身从不接触文件或进程。
REA 为原生代码运行无头 Ghidra,并在需要时调用其他工具
(Mac 上的 otool 和 codesign、adb、JADX、浏览器),然后将每个结果连同其
证据一起发回。AI Chat 和 AI hub 通过同一个主进程访问 REA,并经过相同的检查。
flowchart LR
subgraph marrow["Marrow"]
windows["Windows<br/>Listing, Decompiler, Function Graph,<br/>Security, REA Tools, AI Chat"]
main["Main process<br/>one REA session per open program"]
hub["AI hub"]
windows <-->|"typed bridge"| main
hub <--> main
end
you(["You"]) --> windows
agent(["Your AI agent<br/>Claude Code, Claude Desktop<br/>or any MCP client"]) -->|"MCP over a local socket"| hub
main <-->|"Anthropic API, with your key"| claude(["Claude"])
main <-->|"MCP over stdio"| rea["rea mcp<br/>229 tools"]
rea --> ghidra["Ghidra, headless<br/>native analysis"]
rea --> more["Other programs REA drives<br/>otool, codesign, adb, JADX,<br/>WABT, Chrome"]
| 你打开的内容 | 它在 Marrow 中显示的位置 | 你需要什么 |
|---|---|---|
| 原生二进制文件(Mach-O、ELF、PE) | CodeBrowser:Listing、Decompiler、Function Graph、调用树、Symbol Tree、Bytes、字符串、引用、书签,以及针对 Mach-O 的 Security 窗口 | Ghidra 12.1.4 和 JDK 21 |
| Apple 应用和 bundle | Apple Bundle Inspector:代码签名、Objective-C 和 Swift 元数据、Info.plist、nib、资源目录、崩溃报告 | 装有 Xcode 或其命令行工具的 Mac |
| JavaScript 和 Electron 应用 | JS/Electron Inspector:来自 ASAR 或文件夹的应用图、Electron fuses、实时 Node 和 Electron 目标 | 无需额外内容 |
| 网站 | Web Capture:通过 Chrome 远程调试端口访问的实时页面、REA 的浏览器场景、HAR 文件 | Chrome 系浏览器 |
| 归档文件、安装程序、PE 和 ELF 详细信息、SQLite | Artifact Inspector | 无需额外内容 |
| Android APK 和设备 | Android | 取决于所用工具,需要 JADX、Apktool 或 adb |
| .NET 程序集 | .NET Assembly Browser | 无需额外内容 |
| WebAssembly | WASM Inspector | WABT 1.0.42 |
| 固件、逻辑分析仪记录、EVM 字节码 | Firmware & Signals | Binwalk 或 Unblob 以及 sigrok,REA 仅在 Linux 上运行它们 |
| 网络抓包 | Packet Capture | TShark,REA 仅在 Linux 上运行它 |
| 同一事物的两个版本 | Version Compare | 无需额外内容 |
| 正在运行的进程 | Debug Sessions:LLDB、Rizin、Frida 和 Cutter,以及在 Linux 上的 GDB | 你选择的调试器。Marrow 在每次运行前都会询问。 |
| REA 能做的其他任何事情 | REA Tools:全部 229 个工具,每个工具都有一个根据其输入 schema 构建的表单 | 取决于该工具 |
Tool Options > REA Engine 会显示 Marrow 运行的是哪个 REA,以及它在何处找到每个外部程序
(在 PATH 中,或在你系统的常规位置)。在文件对话框中另选一个,然后
按 Restart REA。Marrow 会将这些路径作为 REA_* 设置传递给 REA:
| 程序 | 用途 | 在 macOS 上安装 |
|---|---|---|
| adb | Android 设备 | brew install --cask android-platform-tools |
| Apktool | Android 资源 | brew install apktool |
| jadx-headless-mcp 0.7.1 JAR | Android 类 | 参见 REA 的 docs/android-analysis.md(校验和固定的下载) |
| WABT 1.0.42 | WebAssembly | brew install wabt |
| GNU objdump | objdump 视图 | brew install binutils |
| Rizin | Rizin 命令 | brew install rizin |
在 Windows 和 Linux 上,请使用你常用的包管理器或从各项目网站安装; Marrow 会在 PATH 中找到它们。
你也可以选择一个 REA 检出目录的 CLI 脚本(scripts/rea.mjs)作为要运行的 REA。当该
REA 为已打开的程序提供更新的工具时,例如任意地址的注释和书签或
彩色反编译器 token,Marrow 会使用它们。
打开每台 Mac 都自带的计算器,你会看到它的入口点只有四行:两个
设置调用和 SwiftUI 的 App.main()。REA 找到 7,594 个函数、并排的 Swift 和 Objective-C 元数据,
以及 84 个 Objective-C 类。
如果你在有趣的东西上用过 Marrow,请在 Discussions 中分享,并附上目标、你在 寻找什么以及你发现了什么。
这些截图是在一台装有 REA 6.8 检出目录的 Mac 上拍摄的,该版本增加了两个工具,这就是为什么状态 栏显示 231 而不是 229。
/bin/ls 位于 entry:左侧是带有反汇编的 Listing,旁边是反编译的 C 代码,以及
程序的节和符号。
任何人都可以在这里粘贴自己的 Anthropic API 密钥,选择一个 Claude 模型,然后开始询问 已打开的程序。Claude 会使用与你相同的 REA 工具,并可以在过程中移动视图。