Beyond Text Matching: Towards Reference-Free Evaluation for Human-Oriented Binary Reverse Engineering
本文介绍了 BinJudge,这是一个针对面向人类的二进制逆向工程(Human-Oriented Binary Reverse Engineering)的可扩展且具成本效益的无参考评估框架,它采用了一种轻量级的路由机制来自适应地选择最优的 LLM-as-a-Judge 配置,与传统指标相比,显著提高了与人类专家的相关性。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你正试图阅读一条被加密、去除了标点符号、并抹去了所有相关人员姓名的秘密信息。这就是安全专家在试图理解被编译成“二进制”代码(即运行在你手机或笔记本电脑上的原始机器可读指令)的计算机程序时所面临的情况。通常,这些程序会附带一份非常有用的“源代码”手册,但当黑客或恶意软件作者想要掩盖行踪时,那份手册就消失了。专家们必须使用专门的工具将这些混乱的二进制代码翻译回看起来像代码的形式,但结果往往看起来像是一堆由数字和诸如“sub_401B20”之类的通用名称组成的混乱堆砌。为了理解这些内容,他们需要将其改写成一个对人类友好的故事,这个过程被称为“面向人类的二进制逆向工程”。但棘手的地方在于:你如何知道这个经过清理后的新故事是否真的好?你不能仅仅让计算机去计算有多少单词与一个完美的答案相匹配,因为那个完美的答案并不存在(原始手册已经丢失了)。而要求人类专家阅读每一行代码又太慢、太贵,而且他们会感到疲劳。所以,大问题是:我们能否教给一个超级聪明的 AI 扮演裁判的角色,在不需要与原始手册进行对比的情况下,告诉我们翻译得好不好?
这篇论文深入探讨了这个问题,研究了大型语言模型(LLM)——也就是那些可以写诗或解数学题的同类 AI——是否可以作为这些混乱代码翻译的“裁判”。研究人员发现,这些 AI 裁判在理解代码的“含义”方面确实比传统的计算机指标(仅关注单词匹配)要出色得多。事实上,AI 裁判与人类专家的意见一致率达到了 63.20%,而旧有的计算机方法的一致率仅为 35.04%。然而,论文也发现了一个令人惊讶的转折:并没有一种适用于所有情况的单一“最佳” AI 设置。有时,特定的 AI 模型配合特定的提问方式在命名函数时表现极佳,但在总结代码时却表现糟糕。这就像尝试用一双鞋去跑步、游泳和徒步一样;你需要针对不同的工作配备合适的装备。
为了解决这个问题,作者构建了一个名为“BinJudge”的聪明系统。把它想象成一个智能交通控制器,它会观察每一段特定的代码,并立即挑选出完美的 AI 裁判和最佳的提问方式。这个系统并不只是为所有人挑选一个“最佳”裁判;它会根据情况实时调整。通过这种方式,BinJudge 成功地与人类专家更加接近(将一致性提高了高达 24.7%),同时也节省了大量的资金——其成本仅为使用最昂贵的静态设置的极小部分(在 0.06 到 0.84 倍之间)。论文证明了虽然我们不能只靠一个“魔法按钮”来解决所有问题,但我们可以构建一个聪明、灵活的系统,使评估这些复杂的代码翻译变得快速、廉价且出奇地准确。
背景:解码被加密的消息
在我们进入正题之前,先通过几个关键概念来铺垫一下背景。
二进制逆向工程(Binary Reverse Engineering) 就像是在试图重建一个已经被烘焙、压扁并刮掉了所有糖霜的蛋糕。你拥有最终产品(二进制文件),但你没有食谱(源代码)。专家们使用工具来逆转这个过程,将机器代码转回看起来像编程代码的形式。然而,由于原始“食谱”已不在,结果往往是混乱的。
面向人类的二进制逆向工程(Human-Oriented Binary Reverse Engineering, HOBRE) 是下一步。它是指将那些混乱的、机器化的代码进行润色,使其真正具备可读性的艺术。这包括为函数赋予酷炫且具有描述性的名称(而不是“sub_401B20”)、编写清晰的摘要来解释代码的功能,并调整结构使其看起来像一个写得很好的故事。
评估问题:如何知道“润色”是否奏效?
- 旧方法(文本匹配): 想象一下,通过计算学生作文中有多少单词与老师的答案对照来评分。如果学生说“猫跑得很快”,而答案是“猫科动物疾驰”,旧的计算机方法会说:“错误!零分!”因为它认为单词不匹配。这对代码来说很糟糕,因为表达同一个意思有很多种方式。
- 人类方法: 人类专家阅读代码并说:“是的,这很有道理。”这是“金标准”,但它速度慢、成本高且难以规模化。
- 新想法(LLM 作为裁判): 如果我们请一位读过数百万本书籍和代码片段的 AI 来充当老师呢?AI 不仅仅是计数单词,它能理解“含义”。它知道“猫”和“猫科动物”是同一个意思,并且它能判断出一个摘要是在解释代码,还是仅仅听起来很高大上。
论文的历程:测试 AI 裁判
由 Xiuwei Shang 领导的研究团队决定对这个“AI 裁判”的想法进行测试。他们不仅仅是凭直觉猜测,而是构建了一个大规模、高质量的实验场,称为 BinJudgeBench。
构建实验场:
他们提取了 51 个真实的软件项目,将其编译成二进制代码,然后剥离了所有有用的名称和注释。随后,他们要求 8 种不同的 AI 模型尝试修复这些代码。为了衡量谁做得更好,他们请了三位人类专家(本质上是代码侦探)来阅读结果,并按 1 到 5 分进行评分。他们检查了以下内容:
- 它是否有意义?(语义正确性)
- 它是否能帮助人类更快地理解代码?(实用性)
- 它的写作是否符合自然的人类风格?(习语化)
这创建了一个包含 1,200 多个精心评级示例的“金标准”数据集。
第一个发现:AI 裁判 vs. 旧指标
团队将 AI 裁判与旧有的“单词计数”指标进行了对比。结果显而易见:AI 裁判在理解人类层面的事物方面表现得更好。
- AI 裁判与人类专家的意见一致率为 63.20%。
- 旧的计算机指标一致率仅为 35.04%。
这表明 AI 实际上能够“理解”代码的含义,而不只是拼写。这就像是一个只会数你说了多少次“你好”的机器人,与一个能理解你是在热情打招呼的朋友之间的区别。
第二个发现:“一劳永逸”的迷思
有趣的地方就在这里。研究人员测试了 AI 裁判的不同设置:
- 不同的模型: 有些 AI 非常庞大且昂贵(如 GPT-4o),有些则较小且更便宜。
- 不同的提示词(Prompts): 有些被要求直接给出分数(零样本学习/Zero-Shot),有些则展示了什么是“5分”或“1分”的例子(少样本学习/Few-Shot),还有些被要求逐步解释其推理过程(思维链/Chain-of-Thought)。
- 不同的温度值(Temperatures): 这控制了 AI 在回答时的“创造力”或“随机性”。
他们发现,不存在单一的最佳设置。
- 对于某些任务,比如总结代码,展示示例(Few-Shot)效果最好。
- 对于其他任务,比如命名函数,要求 AI 进行逐步思考(Chain-of-Thought)能帮助较小的模型表现得更好。
- 有时,一个庞大且昂贵的模型是最好的;而另一些时候,一个较小且便宜的模型也同样出色。
这意味着你不能只选一个“最好的”AI 就应付所有事情。这就像试图用一把大锤去修理一块手表;有时你需要一把精细的小螺丝刀,有时则需要一把重锤。
解决方案:BinJudge(智能交通控制器)
既然没有单一的最佳设置,团队便构建了 BinJudge。这是一个轻量级的系统,充当智能路由器的角色。
- 它观察一段特定的代码。
- 它问自己:“对于这段特定的代码,哪种 AI 模型和哪种提问风格效果最好?”
- 它挑选出该特定组合,并将代码发送给对应的裁判。
BinJudge 的结果:
- 更高的准确度: 通过为每项工作挑选合适的裁判,BinJudge 比起使用单一的静态设置,将与人类专家的协议度提高了 4.5% 至 24.7%。
- 更便宜: 由于它经常在小型、廉价的模型足够好时选择它们,因此它将成本降低到了使用最昂贵的“最佳”设置成本的 0.06 倍至 0.84 倍 之间。
这意味着什么
论文得出结论,我们不需要在每一段代码上都依赖昂贵的人类专家,也不必屈从于那些只会数单词的愚笨计算机指标。我们可以使用 AI 裁判,但我们必须聪明地使用它。我们不能只选一个“最好的”AI,我们需要一个能够适应的系统,为不同的工作选择合适的工具。
作者谨慎地指出,虽然 AI 裁判很棒,但它们并不完美。如果代码过于模糊,或者 AI 变得过于“流畅”但实际内容错误,它们有时也会产生困惑。但总的来说,这项工作表明,通过一个合适的自适应系统,我们可以以快速、廉价且极其接近人类专家水平的方式来评估代码翻译。这是让黑暗、混乱的二进制世界变得对每个人都更具可读性的重要一步。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。