夜雨聆风学习资料网

ARTICLE · 1149496

装上它,你的 AI 编程工具直接长出反汇编眼睛

装上它,你的 AI 编程工具直接长出反汇编眼睛

玩软件的人大概都有过这种时刻:你在某个 App 里看到一个特别顺手的功能,心里痒得不行,想把它搬进自己的项目里。然后你打开搜索引擎,翻遍了论坛和问答,最后只找到一句"这个是商业实现,没有公开资料"。于是你只能凭感觉复刻一个,做完自己都知道差点意思。

以前遇到这种情况,摆在面前的路只有两条。要么认命,自己从零摸索;要么硬着头皮上逆向,先啃几个月汇编,再在反汇编窗口里对着一堆看不懂的伪代码发呆。两条路都劝退率极高。

今天要聊的这个东西,恰好卡在这两条路中间,把那条最难走的路给铺平了。它叫 REA,全称是 Reverse Engineer Anything,一个挂在 GitHub 上的开源项目,现在已经攒到了三万八千多颗星,MIT 协议,纯粹的自由软件。

先说清楚它到底是个什么东西

一句话概括:REA 是一个给 AI 编程助手用的"逆向分析外设"。

它不是那种你双击打开、拖个文件进去、然后弹出一堆窗口的重型工具。它本质上是一个 MCP 服务,安装之后会挂到你常用的 AI 编程工具上,比如 Claude Code、Codex、Cursor、Gemini CLI 之类。挂上去之后,你的 AI 助手就多了一种能力:它可以自己去翻一个程序的内部,把翻到的东西连同证据一起带回来,然后用你能听懂的话解释给你听。

这个区别很关键。过去你问 AI"这个软件是怎么实现的",它只能靠训练数据里的印象瞎猜,猜对了算运气,猜错了你也不知道。现在它是真的去看了一眼,然后告诉你"我看到了什么、在哪看到的、哪些地方我还不确定"。

后面这一点,是它最打动我的地方。

装起来到底麻不麻烦

说实话,看到"逆向"两个字,很多人第一反应是"算了,我配不上"。这套东西的安装流程意外地友好。

前提只有一个:机器上得有 Node.js,版本要求 22.19 以上、或者 24.11 以上、或者 26 以上,外加 npm。对常年折腾软件的人来说,这个门槛约等于没有。

然后就是一行命令,跑完之后它会问你要挂到哪几个 AI 工具上,把你选中的勾上,确认它准备改动的配置,批准就行。它会在动手前把原来的配置备份一份,这个细节值得夸一句,起码不会把你原本精心调好的环境搞崩。跑完重启一下 AI 工具,完事。

还有个挺贴心的设计是"技能包"。安装的时候它会顺带把配套的逆向工作流说明也装进你的 AI 工具里,相当于不只给了工具,还教了怎么用。AI 不是天生会逆向的,它得知道先看哪儿、后看哪儿、什么算证据。这套说明就是干这个的。

版本迭代很快,作者也明说了新版本里修了不少问题,所以官方建议常更新。装了命令行版本的,一条更新命令搞定;用临时方式跑的,重新走一遍安装流程就行。

原生二进制:exe 在你面前是没有秘密的

这是它最硬核的一块。

给它一个原生程序,它可以吐出伪代码、汇编指令、字符串、符号表、函数调用关系、交叉引用……基本上你在一个正经反汇编器里能看到的东西,它都能拿到。

实现方式是你本机已有的反汇编器。Hopper、Ghidra、IDA 这三个它都认。也就是说,它不是另起炉灶造了个轮子,而是把你已有的专业工具接进了 AI 的工作流里。如果你机器上本来就有其中一个,配置指向它就行;如果你没有,安装流程可以在你同意的前提下帮你把 Hopper 装上。

这里有个很多人会纠结的点:需不需要先把 Hopper 打开?答案是不用。它在需要的时候会自己把引擎拉起来,你不用守着窗口等。

