☰
把 REA 逆向分析的 token 消耗压下来:给 Agent 的搜索与追踪上三道闸门
2026/10/20 1:20:48 网站建设 项目流程

把 REA 逆向分析的 token 消耗压下来:给 Agent 的搜索与追踪上三道闸门

【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea

让 REA 这类 Agent 做逆向分析时,每步工具调用都会带回一大把二进制事实,REA token 消耗很容易失控。不管住它,账单和上下文窗口都会迅速膨胀。下面这套「三道闸门」,是给逆向分析省 token的可落地做法。

先看钱花在哪

Agent 的 token 几乎只烧在三处。记住这三个口子,后面的闸门才知道拦什么:

消耗点典型表现代价
重复会话同一个目标反复打开、重新导入、重新索引每次都是纯浪费的分析成本
无边界搜索一次全量字符串搜索、一份完整函数清单单条响应就能上万行
不断追加上下文把大段事实反复贴回对话,靠聊天历史"记住"结论窗口持续膨胀

对应地,本文从会话、数据、输出三层各设一道闸门,把花费锁在"回答当前问题所需的最小量"。

第一道闸门:管住会话

会话是成本大头:每次重新打开二进制、重新导入、重新索引,都是白花掉的 token。管住它的办法就两条——先查状态再动手,让结果可复用。

先查状态再动手

动手前,先用binary_session看一眼当前绑定的目标、可用工具和已保留的证据。目标匹配就复用现有会话,别另开一个从头分析;也不要重复执行完全相同的分析。调查收尾时,记得用close_binary关闭原生会话,把 provider 资源及时释放。

让分析结果可复用

snapshot(快照)能把成功的分析结果留存下来:只要目标字节、操作、参数、provider 和配置完全匹配,后续查询直接命中缓存,连 provider 进程都不用启动。

CLI 上用--snapshot指定缓存文件,同一查询重跑即复用已存结果:

rea analyze /absolute/path/to/program --provider ghidra --snapshot /absolute/path/to/analysis/program.json

MCP 侧,open_binary传入snapshot_path可原子导入快照;close_binary时再传snapshot_path和overwrite: true,在释放 provider 资源前把结果存下。

💡实用建议:对同一目标连续问几个不同的问题时,让它们共享同一份快照文件——第二个问题常常零成本命中缓存,直接读上次留存的结果。

第二道闸门:管住数据

会话管住了,数据入口还得收紧:只取回答问题所必需的那一小段。

分页与范围参数

"全量拉取"是最快的烧钱方式。能带范围的调用,一律显式给范围:

  • 读取 keyed archive 时,明确指定root、offset、limit,而不是让整个对象列表涌进来;
  • 值追踪图按节点分页返回边,稳定 ID 保证翻页不丢上下文;
  • 填参数时,用 MCP 的completion拿前缀匹配的标识符建议,直接输入候选,省掉"先 list 全量、再肉眼挑"的来回。

原则就一句:有offset/limit可用,就别裸调。

给追踪设预算

跨函数追踪最容易失控。trace_native_values这类操作内置了budget:深度、反编译次数、调用点解析数、节点与边数量都可以预算控制;同时有硬边界兜底——节点负载上限8 MiB,序列化结果上限32 MiB。被省略的部分会显式计数,而不是悄悄截断。

用法:预算从保守值起步,证据出现具体缺口再扩大。结果里出现"已省略 N 项"时,先判断这些项是否与问题相关,再决定是否调大,别默认一扩了之。

摘要优先,分级深入

从默认摘要开始,是省 token 的工作流核心:

  1. 先用最小可用的 overview / inventory,读返回的内联 Evidence,而不是直接上全量反编译;
  2. 围绕一个具体假设批量发起相关操作,只有证据留下明确缺口时才扩展;
  3. 每次扩展都让 token 花费跟着问题走,而不是跟着整个二进制的表面积走。

第三道闸门:管住输出

取数管住了,产出端还有两处容易泄:靠聊天历史"记住"结论,以及把否定搜索越放越大。

结论台账(finding ledger):每得出一个结论,就记一条台账——结论关联 Evidence ID、当时的搜索边界、以及仍未解的疑问。后续步骤直接引用台账条目,而不是回翻聊天记录重新粘事实。台账让 Agent 的"记忆"从无限增长的上下文里搬出来。

有界否定搜索:确认"某功能不存在"的搜索同样要收口。达到预设边界还没有命中,就停止并如实记录"在该边界内未找到",而不是无限扩大搜索范围。否定结论的价值来自明确的边界,来自穷尽整个地址空间。

自查清单

调查前扫一遍这张表,把动作固化成习惯:

场景该做的动作
第二次针对同一目标提问先查binary_session状态,复用会话与snapshot
读取大块数据显式给root/offset/limit,按需翻页
做跨函数值追踪从小budget起步,出现明确缺口再扩大
得出新结论写入结论台账:Evidence ID + 搜索边界 + 未解疑问
做否定搜索确认边界后停止,记录"边界内未找到"
调查结束close_binary关闭会话,释放 provider 资源

会话、数据、输出,三道闸门层层设防:该复用的不复算,该有界的不裸调,该记台账的不贴上下文。把 token 花费锁在问题本身,逆向调查才又快又省。更多细节,见 CLI 参考、MCP 契约 与 逆向调查。

【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询