Files
reverse-engineering-anything/docs/readme/README_zh.md
T
ca4ca65c5e feat(pe): inspect Authenticode certificate tables (#4830)
* feat(pe): inspect Authenticode certificate tables

Add inspect_pe_certificates for IMAGE_DIRECTORY_ENTRY_SECURITY
WIN_CERTIFICATE entries and structurally decoded PKCS#7 signer
and X.509 identity fields. The workflow reads a stable PE image
without executing it or verifying signatures, chains, timestamps,
or Authenticode digest coverage.

* fix(pe): bound and validate certificate DER decoding

- Cap decoded DER values with a shared node budget so sibling fan-out
  cannot exhaust memory before the PKCS#7 check
- Require SignedData version, encapContentInfo and a final signerInfos
  SET in RFC 5652 order, and a signature OCTET STRING in each SignerInfo
- Decode OBJECT IDENTIFIER arcs as unbounded base-128 values, including
  a multi-byte first combined arc
- Decode UniversalString names as UTF-32BE and reject invalid values
- Share PE header admission with the resource layout so a section table
  that does not fit SizeOfHeaders is rejected

* docs: list PE certificates in the translated READMEs

* fix(pe): cap OBJECT IDENTIFIER length and arc size

A crafted type-2 certificate with a 262,144-byte contentType OID stalled
decodeOid for about 20 seconds, because one arc kept growing a BigInt
before the signedData check ran. decodeOid now rejects an OID longer than
256 bytes and an arc longer than 32 bytes before decoding it. Certificate
OIDs, including 2.25 UUID arcs, fit under both caps.

* fix(pe): reject truncated certificate tables and PKCS#7

SignedData now requires one SignerInfo with a non-empty signature and a
complete issuerAndSerialNumber. Certificate names share a 64 KiB decoded-byte
budget and are copied once. A security directory that ends in a short
WIN_CERTIFICATE header fails instead of reporting a complete table. The
certificate CLI forwards the caller abort signal into cleanup.

Co-authored-by: morluto <morluto@users.noreply.github.com>

* chore(ci): keep fork workflow files unchanged

The certificate restack follows current main. Workflow files stay at the
fork tip so this branch update does not rewrite .github/workflows.

Co-authored-by: morluto <morluto@users.noreply.github.com>

* fix(pe): charge serial and validity text to the decoded budget

Certificate and signer serial numbers and validity times now count against
the shared decoded-text budget before they are converted, so a crafted
certificate cannot push megabytes of text into the hashed evidence. The
budget error now names certificate text rather than only names.

Restore the CI workflow to match main: the CI_TIMING_TIER input, the
tier-named timing artifacts and their publication conditions, the Windows
typecheck, and the path and snapshot suites in the curated Windows lane.

* fix(pe): require certificate fields and preserve signer key ids

Reject X.509 records that omit subjectPublicKeyInfo or signatureValue,
return subjectKeyIdentifier bytes as bounded hex, and advertise an absolute
path in the PE certificate input schema.

Co-authored-by: morluto <morluto@users.noreply.github.com>

* fix(pe): reject extra PKCS#7 wrappers and invalid UTF-8 names

ContentInfo and its signedData wrapper no longer ignore trailing values, and
directory strings must round-trip as UTF-8 instead of becoming U+FFFD.

Co-authored-by: morluto <morluto@users.noreply.github.com>

---------

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: morluto <morluto@users.noreply.github.com>
Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>
2026-10-22 17:20:07 +08:00

21 KiB
Raw Blame History

English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Türkçe · Русский · Tiếng Việt · ไทย · Deutsch · Español · Français · Українська · Polski · Português (Brasil) · العربية · فارسی · Bahasa Indonesia · Italiano · Ελληνικά · മലയാളം

REA:逆向一切

通过一个 MCP 服务,逆向分析二进制文件、应用程序和运行时行为。

看到喜欢的功能,弄清它的工作原理,深入到二进制层面。

npm version MCP tool catalog Node.js requirements skills.sh MIT license Discord

morluto%2Frea | Trendshift

网站 · 指南 · 案例

快速开始 · REA 的工作原理 · 可以分析什么 · 案例 · 常见问题 · GNU objdump 和 Rizin 工具 · 文档

npx rea-agents setup

Important

REA 官方来源: morluto/rea, rea.tools, rea-agents (npm). 请通过这些官方来源提供的安装和发布链接获取 REA。相似的仓库名称或复制的 README 不能证明下载内容来自官方。


REA 在 Hopper 中启动分析桥,检查原生二进制文件



Discord
加入逆向工程社区

Discord · 问答 · 成果分享


在应用中看到一个想加入自己产品的功能?让智能体用 REA 调查它。即使没有源代码,智能体也可以检查应用、解释功能的工作方式、展示证据,并为你的项目实现类似功能。

REA 将智能体连接到分析工具,用于检查原生二进制文件、JavaScript 和 Electron 应用、.NET 程序集以及网站。你也可以在终端中使用同样的工具。分析在本机运行,结果包含支撑各项结论的证据和相关限制。

设置流程会向智能体注册 REA,并安装匹配的工作流指引。原生分析可以使用已有的 Hopper、Ghidra 或 IDA;设置流程也可以在你批准后安装 Hopper。静态 JavaScript 分析不需要原生分析引擎。

访问 REA 网站,查看设置说明、图解指南和真实案例。

快速开始

设置智能体

安装 Node.js 和 npm 后,运行:

npx rea-agents setup

选择智能体,检查计划中的变更并批准。设置流程会添加 REA 的 MCP 服务和匹配的工作流指引,并备份已有配置。完成后重启智能体。

设置流程支持 Claude Code、Codex、Cursor、Gemini CLI、Grok Build 和其他智能体。提供方配置和手动注册 MCP 的方法见安装与设置。

询问智能体

弄清 Notes 应用的搜索功能如何工作,展示证据,并为我的项目实现类似功能。

把 Notes 替换为目标应用,并描述你想了解的功能。

使用终端

检查已解包的 JavaScript/Electron 应用目录或 ASAR 文件:

npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json

结果包含模块、导入、Electron 边界及相关证据。将路径替换为你的目标路径,例如 Windows 上的 "D:/apps/example"。

如果需要经常使用,可以安装 rea 命令:

npm install --global rea-agents
rea --help

原生分析需要先配置分析提供方。原生命令、提供方选择、快照和脚本用法见 CLI 与 Evidence 指南。

更新 REA

REA 更新较快,新版本经常包含错误修复。请保持安装的版本为最新。

通过 npm install --global 或 bun add --global 安装的 CLI 使用:

rea update

Bun 全局更新需要 Bun 1.2.17 或更高版本。如果使用较旧的 Bun 版本,请先手动升级 Bun,再运行 rea update。

要更新智能体注册和 skill,请运行更新命令输出的设置命令。

如果使用 npx,通过以下命令更新智能体设置:

npx rea-agents@latest setup

检查设置变更并重启智能体。单次 CLI 操作可使用 npx rea-agents@latest,后接所需命令。使用 Bun 时,用 bunx rea-agents@latest 代替 npx rea-agents@latest。

REA 的工作原理

智能体通过 MCP 调用 REA,检查目标并追踪相关代码。REA 返回发现及对应证据。智能体据此提出后续问题、解释行为,或编写并测试实现。CLI 命令使用同样的工作流。

REA 调查流程:智能体询问本地目标的行为,REA 使用分析工具检查和追踪目标,智能体再利用返回的代码、引用和未知项进行解释、实现与测试。

打开完整尺寸的图示。

可以分析什么

REA 需要 Node.js 22.x(>=22.19)、24.x(>=24.11)或 26+,以及 npm。额外工具和主机支持取决于分析目标:

目标 REA 返回的内容 要求与指南
原生二进制文件 伪代码、汇编、字符串、符号、调用和引用 Hopper、Ghidra 或 IDA;原生分析
离线 ELF 布局 节、段、原始符号/重定位信息及静态防护机制候选项 Linux x64 上由调用方提供的 pwntools;二进制诊断
Go 二进制文件 内嵌编译器版本、模块、替换项和构建设置 内置静态 ELF/PE/thin Mach-O 检查;无需安装 Go
WASM 工件 验证、节、精确的导入/导出 WAT 形式及解码后的 WAT 调用方提供的 WABT 1.0.42;inspect_wasm_artifact
EVM 字节码 分派选择器、字节偏移、推断的参数和状态可变性 Linux x64 上的本地原始字节/十六进制输入载体;离线 EVM 指南
Rust binaries Embedded cargo-auditable dependency list Rust binaries
PE certificates Authenticode WIN_CERTIFICATE entries and PKCS#7 signer/X.509 identity fields Built-in static PE inspection; PE certificates
ELF notes PT_NOTE/SHT_NOTE owners, types, GNU build-id and ABI-tag fields Built-in static ELF inspection; ELF notes
已记录的 Linux 崩溃 原始 note 记录、每个已记录线程的寄存器/信号及可选的映射候选项 Linux x64 上由调用方提供的 pwntools;可选的 GDB/pwndbg;已记录崩溃
桌面安装目录 运行时候选、支持文件、组件标记和后续操作 有界的目录与文件头检查;桌面应用
JavaScript / Electron 模块、导入、source map、路由、IPC 和原生扩展关系 Node.js 和 npm;应用分析
网站 页面结构、脚本、网络观察结果和按请求获取的截图 Chrome 系浏览器;浏览器分析
已保存的网络捕获 请求、响应、可访问的载荷和来源位置 HAR;原生 mitmproxy 捕获需要 Linux 上的 mitmdump;捕获指南
数据包捕获 端点、DNS、TLS SNI、协议分布和 HTTP 请求 调用方提供的 tshark 和 capinfos;pcap 指南
.NET 程序集 元数据、CIL 指令、声明的原生依赖和构建对比 静态检查;托管代码指南
PyInstaller CArchive, PYZ, Python bytecode Static inspection; Python packaged applications
Android APK 清单声明、类、反编译的方法和引用 Linux/macOS/Windows x64 上的无界面 JADX 和完整 JDK;Android 指南
Android 设备 设备、软件包、进程、日志、转储、屏幕截图以及 APK/文件传输 调用方提供的 adb(模拟器或实体设备);ADB 指南
JEB 项目 引擎支持的项目单元、工件摘要和类型/方法的伪代码 由调用方启动、提供 MCP 的 JEB 客户端,通过 REA_JEB_MCP_URL 选择;JEB 指南
Android 资源 解码后的清单、字符串表、语言区域和版本信息 调用方提供的 Apktool 启动器;资源指南
Flutter 应用 Dart 快照哈希、按 ABI 的库摘要及引擎构建溯源 无(静态 APK 解析);Flutter 指南
固件 区域、提取结果和转交原生分析的内容 Linux 上的 Binwalk / Unblob;固件指南
抓包文件 指定字段、重复值、过滤条件与解码规则 Linux: TShark 4.x + prlimit; 抓包分析指南
录制的逻辑信号 解码注释、样本范围和诊断信息 Linux: sigrok-cli 0.7.2 + prlimit; 信号记录指南
软件包与资源 文件清单、摘要、plist、Apple bundle 结构和提取的资源 制品与 JavaScript 指南、Apple 应用
进程行为 终端输出、交互、退出和文件系统观察结果,以及运行对比 支持原生 PTY 的 Linux/macOS;进程捕获

静态 JavaScript 和 .NET 检查读取提供的文件,不运行应用。运行时捕获会以你的用户权限运行目标或与之交互;各运行时指南说明了具体影响。

不同提供方支持的原生格式和主机系统有所不同。请参阅 Hopper 与 Ghidra 设置、IDA 指南、Kuna和实验性 Windows Ghidra 支持。Ghidra 也支持 16 位 DOS 分析。提供方选择见 CLI 指南。对于最新 npm 版本发布后新增的功能,请查看发布可用性。

案例

DX-Ball 声音平移、Notion 剪贴板桥接与 TH04 弹幕环案例的插图

DX-Ball:重建声像计算

沿声音调用追踪到根据位置计算声像的辅助函数,检查指令,将不完整的伪代码转为 C。重建结果通过了 3,205 个原始 x86 测试用例,并复现了编译后函数的全部 63 个字节。

阅读案例 · 重建项目仓库

Notion:追踪 Electron 剪贴板桥

找到渲染进程的剪贴板 API,沿 preload 和 IPC 追踪到主进程,并检查富格式剪贴板数据。

阅读案例

TH04:恢复 DOS 环形子弹的计算

检查原始 PC-98 游戏的 16 位指令,恢复固定角度和瞄准角度的计算,并将重建的 C++ 与当年的编译器输出进行对比。

阅读案例 · 重建项目仓库

如果你用 REA 分析了有趣的目标,我们很想了解。欢迎通过 issue 或 pull request 分享案例,说明目标、你的问题、REA 如何提供帮助,以及你的发现。

常见问题

哪些智能体可以使用 REA?

任何支持本地 MCP 服务的智能体都可以使用。设置流程会配置受支持的智能体;其他客户端可通过手动注册 MCP 使用。

需要 Hopper、Ghidra 或 IDA 吗?

深入的原生分析需要其中一个引擎。静态 JavaScript 和 .NET 检查不需要原生分析引擎。设置流程可以在你批准后安装 Hopper;Ghidra 和 IDA 则使用已有安装。见提供方设置。

需要先启动 Hopper 吗?

REA 会在操作需要时启动 Hopper。在 macOS 上,首次运行时可能会出现对话框,让你选择演示模式或激活许可证。见 Hopper 启动与故障排查。

从 skills.sh 安装 skill 有什么作用?

skill 为智能体提供调查指引。使用 npx rea-agents setup 注册 REA 的 MCP 服务并安装匹配的指引,然后重启智能体。见仅安装 skill。

REA 返回什么代码?

原生分析返回伪代码和汇编。JavaScript/Electron 分析恢复模块及其关系。智能体利用这些发现编写并测试实现;案例提供了完整示例。

REA 会上传我的应用吗?

REA 在本机分析目标。智能体会接收工具结果,其模型提供商有自己的数据政策。

遇到错误时该怎么办?

先更新;最近的版本可能已经修复了问题。

通过 npm 安装的 CLI 使用:

rea update

通过 npx 设置智能体时使用:

npx rea-agents@latest setup

如果正在使用智能体,请完成设置更新并重启智能体。重试同一任务。如果问题仍然存在,请提交 issue,附上 REA 版本、目标类型、复现步骤和错误输出。

文档

可以先阅读网站上的实操指南。具体选项、前提条件和结果契约见:

请按照 SECURITY.md 报告漏洞。

Star 历史

🎉 GitHub Star 达到 300,000 个,感谢大家!

感谢每一位使用 REA、报告错误、提出功能需求、测试构建和贡献修复的朋友。

REA 的 GitHub Star 历史

免责声明

负责任使用的相关指引请见 DISCLAIMER.md。

REA 用于合法的研究、教育、互操作性、软件保存,以及分析你拥有或获准检查的软件。

本项目对非法或未经授权使用的立场涵盖所有 REA 版本、分发渠道和运行平台; 每份副本仍适用其随附的许可。

参与贡献

欢迎帮助改进 REA!你可以提交 issue 报告错误或建议功能,也可以提交 pull request 改进代码或文档。

开发设置和检查见 CONTRIBUTING.md,验证流程见测试指南,项目结构见架构图。

许可证

MIT

REA 自行编写的代码采用 MIT 许可;第三方内容保留各自的许可和著作权声明。 依赖清单、许可原文及外部工具条款见第三方声明。

用户须自行合法取得商用工具及所需使用权,包括 IDA Pro / Hex-Rays 反编译器、 Hopper 和 JEB,并遵守各自许可。REA 不提供工具许可、密钥或激活权利;试用版和 演示版也须遵守厂商对用户、功能、自动化及输出分享的限制。不得使用破解副本、 窃取或违规共用密钥,也不得绕过许可限制。本指引不变更 MIT 或第三方许可。