资讯动态

REA 逆向实战指南:AI Agent 如何靠 3205 个测试用例重建 DX-Ball 的 63 字节函数

发布时间:2026/10/15 3:06:03 来源:尧图企业网站定制
REA 逆向实战指南AI Agent 如何靠 3205 个测试用例重建 DX-Ball 的 63 字节函数【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea63 字节的函数凭什么要接受 3205 场考试这个问题的背后是 REA——一款为 AI Agent 打造的逆向分析工具——在 1996 年 Windows 游戏 DX-Ball 上跑通的一次真实案例没有一行原始源码AI Agent 靠证据反推写出一个与原版机器码逐字节吻合的 6 行 C 函数。实验对象与工具链158,208 字节可执行文件里的 63 字节函数本次案例的五组数据项目内容分析目标DXBALL.EXEDX-Ball 1.071996 年经典打砖块游戏158,208 字节 Windows i386 可执行文件工具版本REA 4.1.0 Ghidra 12.1.4 Provider聚焦函数0x406400起、63 字节的声音平衡函数验证方式3,205 个原始 x86 差分测试用例 锁定版 VC4.0 编译器回放字节比对项目进度55 个已维护 C 函数、45,380 次与原始代码对比、33 个通过字节匹配游戏的源码早已失传重建项目要的不是能跑起来的产物而是可长期维护的 C 代码每个函数都要有二进制层面的可核对依据和原版一样由测试给出证明而不是口头声明。REA 支持 Ghidra、Hopper、IDA 等多个 Provider。上图是 Agent 深入分析目标时的典型画面左边是指令级反汇编右边是函数、段与调用约定信息整个过程会被持续记录。三条线索锁定一个丢失的入参从反编译器盲区到 6 行函数Agent 对0x406400做函数分析时反编译器给出的是一段无参数伪代码中间还夹着一个来路不明的__ftol()调用。一个不接收参数的函数却在做强转长整型的浮点运算——这正是反编译器的盲区也是后续取证工作的起点。Agent 分三步补齐了盲区从指令视图找回输入。指令级视图里躺着MOV EAX,[EBP0x8]FILD说明函数实际带一个整型入参记作x伪代码把它弄丢了。向调用方确认输入语义。0x411f40砖块命中函数在发起调用前先把砖块的格子坐标乘 30、再加 20——由此反推x就是砖块的屏幕横坐标即20 30 × tile_x。读取内存地址背后的数值。用read_bytes读出三处数据地址并按双精度浮点解码0x420068→1.5625、0x420070→500.0、0x4210a0→1.0后者正是存盘比例系数dxball_pan_scale。证据到位后Agent 把它翻译成 6 行可维护的函数DxBallInt dxball_screen_pan(DxBallInt x) { double pan; pan (double)x; pan pan * 1.5625; pan pan - 500.0; pan pan * dxball_pan_scale; return (DxBallInt)pan; }数字本身也站得住脚比例取 1 时画面左缘对应 -500、中心对应 0、右缘对应 500恰好是标准立体声声像的取值范围。两层一模一样3205 次逐条对账与 63 字节回放写完代码只是起点验证才把猜测与证明分开。这个案例走了两条互相独立的验证路径。差分测试怎么设计541 × 5 组合行为层最直观给横坐标和比例系数比对返回值。它的覆盖面接近全量遍历——横坐标取整数 0 到 640覆盖整个屏幕宽度比例系数取 0、0.5、1、20、−1 五档极端值也在其中。两者交叉得到 541 × 5 2,705 组再加上边界与中间态用例合计3,205个。每一个输入都把 C 实现的返回值与原始 x86 函数的返回值直接对比任何一处对不上测试立刻失败。字节层怎么回放锁定版 VC4.0 编译字节层回答的是另一个问题同一份 C 函数用当年同款编译器编译产出的机器码与原始函数是否一致答案是一致的63 字节全部吻合。验证分支做法结果 行为差分直接执行原始 x86 函数与 C 实现逐条比对返回值3,205 个用例全部通过 编译器回放锁定版 VC4.0 工具链编译 C 函数逐字节比对可执行文件63 字节完全匹配⚖️ 字节匹配是在应用了审阅过的重定位、并核对所引用的常量之后才成立的这同时说明分析阶段用到的常量地址都有可回溯的出处。结论的适用边界绑定 commit a55dca27 与单一函数调查的结论只在证据范围内有效。本案例的全部数字都绑定在重建项目固定的分析检查点 commita55dca272026-10-07上且只覆盖0x406400这一个函数。⚠️ 3205 个用例通过 63 字节匹配不等于整款游戏已复原。游戏级集成是独立的任务线引用或复用本案例时请连同检查点与函数范围一起注明。两步复现路径装好 REA再打一个函数快照先装工具克隆仓库https://gitcode.com/GitHub_Trending/rea2/rea按 docs/installation.md 完成安装并连接一个 ProviderGhidra、Hopper 或 IDA 均可。再对目标函数存一份快照DX-Ball 项目中实际执行的就是这一条命令rea function original/DXBALL.EXE 0x00406400 --snapshot .analysis/rea/dxball.snapshot.json --json 命令产出的是 JSON 快照Agent 随后基于其中的指令视图、调用方信息与常量读取结果继续补齐证据再用普通代码工具写出 C 实现并完成测试。本案例涉及的全部资料都放在仓库里docs/installation.md安装与 Provider 连接docs/native-investigation.md原生二进制深度调查指南指令/调用/类型原语、值追踪docs/ghidra-dos.mdGhidra Provider 使用文档README DX-Ball: game reconstruction 一节官方案例说明website/evidence/dx-ball-sound-pan.md本案例完整证据清单含逐条指令列表与 Evidence IDwebsite/public/showcase/dx-ball/index.html可交互案例页Checking the recovered function 一节即验证细节这个案例留下的是三条可以直接挪用的经验用证明代替猜测3,205 次对账代替主观判断63 字节的回放代替编译器应当给出相同代码的假设每行重建代码都有可回溯的出处地址、Evidence ID、固定检查点 commita55dca27全部落在证据清单里同一流程可复制到任意二进制REA 检查函数、恢复状态与依赖、写 C、与原始 x86 逐条对账一个字节一个字节地推进。【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