夜雨聆风学习资料网

ARTICLE · 1353003

一物降一物?AI逆向没有终局:REA拆App,BLA设套,LASIK清场

一物降一物?AI逆向没有终局:REA拆App,BLA设套,LASIK清场
"Make reverse engineering bankrupt again."

喊出这句口号的 BLA 登上 GitHub Trending 那天,它的作者 Timo Zhang 是中山大学的大三学生,项目从审计到加固是一个人写完的。而它要对抗的 REA——当年 GitHub 增长最猛的仓库,一周内从几十颗星冲到 11.5 万——背后的维护者是个连真名都没公开的化名账号。

十二天后,第三个匿名账号 pktq 上线了 LASIK:"BLA 让你的 agent 失明,LASIK 让它恢复视力。"

要理解这十二天里发生了什么,得先看 REA 的架构里留了什么口子。而这场对抗接下来怎么打,压在三个身份悬殊的个人开发者身上:写 BLA 的还在读大学,维护 REA 的化名 morluto、真名至今未公开,LASIK 背后的pktq则连一条身份线索都没留下。

REA 负责拆,BLA 负责防,LASIK 负责再把锁拆掉——三者构成一条攻防交替的链条,而不是三层防御。

▲ REA → BLA → LASIK:一条攻防交替的链条,而非三层防御。

这场逆向竞赛离日常生活并不远——你手机里的软件工具,可能被 REA 这类工具以 0.2 美元的成本拆走核心逻辑;抄袭的门槛被压到几毛钱,换一个名字重新上架,比从头写一遍低得多。而那些原创工具的作者,可能正在用 BLA 这类框架,试图让拆解变贵。大厂有安全团队,被抄了有人管;一个人做的工具没有,只能自己给自己上锁。而 LASIK 这类专门拆 BLA 的工具,也在同步迭代。

一、REA:逆向工程变成一句自然语言

REA(Reverse Engineer Anything,github.com/morluto/rea)是一个 MCP 服务器加 CLI:把 Hopper、Ghidra、IDA、Kuna 这些传统上需要数年经验才能驾驭的反编译工具,包装成 AI 编程 agent 可以直接调用的工具集。它的覆盖面在同类工具里罕见:原生二进制、JavaScript/Electron、.NET 程序集、Android APK(headless JADX)、网站、网络抓包、固件、GPU 代码对象、GGUF/safetensors 模型文件、EVM 字节码,乃至 Linux 内核模块与 Erlang BEAM。分析全部在本地运行——这一点后面会变得重要。

REA 不让 LLM 直接吞吃原始字节,而是由 126 个以上专用工具先完成遍历、关联和结构化,再把结论交回 agent——官方称之为证据优先。这个设计决定了 REA 的强项是可核查,也决定了它的软肋:每一类分析器都有防御性的输入规模上限和输出预算,防止恶意样本把分析器撑爆。BLA 的全部技术正是建立在这份预算清单之上。

"0.2 美元拆一个 App"的说法出自 BLA 的 README("clone core business logic in seconds for ~$0.20")。作为量级判断它成立:成本随目标复杂度、分析轮次和模型定价浮动,它是一次典型分析运行的 token 账单量级。

REA 并非没有争议。有安全研究者公开评价其为"hype",指出 GhidraMCP、IDA Pro MCP 等插件在 2025 年已实现 AI 辅助逆向——IDA Pro MCP 的作者 Duncan Ogilvie 曾用该插件约一小时解完当年 Flare-On 逆向挑战赛的题目;REA 的差异在于自身不做反编译,而是负责任务调度与结果整合。它更像一次产品化的收敛,而非从零的能力跃迁。

▲ Ghidra(NSA 开源反编译框架)的经典界面。(来源:malwaretech.com)

▲ morluto/rea 的 star-history 曲线;手绘轨迹图(含节点标注)见交付文件 rea-star-trajectory.png。

二、BLA 的打法:对着预算表下手

