ARTICLE · 1175427
AI 软件逆向:从读懂程序到重建功能,传统软件开发还能走多远?
把一个已经编译好的程序交给 AI,它能把软件重新造出来吗?
这个问题背后,其实有一串更具体的问题:程序怎样处理输入,功能分散在哪些模块,哪些行为能被重建,重建之后怎样证明结果可靠。
这篇文章要讲的是软件逆向:从已经存在的软件出发,追踪它的实现,整理出可以解释、可以检查的规则。 REA 是贯穿全文的一套工具入口;它的公开案例,刚好能让这件事看得更具体。

原创 AI 概念封面。官方实验、作者个人实践与本文录制的网页演示分别标注。
01|软件逆向,究竟在逆什么?
正常开发通常从需求和设计走向代码与程序;逆向分析则从现有程序、应用包或运行记录入手,追问它怎样工作。目标可以很小:弄清一个百分号、一个导出按钮,或者一个声音定位函数。REA 对逆向工程的说明[1]
一个旧应用没有留下完整工程,但你需要迁移它的导出格式;两个系统需要互通,但数据转换规则没有写进文档。这些场景都需要把软件里的行为变成明确说明。拿着完整源码排查自己的问题,则通常可以先从源码搜索和调试开始。
谈软件逆向时,几个动作经常混在一起。反汇编把机器指令展示为可读的指令;反编译尝试把它们整理成类似高级语言的表达;逆向分析进一步解释输入、状态和调用关系;功能重建再用代码实现这些规则。Ghidra 这类专业工具早已提供反汇编、反编译与分析能力。Ghidra 官方项目[2]

本文原创方法图。调查目标不同,需要交付的证据也不同。
比如看到一段 value / 100 的伪代码,你已经拿到一条线索。要解释计算器,还得知道 value 来自哪个操作数、当前是什么运算状态;要重建计算器,则需要把这些状态写进实现,再与原版比较。
下面这张读者提供的截图,把讨论推到了“闭源软件会不会被 AI 看透”“代码混淆还能挡住多少分析”等问题上。

用户提供的讨论截图,原样保留;其中具体游戏说法与行业预测未获本文独立验证。
截图中的“破解”“还原源码”“软件变成开源”,分别涉及不同判断。研究行为、重建功能、取得原始工程,以及获得使用或分发许可,需要各自的依据。本文接下来关注的是:从软件里能取得哪些证据,这些证据能支持怎样的还原。
02|AI 如何参与软件逆向?
软件逆向里有大量连续的小问题:哪个字符串关联到按钮,哪个函数读取这个字段,调用方传进什么值,这段分支为什么只在某种状态下执行。找到一处代码后,还要决定下一步看哪里。
REA 的全名是 Reverse Engineer Anything。它提供 MCP 服务和 CLI 命令行入口,把分析路径交给编程助手调用。MCP 是助手连接外部工具的接口;CLI 让你直接在终端发起分析。REA 项目仓库[3]

官网实截,2026-10-13 采集。
在这套流程中,专业分析工具负责取得指令、伪代码或模块材料,REA 组织调用入口,助手继续追踪并解释。原生可执行文件的深入分析仍需配置合适的 Ghidra、Hopper 或 IDA;静态 JavaScript 文件分析可以走另一条路径。分析类型与提供器[4]

本文原创图解。每一步的产物,应能成为下一步可以检查的输入。
AI 在这里提供的是持续组织调查的能力:把自然语言问题拆成查询,阅读返回材料,提出下一处需要检查的位置,再准备一个实现。这是工作流上的价值;本文没有测量它比人工快多少。
逆向分析还要分清静态材料与运行观察。前者检查文件里有哪些代码和关系,后者记录选定条件下实际发生了什么。动态生成的通道、运行时加载的代码或不明确的处理函数,可能需要运行观察补足。JavaScript/Electron 指南[5] · 浏览器观察指南[6]

本文原创分类图。实际支持范围取决于主机、目标和版本。
这也决定了助手回答的可信度。它应当指出规则来自哪个函数、文件或记录,哪些调用还没有解析;表达再流畅,也不能填补没有取得的材料。原生伪代码与 JavaScript 模块关系都可以帮助理解,但不能据此保证拿回原作者的变量名、注释和完整工程。
03|四个案例,看看软件逆向怎样拼出证据
浏览器游戏:从运行脚本找出时间规则
官网的小恐龙案例分析的是 wayou 基于 Chromium 制作的浏览器版本。REA 取得实际加载的脚本,助手沿速度配置与更新函数查下去。分析目标源码[7]

