夜雨聆风学习资料网

ARTICLE · 1186875

比Jev更爆火!逆向灭霸 REA 只给安装包就能复刻软件

比Jev更爆火!逆向灭霸 REA 只给安装包就能复刻软件

最近很火的一个 REA 的软件,我尝试了一下,真的蛮厉害的。

国外这几天已经炸了锅。一个 15 万粉的 AI 博主只发了一句「Software is done.」(软件完蛋了),374 万人看过。

它可以直接拿一个安装包逆向源码,然后我们就可以通过 AI 来修改源码,实现免费自定义用一些付费软件。

我是拿了一个 GitHub 上的开源番茄钟来做一个尝试。

这个番茄钟叫 Pomotroid,源码在 GitHub 上公开着,正好拿来对答案。我只给 REA 安装包,它拆完,我再去拉源码,一条一条比。

✦ 读完这篇你能拿走

• 不会逆向,也能让 AI 拿 REA 拆开一个 Electron 软件,看懂它的功能是怎么做的

• 先把依赖库剔掉再喂,8 秒出结果

• 它会看走眼的 2 处:漏掉消息通道、把本地文件当成联网

• 碰上 Rust 写的程序,得先装好 Ghidra 和 Java

16/16

设置项全找到

8条

它漏掉的通道

17套

主题原样搬来

先放结果。Claude Code 拿着 REA 交回来的东西,写了个网页版番茄钟出来。

和原版摆一起是这样的,左边原版,右边复刻,差别得凑近了看。

简单交代下 REA。全名 Reverse Engineer Anything,今年 4 月建的仓库,我今天看是 17.6 万 star。

最猛的一天,24 小时涨了 5.4 万星。

它给 Claude Code、Codex 这类 AI 编程助手接上一套逆向工具,你问「这个功能是怎么做的」,AI 就去翻安装包,结论和证据一起交给你。

网友已经玩疯了。有人把自家的 LG 电视逆向了,在 Mac 菜单栏里给它做了个遥控面板,22 万人围观。

还有中文博主拿它扒了《魂斗罗》和 Notion,标题直接写「闭源塌了,写代码真不值钱」。

我的测试小一点,就是开头那个番茄钟。

✔ 对完答案,我的结论分三块

找到的东西基本都对,有两处看走眼,还有一个版本它根本拆不动。

我全程在 VS Code 里让 Claude Code 跑 REA 的命令行,没装插件也没改配置。

⚠ 唯一折腾的是 Node

REA 要 22.19 以上,我机器上是 22.18,就差这一个小版本,只好另装了个 Node 24。

◆案例一:一条命令拆开整个应用,但别把整包喂给它

我拿的是 Pomotroid 2021 年的 0.13.0 版。这版用 Electron 写,就是拿网页技术套个壳做成的桌面软件,代码全打包在一个叫 app.asar 的文件里。

只对应用自己的代码跑一遍,8 秒出结果。

3 个 JS 文件,42 条发现。里面有 1 个后台线程(worker),19 处读配置的地方,覆盖状态是 complete,意思是这部分它看全了。

不过这已经是第二次了。

⚠ 第一次我把整个 app.asar 直接丢了进去

等了 41.8 秒,出来一个 89MB 的 JSON。

包里一共 1361 个文件,大半是依赖库,REA 的分析预算全耗在这些库上。2338 条局限说明,1192 条写的是「资源受限」。

更要命的是 IPC 那一栏。IPC 是主进程和界面之间传消息的通道,两次分析都说是 0。

可我自己在主进程代码里一搜,就有 8 条。点最小化、点关闭、窗口置顶,走的都是它。

为什么漏?REA 的局限说明里自己交代了。它只追能确认的模块引用,打包工具把 require("electron") 塞进了一个编号模块,它没跟进去。后面还跟了一句「没找到不代表不存在」。

✔ 挺诚实的,就是容易被人略过去

我现在的用法是先把依赖库排掉,只喂应用自己的代码。它报 0 的地方,再自己搜一遍。

◆案例二:16 个设置项全中,但它把本地文件当成了网络

番茄钟的设置无非是工作几分钟、休息几分钟、几轮来一次长休息、用哪套主题。REA 把读这些设置的地方全找了出来,每条都标了文件名和列号。

一共 19 处,去重后 16 个设置名。然后我打开源码,默认设置写的正好也是 16 个,一个没漏。