传统混淆器在和人类逆向工程师对抗——变量改名、控制流平坦化,赌的是人的耐心。BLA 换了一个对手:AI agent ,要让其“分析不完”,或者“分析出错”。

打个比方:你家门口有一堆快递盒。传统混淆是把盒子锁起来,让小偷打不开。BLA 是往门口堆几千个一模一样的假盒子,里面塞满假地址、假订单,小偷每打开一个都要花时间,打开一百个发现全是假的,自己就放弃了。你的真东西根本没锁,但小偷的时间和耐心被耗光了。

BLA的README 顶部以 Poison → Exhaust → Hallucinate 三个词作为核心标签;“How BLA Works”一节的 Defense Pillar 表则展开为四个支柱:1. Poison (Deception)、2. Exhaust (Budget Breakers)、3. Entangle (Anti-Strip & Self-Seal)、4. Runtime Truman Show——把纠缠和运行时措施也纳入其中,Hallucinate 相应成为 Poison 的期望效果描述。本文按四层叙述,以覆盖代码库的实际行为;三层仍是项目对外的核心标签。

耗尽(Exhaust):预算制导

BLA 把 REA 公布的全部常量整理成目录(REA_INTERNAL_LIMITS),内置了 19 种以上格式的护盾(README 原文:"All 19+ format shields are built directly into bla-agents")——19+ 是代码库中的护盾覆盖数,其中 11 项经过了真实 REA 的前后对照实测(npm run redteam:rea,Node v24.22.1,可选 Wabt 1.0.42 与 tshark 4.4),另 1 项(Flutter pool)为推算值,其余格式标为"designed-for but not empirically verified here"。11 项实测中 9 项被完全阻断(容量错误或预算拒绝),WASM 一项接口部分退化,EVM 一项逼近上限而非触发。

这张表可以跳过,只需要知道结论:BLA 没有改任何业务代码,只是把文件的“目录”撑到分析器的极限之外——12 项格式覆盖里,9 项一碰就让 REA 报错。

格式

加固前 → 加固后

REA 结局

精确触发的预算/错误

Electron ASAR

607 B → 16.9 MiB

❌ 容量错误

DEFAULT_ASAR_MAX_HEADER_BYTES(16 MiB 头)

Go buildinfo

50 KiB → 1.16 MiB

❌ 容量错误

MAX_BUILD_INFO_BYTES(1 MiB)

Erlang BEAM

84 B → 262 KiB

❌ 容量错误

max_chunks(64 chunk 预算)

PCAP

24 B → 1.29 MiB

❌ 预算拒绝

TSHARK_JSON_MAX_BYTES(>8 MiB)

SQLite(Node 24)

12 KiB → 56 KiB

❌ 求值陷阱

SqliteColumnEvaluationFailure(蜜罐虚拟列上的未知函数)

JavaScript

761 B → 116 KiB

❌ 预算拒绝

alias-selections + getter-expansion + primitive-bytes + primitive-candidates

Safetensors

128 B → 10.1 KiB

❌ 容量错误

MODEL_JSON_NESTING(元数据 JSON 嵌套 >32 层,HF 仍可加载)

GGUF

24 B → 7.7 KiB

❌ 容量错误

MODEL_METADATA_NESTING(数组帧 >32 层)

Electron fuses

50 KiB → 1.16 MiB

❌ 预算拒绝

ELECTRON_FUSE_LIMITS.maximumSentinelsPerSlice(>32)

WASM + Wabt

54 B → 6.56 MiB,251 个导出

⚠️ 接口部分退化

WASM_INTERFACE_REPRESENTATION_BYTES

EVM 字节码

16 B → 4.00 MiB

⚠️ 逼近上限

EVM_INTERFACE_LIMITS.inputBytes(4 MiB)

Flutter

50 KiB → 1.16 MiB

⚠️ 推算值(未实测)

MAX_POOL_URIS / MAX_POOL_TOKENS