官网教学组件实截。
关键规则是:起始速度 6;没有碰撞、且当前速度低于 13 时,每次更新增加 0.001。这里的单位是更新次数。把它抄成“每秒增加 0.001”,或者换了运行频率却没有检查时间关系,都会改变加速过程。
官网报告了关闭障碍物与自动调度的受控检查:保留一位小数,4,000 次更新后速度为 10.0,10,000 次后为 13.0。网页小游戏保留这条规则,绘图、跳跃和碰撞使用简化实现。官方实验说明[8]

本文操作录制:启动、跳跃,随后碰撞停止。
约 9 秒的官网组件录制,展示网页操作。
这一类逆向要核对的是状态随时间怎样更新。试玩画面可以帮助理解重建效果;规则的验证则需要控制更新次数和条件,比较预测值与原程序结果。
原生计算器:从分支和调用还原状态语义
Windows 计算器的百分号提供了一个清楚的例子:200 + 10% 得到 220,200 × 10% 得到 20。数字和按钮相同,运算状态改变了百分号的含义。
加法之后,10% 被处理为前一个数字 200 的 10%,得到 20,再相加;乘法之后,10% 被处理为 0.1,再相乘。Microsoft 百分比实现[9]

官网教学组件实截。

本文原创规则对照图。
因此,只找到“除以 100”还不够。要继续确认运算符进入哪个分支,当前数字是否还要乘上前一个数字,以及中间调用处理了哪个值。
官方调查检查了已安装应用的库,再对照 Microsoft 的公开源码与测试核实。案例使用 REA 4.1.0、Windows Calculator 11.2508.4.0(x64)。官方调查记录[10] · Microsoft 测试[11]

本文录制官网组件,依次点击百分号和等号,观察 220 与 20。
约 12 秒的官网组件录制,未据此声称复测 Windows 原始应用。
逆向重建这类功能,验收集合需要覆盖输入加上状态。同一输入只走过加法,仍不能说明乘法的分支已经正确。
Electron 应用:沿进程边界追踪一次复制
Notion Desktop 7.6.1 的公开案例追踪剪贴板:页面 API 进入 preload 预加载脚本,通过 IPC(进程间通信)到主进程,再调用 Electron 的系统剪贴板接口。Notion 官方案例[12]

本文原创路径图,依据官方包内分析。
连接两端的是 notion:clipboard:write 通道。接收端检查消息来自哪个页面,再决定如何处理。一个 clipboard 字符串能指向线索;页面、桥接层和处理函数之间的关联,才能解释功能怎样执行。
复制结果也分两层:系统剪贴板中的文本与 HTML,以及 Notion 本地保留的结构化块。HTML 携带的复制 ID 可以关联本地记录;匹配成功时恢复块数据,记录失效时则只剩文本与 HTML。

官网 富剪贴板说明 实截,ID 与文字为示意值。
所以,文字复制成功,不代表块结构完整保留。重建剪贴板互操作时,需要分别验证文字、HTML、结构化数据与记录失效后的退化行为。官方结论来自特定应用包、缓存资产和模块探针,不能自动推广到所有版本。
老游戏函数:把伪代码、汇编和数据重新对上
DX-Ball 声像函数的第一次反编译摘要几乎只剩一次转换调用。继续看栈读取、调用方与数据常量,才能补回屏幕横坐标如何变成左右声像。原生分析指南[13]

