夜雨聆风学习资料网

ARTICLE · 1198492

【GitHub】你的闭源软件在 REA 眼里,基本等于裸奔~~

【GitHub】你的闭源软件在 REA 眼里,基本等于裸奔~~

每天一个有趣的网站分享

沙雕新闻:专注搜集全网真实发生的奇葩社会事件和迷惑行为,真人真事自带喜剧效果,纯摸鱼放松用。

地址:https://shadiao.news/

10 月 10 号那天,REA 这个仓库一夜冲上 GitHub Trending 榜首,单日新增两万五千多 star,还登了 Hacker News 首页第一。那天我就把它丢进了「有空再看」的收藏夹,心想这玩意儿得找个整块时间好好捋一遍。

结果一拖就是一周多。中间不是没刷到它,群里有人转,朋友圈有人聊,每次都点开看两眼又关掉,总觉得不急,它又跑不了。直到这个周末终于把手头的事清了,坐下来真把它从文档、仓库、社区讨论到官方 showcase 全扒了一遍,才发现自己之前只看到了热闹,没看到门道。

所以这篇不是蹭热点,是补作业。REA 全称 Reverse Engineer Anything,一句话说,它是个让你手里的 coding agent 能直接去拆没有源码的程序的工具。下面把我这一周多攒下的东西,连同几个真有人跑起来的案例,一起摊开说。

01WHAT

它到底是什么

REA 本质是一个 MCP server。它把自己注册成你 agent 的一个工具集,背后接的是 Hopper、Ghidra、IDA 这些老牌反编译和反汇编工具,再加上 JADX、Apktool、mitmproxy,分别对付安卓、APK 和流量。

关键点在这儿,REA 不是又一个反编译器。它不重新造轮子,而是做调度层。你问 agent,agent 通过 MCP 去调 REA,REA 再去驱动那些工具,把指令、调用链、字符串、符号这些原始材料捞出来,整理成 agent 能追问、能验证的结构化证据,再交还给 agent 去解释,或者帮你写代码。

到发稿时它已经集成了 207 个工具,覆盖原生二进制、JavaScript 和 Electron 应用、.NET 程序集,还有网站。静态 JavaScript 分析甚至不需要任何原生引擎,开箱就能用。

morluto/rea 的 GitHub 仓库,截至发稿已经 29 万 star

powershell

npx rea-agents setup

一行命令,setup 会让你选要接的 agent,展示将要改动哪些配置,备份旧配置,等你批准才写入。原生分析如果你已经有 Hopper、Ghidra 或 IDA,它直接复用,不用重装。

02BUZZ

为什么一夜之间爆了

2026 年 10 月 10 号,这个项目出现在 GitHub Trending 榜首。单日新增 25,793 个 star,总星数冲到七万多。同一天它登上了 Hacker News 首页,拿下了榜首,八百多分,三百多条评论。

它火,不是因为蹭了什么大模型发布的流量,而是戳中了一件很朴素的事,怎么让一个会写代码的 agent,真正读懂一段没有源码的程序。在这之前,世界是割裂的。一边是逆向工程师手里的 Hopper、Ghidra、IDA,强大,但知识都在人脑子里。另一边是越来越聪明的编码助手,能写能改能重构,却对一个编译好的程序到底干了什么几乎一无所知。REA 在两者之间拉了一条标准线。

03EVIDENCE

它最较真的地方,是证据

我看过不少「AI 逆向」的项目,绕了一圈往往变成大模型在猜。REA 不一样的地方,是它把证据当成了硬约束。它返回的每一条结论,都带着 Seen(看到了)、Inferred(推断的)、Unknown(还不知道)这三种标记。

看到 Seen

工具直接从二进制里读到的,比如某条指令、某个常量、某个调用关系。

推断 Inferred

agent 根据证据推出来的,但没在原始材料里直接出现,会明说是推的。

未知 Unknown

当前证据覆盖不到的地方,它明说不知道,而不是现场编一个。

这个设计很克制,但很重要。它逼着 agent 把「我确定」和「我猜的」分开说。对一个用来理解程序的工具来说,这种诚实,比多几个花哨功能值钱得多。

04CASE

真实案例,1996 年的游戏被重写

说一个最让我服气的真实案例。有个开发者想用 C 语言,把 1996 年的 Windows 游戏 DX-Ball 重写成一份能长期维护的版本。他不是靠手撸汇编,而是让 REA 一个函数一个函数地帮他把原始 exe 拆开。

最精彩的一段是声音左右声道的计算。砖块被击中的时候,它的水平位置会传进声音代码。REA 先定位到函数 0x406400,发现反编译器只给了一个 __ftol 转换调用,信息不全。于是它接着读调用方,找到砖块命中的函数 0x411f40,发现它先把格子坐标乘以 30、再加 20,得到屏幕坐标。然后又去读内存里的常量,0x420068 解出 1.5625,0x420070 解出 500.0。

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;

}

最终还原出来的 C 函数就是上面这样。更狠的是验证。这个项目用了 3,205 个行为测试用例,把原始 x86 函数和重写后的 C 函数,从 0 到 640 的每个整数位置、在 5 种声道缩放下逐一比返回值。还有 63 个字节,是用当年 VC4.0 工具链重新编译后,逐字节对上的。到发稿时,已经有 55 个 C 函数被维护起来,和原始代码做了 45,380 次比对,其中 33 个函数的编译字节完全吻合。

REA 官方 showcase,DX-Ball 的逆向重建过程

scripts/rea function original/DXBALL.EXE 0x00406400 \

  --snapshot .analysis/rea/dxball.snapshot.json --json