拿 ASAR 看它的手法。Electron 应用把前端资源打包成"头长度 + JSON 头 + 文件体"的归档,REA 的 Electron 分析器为头部解析设了 16 MiB 预算——这是合理的工程护栏。BLA 不重写任何业务文件,只在归档头部合法地扩充文件树元数据,把头推到 16.9 MiB:分析器一进头部就超载,而应用运行时的惰性加载路径对此无感。对 WASM 则用自研 LEB128 解析器注入长导出名诱饵,使 REA 经 Wabt 解码出的类型化接口表示超出预算,同时 WebAssembly.validate 通过、原始导出面与执行行为完全保留。14 个基准目标全部通过运行时输入/输出等价检查,这是它反复援引的行为红线。换句话说,BLA 没有改 App 的任何功能,只是把它的“目录”撑得太大,让分析工具一打开就超载。

▲ ASAR 归档结构:header_size | header | file1 | …。(来源:掘金)

▲ WebAssembly 核心规范的结构/二进制格式对照。(来源:Packt)

预算被抬高之后,BLA 还剩多少? 项目方的回答有三层:载荷按数量级超越当前默认值;verify:rea 持续监控 REA 常量目录的漂移;即便预算被抬高,投毒与纠缠层并不依赖具体数值。天花板是"对手保持默认配置"。

▲ qybaihe/bla 的 star-history 曲线;逐日新增柱状图(含 11-08 峰值标注)见交付文件 bla-daily-stars.png。

投毒(Poison)与纠缠(Entangle)

Poison 与 Entangle 在 README 中是两个独立支柱,但机制上紧密耦合——诱饵要靠纠缠才能防剥离——这里放在一起叙述。

投毒层利用的是 LLM agent 对证据链连贯性的依赖:在产物内种植格式完全合法的诱饵——像真凭据的金丝雀字符串、VLQ v3 蜜罐 SourceMap、SGX/TPM2 委托清单、具有完整状态转移表的影子状态机。激进的带内 prompt 诱饵(--llm-directives)默认关闭,需要显式开启。每条假证据都"长得足够像真的",agent 无法低成本排除,只能把上下文切分到互相冲突的假说之间。

这套思路在互联网安全里有个近亲:反爬蜜罐——不阻止对手进入,而是让对手进入后的每一步都付出非生产性的代价;差异在于爬虫蜜罐靠行为触发,BLA 靠证据污染。对照全表如下。

维度

爬虫投毒/反爬蜜罐

BLA 的 Poison 支柱

作用对象

爬虫程序的请求行为

AI 逆向 agent 的分析上下文

诱饵载体

隐藏链接、陷阱表单、假页面

假凭据、诱饵 Source Map、影子状态机

触发条件

爬虫"做错事"(点击、提交、跟随链接)

agent 正常地阅读并采信一段假证据

成功标准

爬虫被阻断、识别、降速

token 预算耗尽,或证据链污染到无法收敛

不触发时

正常用户完全无感

运行时行为完全等价

▲ 网络安全“动态欺骗”的经典架构:蜜罐 + 行为分析 + 主动中和。(来源:ScienceDirect)

▲ 控制流混淆:真实路径被条件节点拆分,假分支增加分析负担。(来源:preemptive.com)

两者共享同一个设计思路:不阻止对手进入,而是让对手进入后的每一步都付出非生产性的代价。差异同样关键:爬虫蜜罐的诱饵是行为触发式的,对手必须违规才会踩中;BLA 的诱饵是证据污染式的,agent 不需要做任何"错事",只要正常推理就会被带偏。而 Exhaust 层更是爬虫蜜罐完全没有的东西:它不靠欺骗,而是精确对准分析器的工程护栏。

纠缠层解决的是诱饵最常见的失效方式——被剥离。--self-seal 把兄弟文件的 SHA-256 摘要编织进模块初始化路径;3.2.x 系列扩展出 sidecar 纠缠,为 ASAR、Bun 独立可执行文件、CPython .pyc 分别生成伴生清单,运行时校验"诱饵还在":剥离任何一个诱饵,程序直接启动失败。3.2.3 起,诱饵函数标识符默认纠缠进模块初始化逻辑,剥离即触发 ReferenceError 或翻转全部不透明谓词。