⚠ 问题出在标签上

这 16 个,它全标成了 network,也就是网络请求。

源码第 3 行引的是 fs,读写的是本机的一个 JSON 文件,跟网络半点关系都没有。假如你拿 REA 去查一个陌生软件会不会偷偷联网,看到满屏的 network,大概会误判。

这个案例里也有它干得漂亮的地方。界面代码被压成了一整行,它照样定位到第 17207 列,那里启动了一个后台线程。

顺着这条线索我又跑了次功能追踪。7 秒,19 条路径,这个线程跟工作时长、主题这些设置怎么连在一起,画得清清楚楚。

压缩过的代码人眼没法看。我让 Claude Code 先格式化,再跟官方源码左右摆着比。

左边变量名全变成了 t,可逻辑一点没变:每隔 1000 毫秒计数加 1,加满总秒数就停。

◆案例三:照着证据复刻,第一版差了三处

到这里,手上有了计时逻辑、16 个默认设置,还有安装包里 17 套主题的配色文件。

够写一个复刻版了。我给 Claude Code 的要求就两条:界面跟原版一样,计时也放到后台线程里。

第一版长这样。

乍看挺像,细看不对。我让它把这版和原版截图放一起自己找差别,它找出三处:

  • 数字字体偏粗
  • 右上角缺了最小化和关闭
  • 右下角缺了音量键

字体这处它没拿个差不多的细体凑合,而是回安装包里翻出原版用的 RobotoMono Light 字体文件,直接引用。改完就是开头那张对比图。

17 套主题都能切,颜色是从安装包原样搬过来的。

整个复刻版的 HTML 128 行,配色另放一个文件。

计时我让它动了一处。原版是每秒加 1 来数时间,复刻版改成拿真实时间戳去算过了几秒。原版那样写会不会越走越慢,我没专门测过,所以不下结论。

⚠ 还得提一句版权

主题配色、字体、计时结构都是从原版搬的,Pomotroid 是 MIT 协议,这么用没问题。要是换成闭源的商业软件,这一步就是另一回事了。

◆案例四:作者用 Rust 重写了新版,REA 拆不动

今年 3 月,Pomotroid 的作者用 Rust 把整个应用重写了,框架换成 Tauri,安装包从 69MB 瘦到 15MB。我拿最新的 1.7.1 版又试了一次。

REA 先做了个初检,建议我跑 JS 分析。我照做了,结果 0 个文件,覆盖状态居然还是 complete。

那换原生程序分析呢?直接报错。

报错说得很明白:Ghidra、Hopper、IDA 这三个反编译工具,我一个都没装。

⚠ 往下看还有个坑

这个程序里同时有 Intel 和 Apple 芯片两套代码,就算装了 Ghidra,也得先拆成单一架构才能分析。

REA 还有一个不靠反编译器的 Mach-O 检查(Mach-O 是 macOS 的程序格式),也没跑起来,它要完整版的 Xcode。

我只好用系统自带的 strings 命令自己搜。

主题颜色变量明文出现了 78 次。工作时长、滴答声这些设置名,一次都搜不到。我猜网页代码是压缩之后塞进程序里的,REA 的 JS 分析看不见,也没提醒一句「这里面可能还有东西」。

✔ Electron 应用开箱就能拆

原生程序就麻烦了,先装反编译器,装 Ghidra 还得配 Java,这一步会劝退不少人。

◆最后算笔账

对完答案,我感觉它真的蛮牛的,很多逆向的代码和源码竟然都差不多,不得不说一句牛逼!那它逆向出来的源码配合上 AI,真的有希望实现软件自由了!希望作者加把劲,把那些失败的部分也能逆向掉!

作者本人也在玩梗,贴了一条网友评论「you will own everything and be happy」(你将拥有一切,并且很快乐),反着用了网上那句「你将一无所有,并且很快乐」。

想用的话在 GitHub 上搜 rea 就能找到,作者叫 morluto。拿它扒闭源商业软件之前,记得先看看人家的用户协议。

关注「帆行的AI工具箱」,一起用 AI 提效。

觉得有收获可以一键三连,转发给需要的小伙伴

我是帆行,在互联网公司做技术,平时折腾 AI 工具和自动化,踩过的坑会在这里写下来。

相关学习资料