二进制与LLM的碰撞:反混淆技术的新尝试

互联网
2025
02/26
10:23
分享
评论

1. 前言

云鼎实验室在长期跟踪安全事件中发现,恶意软件为了逃避安全人员的分析,通常会采用混淆技术来隐藏其真实意图和逻辑。这类样本在分析过程中往往耗时耗力,即使使用相关工具,效果也有限且缺乏通用性。然而,Transformer模型的崛起为这一问题提供了新的解决思路。

Transformer最初是为了提升机器翻译的效果而提出的,后来在此基础上发展出的大型语言模型(LLM)已经能够完成对话、推理等复杂任务。而混淆技术的本质是通过复杂化原有逻辑来阻碍人脑的推理、“翻译”和总结过程,这类问题恰恰可以通过LLM得到统一解决。

2. 传统方法与不足

传统去除混淆方法分为静态和动态,以OLLVM为例[quarkslab et al.,2014]对其做过详细的分析,文中去混淆的方法主要是通过寻找控制平坦化,指令替换,虚假控制流的特征,比如找到控制流平坦化的switch 调度器、虚假控制流的条件等,然后进行模拟执行或者符号执行找出原始代码的逻辑。这类方法的局限性是每个混淆工具都需要找到类似上面的特征,然后进行还原,工程难度大且耗时。

3. 基于LLM的反混淆

提炼上述传统去混淆的思路,其基本流程可以概括为以下两步:

a. 人工分析并识别混淆特征;

b. 通过符号执行或模拟执行提取原始代码。

这两步工作可以借助现代大型语言模型(LLM)来实现。当前,LLM 已经具备了自动归纳和简单推理的能力,因此通过大量数据的训练,可以将多种编程语言及其去混淆的方法学习到一个统一的模型中。

逆向工程也是类似的工作,而 LLM 在预训练阶段已经学习了远超单个人类知识的内容,这正好可以弥补从低级语言(如汇编)转换到高级语言(如 C )过程中信息缺失的问题。

4. 领域模型训练

openai 在gpt3.5 提出了instructGPT 3步训练法:

image.png

经过我们的测试对于去混淆的这个任务直接进行第一步SFT即可。开始SFT训练之前需要生成相关的训练数据。为了或得高质量的混淆数据。我们开发了一个AutoGenerator的工具:

image.png

使用LD_PRELOAD 将AutoGenerator注入到编译时候的编译器中,提取原始的编译参数生成.o文件保证构建系统运行正常,然后在根据提取到的编译参数生成未混淆的代码、控制流平坦化、虚假控制流、指令替换的代码,最后去重生成训练需要的函数对各120W总计360W。

模型在32张A100微调后的效果:

输入混淆代码

image.png

模型输出

image.png

微调后的混元7B

image.png

GPT-4

展开与原始文件比较:

image.png

微调后的模型使用14组未训练的代码进行初步测试,准确率在90%以上,在这类问题上明显要比GPT的效果好。

5. 未来与展望:

随着大语言模型(LLM)技术的快速发展,例如DeepSeek通过放弃监督微调(SFT)并直接采用强化学习的创新训练方法来降低训练成本,LLM在工程实践中的落地应用正变得越来越近。展望未来,我们期待LLM在去混淆、逆向工程以及CTF(Capture The Flag)等领域的应用前景愈发广阔。这些技术的进步有望降低相关领域的门槛,使更多人能够参与到二进制安全的研究和实践中来。

6. 参考:

1.【deobfuscation-recovering-an-ollvm-protected-program】Deobfuscation: recovering an OLLVM-protected program - Quarkslab's blog

THE END
广告、内容合作请点击这里 寻求合作
免责声明:本文系转载,版权归原作者所有;旨在传递信息,不代表 的观点和立场。

相关热点

相关推荐

1
3
Baidu
map