关于爬虫和反爬的深度探讨见:反爬十层妖塔:现代爬虫攻防的立体战争

模 7 谓词

假设 BLA 往你程序里塞了一段假代码,告诉 AI“这里面可能有重要逻辑”。AI 看了一眼,说:“这段代码永远不会被执行,我直接跳过。”——那 BLA 的假盒子就白堆了。模 7 谓词就是贴在这个假盒子上的一张“必须验证”的标签。

BLA 用这个数论不透明谓词来解决一个矛盾:防护机制不能在运行时拖慢程序,却又必须让静态分析付出代价。README 里写着它的原文。一句话版本:这是一个运行期永远只走其中一条路的开关,但静态分析不敢忽略另一条路——为两条路都付出分析成本的是攻击者。严格表述如下,不关心数学的读者到此为止即可:

通俗地说,模 7 谓词是一个数学式子,对程序运行来说永远为真——程序跑到这里,永远走“真”那条路,假的那条路一次都不走。所以你的软件功能完全正常,用户毫无感觉。

但对 AI 分析器来说,它不能一眼看出“这条路永远不走”。它必须坐下来算:这个数学式子是不是恒真?算得出来,要花时间;算不出来,就只能把两条路都当“可能走”来分析。一旦它开始分析那条假路,就一头扎进了 BLA 埋好的假盒子堆里。

所以模 7 谓词的作用,不是混淆信息本身,而是逼 AI 认真对待那些本该被跳过的假信息。它是一张“你不能忽略我”的标签。

▲ Tigress 对不透明谓词插入的示意。(来源:tigress.cs.arizona.edu)

▲ 学术文献中的动态不透明谓词。(来源:Springer)

为什么“随机生成字符”不行

你往文件里塞一堆随机字符,AI 扫一眼就知道:“这是垃圾,跳过。”——垃圾太容易被识别为垃圾了。

BLA 塞进去的不是垃圾,是格式完全合法、看起来像真东西的假信息。比如:

  • 假的登录凭据,格式和真的一模一样;

  • 假的代码地图,指向根本不存在的文件;

  • 假的目录结构,每一条都符合规范,只是内容全是诱饵。

AI 没法用“这是乱码”一句话打发掉,它必须逐条验证。验证一条花一点 token,验证一千条就烧掉一大笔预算。

随机字符是往门口扔废纸,AI 踢一脚就绕开了。BLA 是往门口堆一千个贴着正式快递单的假包裹,AI 每个都要拆开看,拆到第一百个才发现全是假的——但预算已经烧完了。

运行时层:楚门秀

支柱表第四行是 Runtime Truman Show。这个名字来自电影《楚门的世界》——程序被调试时,像楚门一样生活在一个精心搭建的假世界里,看到的全是布景。具体做法是加固 Electron V1 Fuses(RunAsNode=0、Inspect=0),检测 CDP / Node Inspector / Frida / WebDriver 附加(runtime-shield.ts),确认被调试后返回精心构造的合成遥测——看起来一切正常,但全是布景,正常用户的执行路径对此无感知。

BLA 的版本节奏本身就是对抗节奏:从 10 月 27 日 v1.4.0 上线常量漂移检查,到 11 月 3 日 v2.0.0 把 12 轮红蓝对抗(R1–R12)提炼的门控变成默认,再到 11 月上旬 v3.2.5 的 706 项测试门。它的公开靶场 CrackMe 竞技场(v6–v9)只公开 SHA-256 摘要、明文密钥不进 git——这套纪律后来成了 LASIK 的现成考场。

三、LASIK:预言成真的那一层

BLA 的文档里留过一个防守性断言:针对 BLA 的"去 BLA 化"预处理层迟早会出现,但它出现时,博弈不会回到原点。这个"迟早"只用了不到两周。