官方中文证据图实截,范围是一个声像函数。
三类材料分别回答三个问题:汇编中的读取指出有一个整数输入;砖块碰撞调用方说明输入来自屏幕坐标;引用的数据字节提供 1.5625、500.0 与缩放值。它们拼出的关系是:
pan = (x × 1.5625 − 500) × scale再把结果转换为整数。缩放值为 1 时,x=0、320、640 分别对应 −500、0、500,屏幕中心因此落在声场中心。
重建项目报告了 3,205 个行为对照用例,以及指定 VC4.0 工具链下全部 63 字节的匹配。一项检查返回值,另一项检查特定编译条件下的机器码。项目验证记录[14]
这说明软件逆向可以把一个函数还原到很具体的程度。页面也明确写着,可玩的完整游戏仍在开发;单函数的证据,不能替整款软件完成验收。
04|从理解程序到重建软件,验收怎样升级?
四个案例对应了软件逆向的四种难点:时间规则、状态分支、进程路径、机器指令与数据。重建时,把它们分别写进测试,才能知道新实现覆盖了什么。
可以按下面几层检查自己的成果:
这是本文依据案例整理的验收框架;不能把通过上一层,自动计作下一层也完成。
Matthew Berman 在 X 上的短评 “Software is done.”,把 REA 带进了软件价值的讨论。本人原帖[15]

本人原帖实截,呈现态度,未将短评当作能力测评。
宝玉公开记录了用 REA 配合 Codex 调查混淆前端、还原 Slides 编辑器的实践。随后整理工程的过程,比“已经跑起来”的画面更能说明重建之后的工作。宝玉本人微博[16]

本人微博实截,保留身份与原文;效果属于作者个人报告。
他的记录提到,初次生成的代码内部仍乱,之后又让另一编程助手重写并整理类型和结构;提示词部分另用一条路径生成相似效果,没有声称恢复原始提示词。本文没有独立验收这个项目。
由此看,软件逆向、功能重建和工程整理,需要分别交付。一个能操作的编辑器可以说明某些行为已实现;异常输入、完整功能与维护成本,还要用各自的检查回答。
05|第一次做软件逆向,从一个 CSV 导出开始
初次实践可以选一个问题小、材料完整、结果容易比较的目标。REA 的六文件 Notes Electron 示例,适合追踪“点击 Export notes 后,CSV 怎样生成,最后写到哪里”。静态分析这份示例无需先启动 Electron。第一次调查[17]

官网 浏览器示例 实截,用于展示导出入口;与本节六文件 Electron 示例是两份目标。
调查沿 renderer.js → preload.js → main.js → csv.js 展开:按钮入口调用页面 API,预加载层发送 notes:export,主进程处理消息,格式化函数组织字段,再执行文件写入。Electron 导出路径[5]
给助手的任务可以这样写:
用 REA 检查这个应用的 CSV 导出。先列出分析目标与版本,再追踪按钮入口、进程调用、输出位置和字段转义。每个结论附文件与代码位置。准备普通标题、逗号、双引号和换行四类输入,先写出预测,再对照格式化输出;未解析和未运行的部分单独列出。

本文原创验收图:入口、路径、规则与未知项。
例如标题是 Hello, "REA",官网示例的预期 CSV 行为:
1,"Hello, ""REA"""外层引号让逗号留在同一字段里,内部引号写成两个。这种输入能直接检查推断出来的转义规则。示例格式化检查[18]