格式和平台支持取决于你用哪个引擎,官方也把这块列得挺清楚,哪种格式在哪个引擎上支持到什么程度,都能查到。Ghidra 那条线甚至还支持 16 位的 DOS 程序,这个就属于情怀玩家的狂欢了。另外碰到特别大的二进制文件,Ghidra 启动可能会超时,官方留了个环境变量让你把启动等待时间调大,说明他们是真用过,不是拍脑袋写的文档。

顺带一提,Linux 上它还支持纯离线的 ELF 结构分析,能给出段表、节表、原始符号和重定位信息,还能静态判断一些缓解措施有没有开。这对做安全研究的人来说相当省事。

JavaScript 和 Electron:前端壳子里的东西照样能看

如果你觉得二进制太远,这块可能更贴近日常。

现在大量的桌面应用都是 Electron 打包的,外面套个壳,里面是打包成一坨的 JavaScript。想看它的实现,过去你得手动解 ASAR、找 sourcemap、在几万个压缩过的变量名里大海捞针。

现在你只要把解出来的目录丢给它,或者直接命令行指过去,它就能还你一份结构化的东西:有哪些模块、模块之间怎么 import、sourcemap 在哪、路由怎么走、渲染进程和主进程之间的 IPC 通道有哪些、哪里用到了原生插件。每一项都附带你可以在哪儿验证的证据。

最关键的是,静态分析 JavaScript 和 .NET 这类目标,完全不需要前面那几个反汇编引擎,只要 Node.js 和 npm 就够。也就是说零额外成本。

而且这块是纯静态的,它只读你给的文件,不会真的把程序跑起来。对于不想在自己机器上执行来路不明程序的人来说,这点很重要。

.NET、Android、网站、抓包:覆盖面是真的广

.NET 程序集它能读出元数据、中间语言指令、声明的原生依赖,甚至能对比两个构建版本之间的差异。升级之后行为变了但又不知道哪儿变了?这种场景它就是神器。

Android APK 这边,Manifest 声明、类名、反编译后的方法、引用关系,都能拿到。背后是无人值守模式的 JADX,需要完整 JDK,Linux、macOS、Windows 的 x64 都支持。

网站这条线更有意思。它会开一个 Chrome 系的浏览器,去看页面结构、页面里跑的脚本、观察到的网络请求,还能按你的要求截图。你在某个网站上看到一个有意思的交互,可以让它去现场看一眼到底是怎么发出的请求、返回了什么。

如果你手上有存好的抓包文件,比如 HAR,它也能直接读,把请求、响应、暴露出来的数据、以及这些数据在源码里的出处都列出来。Linux 上还支持原生 mitmproxy 的抓包文件,需要用 mitmdump 处理一下。

冷门但救命的还有两块。一块是固件,走 Binwalk 和 Unblob,能识别分区、做提取,然后把提取出来的原生程序交给前面的二进制流程继续分析,一条龙。另一块是崩溃记录,你给它一份 Linux 上记录下来的崩溃信息,它能把原始记录、每个线程当时的寄存器和信号状态、以及可能的地址映射候选都整理出来。如果你机器上装了 pwntools,可选的 GDB 和 pwndbg,这块会更完整。

再往下还有程序包和资源清单的清点、文件指纹、plist、苹果 bundle 结构解剖之类的杂活,也都在射程之内。

以及一个容易被忽略但很实用的能力:进程行为捕获。它可以真的把一个目标跑起来,记录终端输出、交互过程、退出状态、文件系统上的变化,还能对比两次运行的差异。这个在 Linux 和 macOS 上有原生终端支持,效果最好。

三条线一起看,它到底解决了什么问题

把上面这些摊开看,你会发现它解决的其实不是"逆向"这一个动作,而是三个层面的断层。