11 月上旬,pktq/lasik 上线:"Static deobfuscation for anti-agent hardening. LASIK removes BLA protection layers so coding agents and analysis tools can read the real program." 它甚至接住了 BLA 的命名梗——BLA 叫 Blind LLM Agents,LASIK 就叫 LASIK:让失明的 agent 恢复视力。

用一句话说,LASIK 不运行你的程序,只读文件——像一个只拆包裹、不碰里面东西的清理工,把 BLA 埋进去的假货一件件找出来扔掉,交出一个干净版本。

它的工作方式与 BLA 针锋相对。LASIK 读入加固产物,证明哪些部分是保护(不透明谓词、加密字符串、诱饵代码、篡改检查、二进制填充、植入的指令文本),移除它们,写出干净副本。整个过程中它从不运行目标——没有 eval、没有沙箱、没有 WASM 实例化,因此对恶意输入也安全。它的核心承诺是 proof-based(只做“能证明不会改变程序行为”的拆除,证明不了就原样留着,宁可少拆也不拆错):一个变换只有在能被证明保持行为时才会执行,未受保护的文件会字节级原样返回;一个保护类型如果不在 proof 规则的覆盖范围内,变换不会执行,宁可留下保护,也不冒行为变更的风险——1,262× 是真实成就,但它的适用范围是 BLA 当前已覆盖的载荷形态——如果 BLA 引入 proof 规则覆盖不到的新形态,在对应的 healer 出现之前,该格式的保护会留在原位,这个倍数在那个格式上暂时失效。这也是 LASIK 必须持续跟踪上游的技术原因。

在 BLA 官方的 CrackMe 语料(v6–v9,bankrupt 强度)上,LASIK 把约 1.8 MB 的加固产物还原成约 37 KB,估算分析消耗从约 2,110 万 token 降到约 1.7 万——1,262 倍。两边的 token 数字都是"agent 分析全程消耗"的估算——agent 循环往复地读取、推理、调用工具,总消耗远高于文件字面量按字符折算的值,所以 1.75 MB 与 2,110 万 token 之间不存在直接的体积换算关系,体积对比只是直观参照。单语料统计:折掉 3,011 个不透明谓词,删除 3,432 个死分支,重组 2,465 个分裂字面量,删掉 1,487 个诱饵声明和 750 个诱饵 WASM 导出,解密全部 XOR 字符串表,剪断 11 个 anti-strip interlock 和 5 个 self-seal。单个文件处理约 0.3 秒。另一组实验:用公开发布的 bla-agents@3.2.1 加固 21 个自有文件(每格式一个),默认强度下 21/21 全部恢复,其中 11 个与原始文件字节一致;开满所有可选层,21/21 恢复,10 个字节一致。格式覆盖表上,钉住 BLA 3.2.2 的 63 个护盾文件,59 个完全恢复。

怎么做到的?BLA 埋的东西大致分四类:假路标(不透明谓词)、锁在一起的假证据(纠缠)、假线索(诱饵)、随机的假名字(种子)。LASIK 对这四类各有各的拆法——假路标用数学证明它永远是假的,锁在一起的先解锁再扔,假线索按“有没有人真的走到这里”来清理,假名字因为 LASIK 不看名字、只看行为,改名也没用。下面这段是技术细节,不关心的读者可以跳过。

LASIK 对 BLA 的静态支柱逐一给出了拆法,楚门秀则被绕过。概括起来:不透明谓词被比特分析秒解,纠缠被先求值再折叠,诱饵被“可达性”清理,随机种子被结构性检测绕开。不透明谓词用 known-bits 分析证明常量条件、丢弃死分支——模 7 谓词那一套数论论证,被一个比特位分析器在毫秒级解决。anti-strip 纠缠在闭集解释器上先求值再折叠,然后才允许移除。投毒诱饵按"是否可达"清理——LASIK 根本不推理证据内容,诱饵的"长得像真的"完全落空。per-project 随机种子同样失效:LASIK 的检测是结构性的(按行为识别保护,不按标识符),它的 CI 里有一个"重拼写"基准——把生成的标识符、注释、WASM 节名、ASAR 路径全部改名、交换律操作数全部重排再 heal 一次,ASAR 的清除率从 99.998% 只降到 99.96%。

