姚新磊,庞建民,岳 峰,余 勇
(信息工程大学信息工程学院,郑州 450002)
代码相似度分析是检测源代码窃取和恶意代码变种的主要方式,其本质上依赖于对代码的描述和理解。现有对代码特征的描述有很多种,如特征码、指令序列、控制流图、API序列[1]、API依赖图[2-4]等,不同的描述方式代表着对代码实际逻辑的不同理解方式。但程序理解本身就是 NP问题[5],各种理解在实现上只能更大程度地接近代码的实际逻辑,为此一般要在描述上采取一定的精简策略。
正如多态引擎[6]在指令级采用垃圾指令插入、等价指令替换、指令顺序重排、寄存器随机等方式实现指令级特征的混淆,针对目前较为流行的API级行为分析,一些API级特征的混淆方式开始大量使用,如API噪声[7]、API顺序重排和等价API替换等。
针对此类混淆,文献[8]提出一种基于行为依赖的恶意代码相似度比较方法,首先在依赖图的构建阶段采用虚拟节点消除API序列重排混淆;然后在依赖图的预处理阶段手工构建等价API序列集合,在分析中若发现其中一个序列则,在等价序列集合中寻找统一表示的序列将其替换;最后在污点传播中对产生了污点但没有进行传播,或进行了传播但在传播过程中没有引起系统状态改变的噪声API进行消除。该方法有效解决一些 API级特征的混淆方式对相似度分析的影响,但也存在如下改进空间:
(1)对 API噪声的处理依赖于改变系统状态的函数集合,若一个API调用使用了污点数据而且改变了系统状态,则不被认为是噪声API,就不会从依赖图中删除。……