第一个断层是工具和人之间的。反汇编器很强,但它只负责把二进制翻译成人勉强能读的东西,至于这段代码在干什么、为什么这么写,它一个字都不会告诉你。REA 补的就是这一层。

第二个断层是 AI 和真实程序之间的。AI 很会说,但它没看过你的目标程序,所以它说的都是泛泛之谈。REA 给它接上了眼睛。

第三个断层是结论和证据之间的。以前逆向出来的结论,你很难判断是靠推理得来的还是靠猜的。REA 的返回结果里明确带着证据和"哪些地方还不确定",你可以自己去核。

三个真实案例,看完你就知道能玩到什么程度

官方放出来的案例都挺有意思,随便挑三个说说。

第一个是 DX-Ball,一个老游戏。有人顺着一段声音调用追进去,找到了一个把坐标换算成声道的函数,把不完整的伪代码还原成了 C 代码。还原完不算完,人家还做了验证:三千二百零五个原始 x86 用例全部通过,编译出来的函数六十三个字节跟原始的一模一样。这个级别的严谨,属于是硬核玩家的浪漫了。

第二个是 Notion。这个更贴近现代应用。目标是搞清楚它的 Electron 剪贴板桥接是怎么走的:从渲染进程的剪贴板接口出发,穿过预加载脚本,再经过 IPC 通道进到主进程,最后看清它自己定义的富文本剪贴板格式。整条链路,一层一层剥开。

第三个是 TH04,一个 PC-98 上的老游戏。分析的是 16 位指令,还原出固定角度和瞄准角度两套弹幕环的计算方式,然后把重新写出来的 C++ 跟当年编译器产出的结果做对比。这个案例基本就是电子考古了。

三个案例,一个是精确复原,一个是现代应用链路追踪,一个是历史程序逆向,跨度大得离谱,但用起来是同一套东西。

一定要说的几句提醒

越强的工具,越需要说清楚边界。

第一,它是给你做合法研究用的。官方的免责声明写得很直白:REA 提供的是用于合法逆向研究、分析和复原的工具,使用者自己负责取得必要的授权,并遵守所在地的法律。项目方不认可任何非法或未授权的使用。这话不是套话,是真得放在心上。研究你自己有权利研究的程序,这是底线。

第二,它不上传你的东西。分析全程在你本机跑,这一点官方在问答里明确回答过。对于要拿着公司产品或者商业软件做分析的人来说,这基本是能不能用的前提。

第三,运行时的捕获会真的运行目标程序,而且是用你自己的用户权限跑的。所以该隔离的环境还是得隔离,别在主力机上乱来。

第四,这是一个开源项目,MIT 协议,代码公开。另外官方还特别声明过,他们没有发行也没有背书过任何加密货币或代币,任何顶着 REA 名字的代币都跟这个项目无关。这种声明在现在这个环境里,算是负责任。

什么样的人真的需要它

我自己琢磨下来,大概这么几类。

第一类是做产品的人。看到竞品有个做得漂亮的功能,想知道人家到底怎么实现的,不是为了抄,是为了知道自己差在哪。

第二类是做二次开发和兼容性的人。要接一个没有文档的闭源系统,只能靠行为反推协议,这种活儿以前是按周计的。

第三类是做安全研究的。看缓解措施、看崩溃现场、看固件里藏了什么,这几块它都有现成的路子。

第四类是纯粹喜欢折腾软件的人。就是那种看到一个新东西就想拆开看看里面是什么构造的人。对这个群体来说,这工具本身带来的乐趣,可能比它解决的问题还大。

说实话,就算你暂时用不上,装上也亏不了什么。它不占地方,不拖速度,等哪天真的想拆点什么的时候,你会发现手边已经有一把称手的家伙了。

下载

本公众号发送8259获取下载资源顺手点个“点赞👍”和“在看❤️”,谢谢啦~

关注我们的公众号,更多软件尖货持续为你揭秘

相关学习资料