如果你想自己照着试,原始仓库在这里,里面有权威的进展记录、测试覆盖和本地搭建说明,仓库在 github.com/N0zoM1z0/dx-ball 。REA 官方的这个 showcase 页面也保留了完整的调查笔记和证据编号,可以顺着看一遍人家是怎么一步步推出来的。

05COMMUNITY

社区里,有人真的拿它干了这些

我自己翻了一圈(顺手开了代理去扒),REA 官方没办什么比赛,但社区自发长出了一套 showcase 生态。我挑两个我觉得最实在的项目展开说说,都是真有人维护、带仓库、能自己跑起来的。

作品一,rea-gems,一个每天自动更新的逆向案例画廊

这个项目作者是 sqwu。它做的事很巧,用一个 Python 脚本配合 GitHub Actions,每天自动去扒 rea.tools 的官方 showcase、官方博客、GitHub 上提到 rea-agents 的仓库,还有 REA 的 discussions、Hacker News 和 Reddit,把大家用 REA 理解、重建、复原的优质案例收集起来,按参与度和新鲜度打分,去重后存进一个 JSON。到我写这篇的时候,已经攒了 93 个案例。

它本质是个自动流水线,所以部署也简单。你把仓库 fork 或者 clone 下来,核心抓取脚本在 scripts/fetch_cases.py,跑一下就能在自己机器上刷新一份 cases.json。想让它每天自动更新,就保留那个 GitHub Actions 工作流(update.yml),推到自己仓库它会自己定时跑。另外作者还做了个在线画廊 sqwu.github.io/rea-gems,带标签过滤和搜索,不想 clone 直接开网页也能逛。

text

仓库  github.com/sqwu/rea-gems

画廊  sqwu.github.io/rea-gems

本地  python scripts/fetch_cases.py

作品二,awesome-rea,21 个真实世界的 REA 用法合集

另一个叫 awesome-rea,作者 git-sanbu。它更像一份精选索引,目前收了 21 个具体案例,按你的意图分了类,游戏移植、应用功能分析与复现、算法与协议逆向、音频语音逆向、Electron 与 CTF 题分析。每个案例都是一份单独的 Markdown,写清楚了用 REA 做了什么、成果和详情链接。

举几个我能记住的。Notion 剪贴板,逆向 Notion 网页编辑器,搞清楚它怎么通过 renderer、preload、IPC 和主进程队列处理 Markdown 文本剪贴板。AegiS TOTP,从安卓 APK 里把动态验证码算法抠出来,定位了大约 300 行代码,复现了 TOTP(RFC 6238,SHA-1)的生成逻辑。还有 TH04,对 PC-98 平台的东方 Project 做 C 语言逆向,给出了新结果还和历史翻译做了对比。

用起来零安装。要么直接开它的在线站 awesome-rea-e7l.pages.dev,搜关键词就能过滤案例。要么 clone 下来看 cases 目录里的源文件。想贡献案例也有 Issue 模板和 PR 流程。

text

仓库  github.com/git-sanbu/awesome-rea

浏览  awesome-rea-e7l.pages.dev

本地  git clone github.com/git-sanbu/awesome-rea.git

社区在 REA 仓库的 issues 和 discussions 里分享的实战案例

看了一圈这些社区项目,我最大的感受是,REA 真正有用的地方,不是它自己多厉害,而是它把逆向这件事,从少数人的手艺,变成了普通 coding agent 也能接的活。下面说说你自己怎么上手。

06SETUP

想自己上手,三步跑起来

部署其实就一行核心命令,但有几件前置的事得说清楚。

01 · 装 Node 需要 Node 22.19+ 或 24.11+ 或 26 以上版本,加 npm。老版本跑不起来,这一步别省。

02 · 跑 setup 在终端执行 npx rea-agents setup,它会让你选要接的 agent(Claude Code、Codex、Cursor、Gemini CLI、Grok 都支持),展示改动、备份旧配置,你批准后才写入。写完重启 agent。

03 · 开问或开终端 直接在 agent 里问「用 REA 看看 XX 应用这个功能怎么实现的,给我看证据」,或者终端跑下面的命令,结果会带模块、导入、Electron 边界和证据。

powershell

npx rea-agents setup

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

rea.tools 的入门页,有图解指南和真实案例

原生二进制分析需要你本机有 Hopper、Ghidra 或 IDA 之一。只做 JavaScript、Electron 的静态分析不需要这些,开箱即用。Linux 上跑 Ghidra、JADX 或者固件分析,还需要一个兼容 procps 的 ps 在 PATH 里,用于进程归属检查,文档里写了恢复步骤。

07LIMITS

别神话它,它也有边界

写完上面这些,我得泼点冷水。这东西不是万能的,有些边界它自己也在文档里写明了。

不恢复源码

REA 明确说不做原始源码恢复,也不做整个程序的克隆。它帮你理解,不帮你照搬。

静态不等于运行时

静态分析看到的不等于运行时证明。碰到混淆、加壳,目前还是硬边界,它拆不开。

本地不等于全程私密

分析在本机跑,但结果会经 agent 送到模型供应商。文档里原话是 This is not a sandbox,本地不等于全程私密。

还有一层是法律。逆向工程是双用途的,授权和合规得自己负责。文档里点名了美国的 DMCA 1201(f)、欧盟的 2009/24/EC 第 6 条作为例外参考,也直言中国目前没有成文的例外条款。所以动手前,先确认你对目标有权分析。

 — 拾叁 — 

这篇最该被记住的一句话是,REA 把逆向从少数人的手艺,变成了一个 coding agent 能接的标准活,但它也老实交代了自己看不懂的地方。觉得这篇对你有用,点个推荐,算法会把它推给更需要的人。

你有没有过那种「想抄一个闭源 App 的功能、却卡在没有源码」的时刻?评论区说说你最想拆开看的是哪个应用,我看看值不值得下期写个实操。

相关学习资料