如果你制作恶意软件,或者你的程序侵犯版权或违法审查条例,可能要遇到麻烦了。使用在二进制文件中仍旧包含的代码风格信息,可以绕过常见的混淆手段,识别程序员。
Aylin Caliskan-Islam在周二举行的第三十二届世界混沌通讯大会(Chaos Communications Congress)上介绍了这项工作,它的名称是解码匿名程序员:来自编译代码和源代码的可执行二进制文件。
这群来自普林斯顿大学的研究人员也在 arxiv 上发表了一篇名称为《当编程风格编译中存活:使用可执行二进制码解码匿名程序员》的文章,小组的一名程序员属于著名的美国陆军研究实验室(Army Research Laboratory)。
研究人员开始试图识别恶意程序员,并指出,在黑帽子和白帽子的代码写作风格之间没有“技术性区别”。换句话说,代码风格背叛了作者。
研究人员编译分析了一些C和C++的代码,变量命名等很多可识别元素在代码被编译之后都消失了,此外,编译器的优化流程有可能进一步改变程序的结构特性,将作者进一步混淆。
然而,在“通过机器学习的方式,使用可执行二进制文件和源码反编译的结果等一系列新的元素”研究可执行二进制文件的作者特征之后,研究人员能够揭示“源码中的很多语法特征确实存活过了编译步骤,可以使用反编译方式进行恢复”。
如上图所示,研究人员使用了“最先进的逆向工程方法”,“从每个可执行二进制文件中提取出了大量特征元素”,如果程序员使用这些特征向量,可以认为他们是代码的主人。
实际上,这需要先后查询 Netwide 反编译器和 Radare2 反编译器,然后使用“最先进的” Hex-Ray 反编译器和开源的 Snowman 反编译器,提取426个和代码风格有关的特征向量,以待比对。
随后,选择每位程序员的八组可执行二进制文件,训练随机森林分类器,生成作者代码风格的精确模型。之后,就可以使用该模型,“利用以前不可见的可执行二进制文件的向量表示”,确定代码作者。
研究人员指出:“我们对未经编译优化流程的可执行二进制文件能够实现78%的识别率,对经过编译优化的文件则可以实现64%的识别率。”
“我们还发现,如果从可执行二进制文件中删除符号信息,只会将识别率降低到66%,,降低程度如此之小,令人惊讶。这表明,代码风格能够经过复杂的转换而存活。”
未来,研究人员准备探讨代码风格“是否完全可以与可执行二进制文件剥离,保证程序员的匿名性”,此外,将这种识别方式用在真实世界中,“确定恶意软件的作者。恶意软件通过结合多态性和加密,实现了一种复杂的混淆方法。”
(责任编辑:安博涛)