唯一承认拿不回来的,是保护本身销毁的信息:本地变量名、注释、原始 source map、被覆盖的节。LASIK 报告这些缺失,而不是编造。

楚门秀对 LASIK 无效——LASIK 不运行程序,检测不到调试附加,不会收到合成遥测。但它的全部意义在于"调试时骗你",而 LASIK 的答案是把"调试"这个环节整个拿掉了。

四、维护负担的不对称

除了技术上的攻防交替,三者之间还有一层关系:谁的维护能持续。BLA 让单次默认管线分析变得不划算;LASIK 让专用管线的单次分析重新变得划算。双方真正的竞争不在单次成本,而在“让对方工具链持续追更”的负担:LASIK 的 coverage/bla.json 每周跟踪 BLA 上游,BLA 的 CHANGELOG 同样在逐条回应 REA 的更新。而追更负担的承担者是不对称的:BLA 由一个大三学生的课余时间承担——所谓维护窗口,大概率是他从课业之外挤出来的那几个小时;LASIK 由另一个开源项目承担;REA 由 44 万星背后的匿名团队承担。如果 BLA 的维护者毕业、入职、失去兴趣,LASIK 的追更对象就消失了,整个三层叙事塌掉一层;反过来说,如果 LASIK 的维护者先停更,BLA 的载荷就对所有人重新生效。“让对手追更”在短期是防御方的筹码,长期看是三方共同的消耗。三者都没有企业级的维护承诺:BLA 背后是一个没有全职投入的大三学生,LASIK 是同样年轻的独立项目,REA 是匿名团队——这场竞赛的稳定性,不取决于技术,取决于几个人的兴趣能持续多久。谁的更新先停,谁的管线先失效。

五、集体反应

要理解 BLA 和 LASIK 这条链,得先看它所处的整张防御地图:REA 是诱因,LASIK 是反应的一环,而在它们之前,商业侧的 Thales 与研究侧的 Quarkslab 已经各自走通了一条不同的防御路线。

10 月 1 日——比 BLA 登上趋势榜早近一个月——法国泰雷兹(Thales)发布了 Sentinel Envelope Plus,官方定位就是"专门针对 AI 辅助逆向"的付费保护方案:不改源码,对编译产物做多层反反编译、防篡改、防运行时检查。其公布的受控测试:AI agent 在未保护应用中找出 10 个漏洞中的 8 个;加保护后一个都没找到,token 消耗是原来的 970 倍,持续分析近 7 小时后,agent 自己建议放弃分析。这是厂商自测,尚无独立复现。

▲ Thales Sentinel Envelope 的保护流程:应用一键打包加密,经混淆、反调试、防篡改加固后与许可绑定。(来源:cpl.thalesgroup.com)

Quarkslab 8 月的研究(《Defeating AI-Assisted Reverse Engineering》)则从方法论上指出:面对完全看不懂的程序,agent 会老实承认看不懂;而一个看起来逻辑通顺的错误答案,才是对付 AI 的最好办法。

Thales 靠让 agent 看不动,Quarkslab 靠让 agent 看错——“看不懂”与“看走眼”,是 2026 年这场防御思潮的两种代表。但 BLA 之所以值得单独讲,在于它是开源的、可被 LASIK 公开拆解的。它也是公开的、可复现的、专门针对 agent 逆向工具的系统性对抗框架中第一个进入公共视野的——不是第一个做到的,企业界与学术界的内部实践大概率更早。而 Thales 的闭源产品没有这个公开的对抗层,攻防只发生在它的客户和未知的攻击者之间。