本文原创样本图。
运行 toCsv 检查的是格式化函数。完整导出还应覆盖实际点击、文件内容、输出位置与写入失败后的反馈。这个练习的结束条件因此可以明确写成:哪些函数已检查,哪条路径已运行,还有哪些结果待验证。
用 REA 准备这次调查
当前安装指南要求 Node.js 22.19+(22.x)、24.11+(24.x)或 26+。检查版本后运行 setup,选择编程助手,查看计划并应用,再完整重启助手。安装指南[19]
node -vnpm -vnpx rea-agents@latest setupSkill 是调查指令,MCP 是可调用工具的连接。 两者要一起配置。连接中指定的包版本在更新后也要刷新 setup,并重启助手。安装与更新说明[4]
若 Codex 没看到工具,可以先检查注册,再查看客户端的连接错误:
npx -y rea-agents@latest doctor --client codex --json诊断注册成功后,还需要确认当前会话实际能调用分析工具。完成这一步,再把示例目录和具体的导出问题交给助手。
06|软件逆向能带来什么,又留下什么边界?
对维护者,软件逆向可以帮助把旧程序中的数据处理规则写清楚;对互操作任务,它能追踪格式和接口之间的转换;对安全研究,它提供检查实现与行为的材料。具体价值取决于目标与证据,本文没有提供效率排行榜。
这一轮 AI 工具带来的变化,可以理解为调查过程更容易被组织起来。GhidraMCP、IDA Pro MCP 已经提供过让助手调用专业分析工具的路径;REA 把多种材料的调查入口放在一起。成熟反编译技术与助手的推理能力,各有分工。GhidraMCP[20] · IDA Pro MCP[21]
据此推测,客户端中能够观察的行为会更容易被理解和重建;一个产品的服务端逻辑、数据与运营体系,则需要额外材料。这是本文的工程判断,不能从一张社交截图推导出所有商业软件都已被完整还原。
采用时还要核对三类条件。REA 自有代码使用 MIT 许可证,助手、模型调用、Hopper 或 IDA 有各自的费用与许可;开源工具不等于整套工作流零成本。REA 许可证[22]
主机和提供器也影响可分析的目标。当前指南中的 Windows Ghidra 路径为实验性只读支持;IDA 的已验证配置在 Windows,Linux/macOS 的无界面分析仍未验证,应按目标与版本核对。原生分析配置[23]
最后是分析环境和数据流。官方说明分析在本机执行,结果随后交给助手,受模型服务商的数据政策约束;项目也明确 REA 不是沙箱,本地提供器以当前用户权限工作。数据说明[4] · 安全边界[24]
软件逆向值得尝试的地方,在于把“这个软件好像这样工作”,推进为“这个函数、这条分支和这些输入能说明它怎样工作”。再往前一步,用重建实现与原版做对照,把能够确认的范围写下来。
从一个百分号或一次导出开始,给出规则、出处、测试和未知项。这些具体成果,才是判断 AI 软件逆向走到了哪一步的依据。
资料核查:2026-10-13。本文讨论软件逆向的方法与工程判断,REA 作为工具和公开案例;未安装 REA 或独立重跑上述逆向实验。动图与视频为官网教学组件的操作录制。用户截图为社交讨论材料,其中具体游戏与行业预测未获独立验证。其余外部截图保留原来源。
引用链接
[1] REA 对逆向工程的说明: https://rea.tools/zh-CN/[2] Ghidra 官方项目: https://github.com/NationalSecurityAgency/ghidra[3] REA 项目仓库: https://github.com/morluto/rea[4] 分析类型与提供器: https://rea.tools/zh-CN/faq/[5] JavaScript/Electron 指南: https://rea.tools/zh-CN/guides/javascript/[6] 浏览器观察指南: https://rea.tools/zh-CN/guides/browser/[7] 分析目标源码: https://github.com/wayou/t-rex-runner/blob/5455bfa408ec6b707c7300ff194b7390733a766d/index.js#L565-L571[8] 官方实验说明: https://rea.tools/zh-CN/#dinosaur[9] Microsoft 百分比实现: https://github.com/microsoft/calculator/blob/d125246a4e19842ce1332e6c7839cf0e110027d8/src/CalcManager/CEngine/scifunc.cpp#L98-L111[10] 官方调查记录: https://rea.tools/zh-CN/#calculator[11] Microsoft 测试: https://github.com/microsoft/calculator/blob/d125246a4e19842ce1332e6c7839cf0e110027d8/src/CalculatorUnitTests/CalculatorManagerTest.cpp#L350-L370[12] Notion 官方案例: https://rea.tools/zh-CN/showcase/notion/[13] 原生分析指南: https://rea.tools/zh-CN/guides/native/[14] 项目验证记录: https://rea.tools/zh-CN/showcase/dx-ball/#checking[15] 本人原帖: https://x.com/MatthewBerman/status/2108245653843509415[16] 宝玉本人微博: https://weibo.com/2/detail/5352823472785230[17] 第一次调查: https://rea.tools/zh-CN/first-investigation/[18] 示例格式化检查: https://rea.tools/zh-CN/first-investigation/#check[19] 安装指南: https://rea.tools/zh-CN/get-started/[20] GhidraMCP: https://github.com/LaurieWired/GhidraMCP[21] IDA Pro MCP: https://github.com/mrexodia/ida-pro-mcp[22] REA 许可证: https://github.com/morluto/rea/blob/main/LICENSE[23] 原生分析配置: https://rea.tools/zh-CN/get-started/#native[24] 安全边界: https://github.com/morluto/rea/blob/main/SECURITY.md















































































