语义功能识别:SimID的评估与挑战
在软件开发和安全分析领域,准确识别程序中的功能是一项重要任务。SimID作为一种通过程序的确定性输入 - 输出行为来语义识别程序功能的方法,在面对代码混淆时的表现备受关注。本文将对SimID在代码混淆环境下的评估结果进行详细介绍,并分析其局限性。
1. 代码混淆技术
在评估SimID之前,我们先来了解一下所使用的代码混淆技术。这些技术旨在增加程序的复杂性,从而保护软件的知识产权或防止自动化分析。
- 替换(Substitution,s) :该技术用语义相等但更复杂的操作符或指令序列替换标准的操作符或指令序列。虽然这种保护相对简单,但能为受保护的程序增加多样性。
- 虚假控制流(Bogus Control Flow,b) :此混淆技术使程序的控制流图看起来比实际更复杂。在OLLVM的实现中,会在基本块之前生成一个新块,其中包含一个不透明谓词和一个基于该谓词的条件跳转。不透明谓词无论输入如何,总是评估为相同的真值(真或假),这使得静态分析人员难以确定其属性。
- 扁平化(Flattening,f) :控制流扁平化技术通过去除结构化流来降低控制流图的深度。混淆器会生成一个调度器代码块,负责选择基本块的执行顺序。
- 虚拟化(Virtualization,v) :虚拟化技术将函数的代码转换为自定义字节码,并使用虚拟机替换原始函数。在运行时,虚拟机通过查找相应的机器码指令并执行来解释字节码。然而,这种技术会给程序带来显著的运行时开销,因为字节码解释非常耗时。
超级会员免费看
订阅专栏 解锁全文
51

被折叠的 条评论
为什么被折叠?