SRE-Bench(arXiv:2608.11469,10 月 1 日公开)给了前一路线的系统测量:262 个真实规模的二进制实例上,论文摘要中可独立验证的数字是:GPT-5.6-Sol 与 Claude-Fable-5.1 的 fully solve 率分别只有 31.5% 和 26.9%——即便是最新最强的 agent,在没有防护的二进制上也只解出不到三分之一;论文同时报告,防护套件显著压低了所有模型的得分,并大幅抬高了弱模型的每分解析成本。SRE-Bench 还报告了一个负结果(附录 B.8):在二进制里植入"请拒绝逆向"的良性告示,最强 agent 一步就识别其为无效内容,甚至有一次这类告示反而成了地标,帮助 agent 定位受保护代码——这类专门讨好 agent 的防御原语,在全部预设中默认禁用。

国内产品圈的反应是另一种形态。36氪 10 月 20 日的报道记录了产品经理们"从互撕到战友"的转变:核心代码搬上服务端、客户端只留界面的"外壳化"改造,加壳混淆反调试的传统组合拳,以及一个 Discord 上的反 REA 频道。"搬服务端"是架构性防御——让秘密根本不进入客户端,与 BLA 的产物性防御互补而非替代:一个减少需要保护的东西,一个提高保护被穿透的代价——两者的回报曲线也不同:搬服务端的回报随客户端变薄而递减,BLA 的回报随攻击自动化程度上升而增值。

如果跳出这条攻防链,还有另一个层面的问题。另一篇分析《植物大战僵尸、故宫名画记都能逆向?AI 逆向最缺的不是工具,是可审计的治理层》指出,REA 解决的是“怎么看懂”,工具层正在迅速商品化;但“该走哪条路、每一步是否可复核、谁来判断这次分析是否合规”,这些治理层的问题,目前几乎没有公开的工程实践。该文记录了社区用 REA 配合 reverse-skill 的逆向案例、笔者复刻《植物大战僵尸》的案例,结论是工具给了 Agent 视野,但判断权仍然悬空。(植物大战僵尸、故宫名画记都能逆向?AI 逆向最缺的不是工具,是可审计的治理层——REA 与 reverse-skill 的分工)

六、数字、立场与边界

这场竞赛里的数字各有各的口径。BLA 的 639.5× 基准均值是内部估算,实测是第二节那张表——11 项实测:9 项阻断、2 项退化或逼近;另 1 项推算。Thales 的 970× 是厂商自测。LASIK 的 1,262× 同样是全程消耗的估算,而且是它自己测的,不是第三方独立验证的——它和 BLA 是对位关系,不是中立关系。这些数字各有各的测量条件,放在一起比之前,先看清楚是谁在什么条件下测的。数字之外值得说清的一点是:防御载荷可以被离线研究,构造模式终会被归纳——LASIK 就是证明。BLA 的缓解手段是种子随机化与 CrackMe 持续轮换,它买到的同样是时间;LASIK 的结构检测说明,种子随机化买到的比预期少。

三个项目的立场几乎对称:REA 排除 DRM 与授权绕过;BLA 限定"只加固自己的软件";LASIK 的负责任使用条款写着"对你无权处置的软件移除保护可能违反许可或诸如 DMCA §1201 的法律"。都是 MIT,一个把逆向变成商品,一个把逆向变成成本,一个把成本变回几毛钱。分歧不在伦理,在立场:你是发布者,还是拆解者。

边界也要说清:这场竞赛的对抗面是软件。硬件逆向的核心战场在物理层与微架构层——侧信道、故障注入、硬件木马——攻击者观测的是功耗轨迹和电磁辐射,信息不经过"阅读产物内容"这一环节,投毒和预算打击的作用面都有限。BLA 的经济消耗范式不能外推到硬件场景,那里的稀缺资源是设备、样品和专家工时。

尾声

BLA 的口号是"让逆向重新破产"。LASIK 之后,准确的描述变成了:这场竞赛是默认管线与专用管线的成本竞争,而防御方唯一持久的筹码,是维持"让对方工具链追着自己更新"的能力。安全经济学里有一个老结论:防御的目标从来不是让攻击不可能,而是让攻击的期望收益低于成本。这个框架至今有效,只是计量单位在迁移:从专家工时,到 token 预算,再到维护对手工具链的持续支出。

