REA引擎选择三法:--provider参数、provider_id与REA_ANALYSIS_PROVIDER环境变量
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
REA 是一款「万物皆可逆向」的分析框架,能够从应用行为一路追踪到原生二进制。它内置了 Hopper、Ghidra、IDA 等多个深度分析引擎,而如何选择分析引擎正是新手最容易卡住的环节。好消息是:REA 提供了三种简洁的引擎选择方式——--provider命令行参数、MCP 的provider_id字段,以及REA_ANALYSIS_PROVIDER环境变量,三者优先级清晰、互不冲突。本文将带你用最少的心智负担掌握全部三种用法。
为什么需要手动选择分析引擎?
如果你只安装了 Hopper 一个引擎,REA 的自动模式(auto)会直接帮你选上,无需任何配置。但当你同时安装了 Hopper 和 Ghidra 时,多个引擎都能处理同一个目标,自动选择就无法确定该听谁的。
此时 REA 不会"猜",也不会静默回退,而是直接报错并列出候选引擎,要求你显式指定。报错信息非常直白:
Multiple analysis providers support this target. Choose one with provider_id, --provider, or REA_ANALYSIS_PROVIDER.
这三条提示恰好对应本文要讲的三种选择方式。该错误提示的完整定义见 src/domain/providerSelectionError.ts。
三种引擎选择方法详解
方法一:CLI 的--provider参数(优先级最高)
在命令行执行分析时,直接追加--provider <引擎ID>,适合"这一次就想用某个引擎"的场景。常见引擎 ID 为hopper、ghidra、ida,例如:
rea analyze /absolute/path/to/program --provider ghidra --json rea function /absolute/path/to/program main --provider hopper --json--provider是单次调用的显式绑定,优先级最高,会覆盖环境变量中的全局设置。官方 CLI 文档中给出了analyze、search、decompile、xrefs、trace等命令的完整示例,见 docs/cli.md。
方法二:MCP 会话的provider_id字段(AI 场景专用)
如果你通过 MCP 协议接入 REA(比如让 AI Agent 驱动逆向),则在open_binary工具的参数中传入provider_id:
{ "path": "/absolute/path/to/program", "provider_id": "hopper" }关键特性是会话级稳定绑定:选定后,该引擎会一直绑定到当前会话,直到你显式切换或关闭二进制为止,不会中途更换,保证分析结果前后一致。参数说明见 src/contracts/sessionToolContracts.ts。
方法三:REA_ANALYSIS_PROVIDER环境变量(全局默认偏好)
如果你长期只使用某个引擎,最省事的方式是设置环境变量,让所有未显式指定的命令都默认走它:
# Linux / macOS export REA_ANALYSIS_PROVIDER=ida # Windows PowerShell $env:REA_ANALYSIS_PROVIDER = 'ida'该变量未设置时默认为auto(自动选择),合法取值校验逻辑定义在 src/config/environment.ts。IDA 引擎的完整配置流程(含 MCP 注册与生命周期模式选择)可在 docs/ida-provider.md 中参考。
优先级排序与 auto 自动模式
三种方式的优先级关系一句话概括:
| 优先级 | 方式 | 作用域 | 适用场景 |
|---|---|---|---|
| 1(最高) | --provider参数 | 单次 CLI 命令 | 临时切换、调试对比 |
| 1(最高) | provider_id | 单个 MCP 会话 | AI 驱动分析 |
| 2 | REA_ANALYSIS_PROVIDER | 全局环境 | 长期固定的主力引擎 |
| 默认 | auto | 全局 | 只装了一个引擎 |
auto是保留字,专门用于自动选择,不能作为引擎 ID 使用;引擎 ID 本身只允许小写字母、数字和连字符(以字母开头),这一约束定义在 src/contracts/providerSelection.ts。这套"显式绑定、无静默回退"的设计决策背景,可在架构决策记录 docs/adr/0001-provider-selection-and-analysis-profiles.md 中阅读。
选错引擎怎么办:错误排查小贴士 🩺
ambiguous(选择歧义):多个引擎都能处理目标。从报错的details.candidate_ids中挑一个,用上面三种方式之一显式指定即可。unknown_provider(未知引擎):引擎 ID 写错了,报错会直接列出当前可用的候选 ID。provider_unavailable(引擎不可用):引擎本身没装好或启动失败,运行rea doctor --provider ID --json可以定位到具体的本地问题。- 想先看看自己装了哪些引擎、各自支持什么操作?执行
rea providers --json或rea capabilities --json一目了然。
相关资源
- CLI 完整用法:docs/cli.md
- 引擎选择架构决策:docs/adr/0001-provider-selection-and-analysis-profiles.md
- 选择逻辑源码:src/domain/providerSelectionError.ts、src/config/environment.ts
掌握这三种选择方式后,无论是一时的命令行调试,还是让 AI 长期稳定地驱动逆向分析,你都能对 REA 的分析引擎做出清晰、可预期的控制。
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考