这篇帖子难得干净:arXiv 号、三位作者、每个数字我都核过原文,全对。单位还有个小彩蛋——Chang Liu 和 Micinski 在 Syracuse,Raff 在 CrowdStrike,跟网上旧档案都对不上,谁按老资料去"纠正"帖子谁反而错。
全对之下,藏着全文最锋利的一对数字:LLM 精修把 Ghidra 的编译成功率从 75% 抬到 90%,行为匹配率却从 74% 掉到 62%,McNemar 检验 p=0.002。产出越漂亮,保真越差,这两条线是贴着交叉的。
论文里的例子够狠。ExeBench 的 decode6 自带 10 个测试,参数全落在 [0,124],永远碰不到末段那个分支。SK2Decompile 十发全中,100 个压力输入只对 70 个;LLM4Decompile 对 66 个;原始 Ghidra 和 Hex-Rays,100 对 100。丑占位符全对,漂亮的惯用 C 反而错。
大盘也是这个方向:12,133 个通过自带测试的候选里 4.9% 偏离原实现,其中 77% 连崩溃痕迹都不留。287 个 CVE 函数上,8.7% 的已披露漏洞(25 个,95% CI 6.0–12.5)在反编译输出里安静失忆。还有个镜像数字:1.2% 没过自带测试,行为却是对的。自带测试在两个方向上都不可靠。
打个表匠的比方:传统反编译器像诚实的修表匠,修不动就留个开口,告诉你这我不会;LLM 像把表壳抛光到能照镜子,机芯换了零件,敲表壳的验收听不出来。Decompile-Diverge 的思路是把验收从敲表壳换成对走时:给每个函数合成驱动器,从参考实现长出 fuzzing 语料,同一批输入重跑两边。
补一条实用信息:论文承诺放出一个 portable 版本,我在 GitHub 搜 decompile-diverge。0 条。想抄作业的先等等。