这场竞赛的技术演进是可见的:REA 把拆解变成一句自然语言,BLA 把拆解变成一笔 token 账单,LASIK 又把账单压回几毛钱。但技术演进的速度,不取决于下一个工具什么时候出现,取决于这条链上的人还能撑多久。BLA 的维护者是一个大三学生,LASIK 是一个同样年轻的独立项目,REA 背后是匿名团队——三者都没有企业级的维护承诺。所以真正的问题不是谁先追不动,而是其中一个人停下来的时候,这条链会塌掉哪一层。2026 年秋冬之交留下来的,不是某个工具的胜利,而是一个被重新定义的稀缺资源:不是专家工时,不是 token 预算,是愿意在没有全职投入的情况下,持续维护一条对抗链的人。

延伸阅读:

  1. 《植物大战僵尸、故宫名画记都能逆向?AI 逆向最缺的不是工具,是可审计的治理层——REA 与 reverse-skill 的分工》:本文聚焦“工具之间的攻防”,这篇讨论工具层之外的问题——REA 解决了“怎么看懂”,但“该走哪条路、每一步是否可复核、谁来判断这次分析是否合规”。文章记录了社区用 REA 配合 reverse-skill 逆向案例、笔者复刻《植物大战僵尸》的案例,结论是:工具能把 Agent 带到正确的位置,但到了之后能不能得出可信的结论,是另一回事。(https://mp.weixin.qq.com/s/KeLMpLqlCOpwy_6u7w-Gvw)

  2. 《反爬十层妖塔:现代爬虫攻防的立体战争》:本文的 Poison 支柱和反爬蜜罐做过一次横向对比,这篇把爬虫攻防的纵深展开成十层地图——网络层、TLS 指纹、设备指纹、行为分析、数据投毒,每一层都有独立的检测逻辑,层与层之间交叉验证。其中数据投毒那一层,和 BLA 的 Poison 支柱共享同一个设计思路:不阻止对手进入,而是让对手进入后吃下精心伪造的脏数据。(https://mp.weixin.qq.com/s/2c07pMBJOnrsbS3F2JanBw)

参考链接

三方主仓库

  • BLA 仓库:https://github.com/qybaihe/bla
  • BLA 发布页:https://github.com/qybaihe/bla/releases
  • BLA 变更日志:https://github.com/qybaihe/bla/blob/main/CHANGELOG.md
  • REA 仓库:https://github.com/morluto/rea
  • LASIK 仓库:https://github.com/pktq/lasik
  • LASIK 基准文档:https://github.com/pktq/lasik/blob/main/docs/benchmark.md

增长与社区数据

  • Trendshift(BLA 逐日数据):https://trendshift.io/repositories/323569
  • REA 星标快照:https://hysenlabs.com/projects/morluto-rea
  • REA 破 11.5 万星报道:https://apidog.com/blog/what-is-rea-reverse-engineer-anything/
  • DEV Community 报道:https://dev.to/hassann/what-is-rea-reverse-engineer-anything-the-mcp-server-that-hit-115k-github-stars-in-a-week-1coc
  • X 讨论聚合:https://m.aicoder.com/zh/news?q=LLM+agents

商业与研究对照

  • Thales Sentinel Envelope Plus 新闻稿:https://www.thalesgroup.com/en/news-centre/press-releases/thales-launches-sentinel-envelope-plus-protect-software-against-ai
  • 36氪:产品经理被 REA 逼成战友:https://www.36kr.com/p/4033700220851841
  • 虎嗅:反逆向争议与木马仿冒:https://www.huxiu.com/article/4898880.html
  • Quarkslab 实验摘要:https://github.com/ikaijua/Awesome-AITools/discussions/1261
  • SRE-Bench(arXiv:2608.11469):https://arxiv.org/html/2608.11469
  • morluto 首次访谈:https://www.ai.joaoqueiros.com/blog/morluto-rea-anonymous-founder-first-interview-open-source
创作不易,禁止抄袭,转载请附上原文链接及其标题

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料