跨架构二进制克隆代码检测与基于代码重用的修补技术研究
发布时间:2021-08-27 01:10
二进制克隆代码检测(也称为相似性比较)与代码修补技术在软件安全以及软件工程领域有诸多应用。二进制克隆代码检测技术旨在寻找二进制代码之间相似或者相同的代码片段,分析人员由此可以复用已知代码的特性和已有的分析结果,快速理解对象代码,该技术可用于检测已知漏洞代码、推断恶意软件家族、检测代码抄袭等;二进制代码修补技术用以修补二进制程序中的缺陷代码,在源代码缺失的情况下,该技术对于代码补强、遗产代码维护等有着重要意义。然而,以上技术当前仍然主要依靠人工分析实现,已有的方法在分析精度、效率上还存在许多不足,在现实复杂的代码分析情境下捉襟见肘,因此,我们需要在已有工作的基础上更进一步,提高二进制克隆代码检测的精度以及二进制代码修补的质量,同时兼顾分析效率,增强以上技术在应对现实应用时的鲁棒性,以期降低人工成本、减少人为错误、提高劳动生产率。本文提出了在不同指令架构集上检测二进制克隆代码以及基于代码重用修补二进制代码的方法。对于二进制克隆代码检测,本文基于语义代码特征,分别用动态插桩、静态模拟执行和重用运行时信息模拟执行的方法处理二进制程序理解、相似代码比较以及目标代码搜索的问题;对于二进制代码修补,...
【文章来源】:上海交通大学上海市 211工程院校 985工程院校 教育部直属院校
【文章页数】:156 页
【学位级别】:博士
【部分图文】:
–5 NConvert v6.17函数png_set_PLTE析取的简化控制流图
接下来,BinPatch借助C的运?时值模拟执?D,并且提取相关的路径条件。当D访问全局变量或者堆变量时,BinPatch根据访问顺序依次将C的相关值借?过来,?函数的返回值也被?类似的?法处理;当D访问了?法地址时,?如因为栈溢出导致返回地址被覆写,BinPatch就停?模拟。图6–3分别展?了从libpng v1.6.20和NConvert v6.17的函数png_set_PLTE执?获取的路径条件。在每幅?图中,被执?的汇编代码被展?在左侧,其中条件分?指令都被点线框标记出来了,展?在右侧的则是BinPatch从这些指令中提取相应的路径条件。对于路径条件的每?个条?(??),前两个元素是(模拟)执?时参与条件判断的操作数运?时值,?第三个元素则是该条件判断的条件码,说明前两个操作数被?较的?式(Z:零、L:?于、BE:?符号数的?于或等于),最后?个元素是条件判断的结果。
BinPatch?先需要预处理路径条件以?便后续的对齐,算法6–7展?了相关伪代码。算法6–7路径条件的预处理算法BinPatch将路径上所有条件判断都转换成语义等价的严格不等关系(第4-5?),即严格?于关系(<),?如图6–3(b)原本最后?个条件判断的条件码是BE,BinPatch将其改写成B,则原本的操作数就需要交换位置,?较结果也同样需要置反;此外,对于对于路径上的条件的每?个变量,BinPatch也会通过值集分析获得其所有可能的值[188,189],图6–4展?了图6–3中条件判断变量的值集分析结果,arg_*表?函数的参数。之后,BinPatch分别识别PC和PD中的组合逻辑(第10?)。对于?进制代码,其实现组合逻辑的顺序可能是不同于其对应的源代码的,这都由编译器及编译配置决定(?如优化选项)。以png_set_PLTE为例,其析取在图6–3(b)中是以逆序的形式实现的,即?先检查的是info_ptr,?后才是png_ptr,?在图6–3(a),实现的顺序则是和源代码?致的顺序,所以在对齐组合逻辑时,BinPatch只考虑其内容,?不管其中各个?逻辑的具体实现顺序。图6–5展?了以上析取的简化控制流图,两个条件判断被认为属于同?组合逻辑,当它们所在基本块bb_0和bb_1满?:
本文编号:3365339
【文章来源】:上海交通大学上海市 211工程院校 985工程院校 教育部直属院校
【文章页数】:156 页
【学位级别】:博士
【部分图文】:
–5 NConvert v6.17函数png_set_PLTE析取的简化控制流图
接下来,BinPatch借助C的运?时值模拟执?D,并且提取相关的路径条件。当D访问全局变量或者堆变量时,BinPatch根据访问顺序依次将C的相关值借?过来,?函数的返回值也被?类似的?法处理;当D访问了?法地址时,?如因为栈溢出导致返回地址被覆写,BinPatch就停?模拟。图6–3分别展?了从libpng v1.6.20和NConvert v6.17的函数png_set_PLTE执?获取的路径条件。在每幅?图中,被执?的汇编代码被展?在左侧,其中条件分?指令都被点线框标记出来了,展?在右侧的则是BinPatch从这些指令中提取相应的路径条件。对于路径条件的每?个条?(??),前两个元素是(模拟)执?时参与条件判断的操作数运?时值,?第三个元素则是该条件判断的条件码,说明前两个操作数被?较的?式(Z:零、L:?于、BE:?符号数的?于或等于),最后?个元素是条件判断的结果。
BinPatch?先需要预处理路径条件以?便后续的对齐,算法6–7展?了相关伪代码。算法6–7路径条件的预处理算法BinPatch将路径上所有条件判断都转换成语义等价的严格不等关系(第4-5?),即严格?于关系(<),?如图6–3(b)原本最后?个条件判断的条件码是BE,BinPatch将其改写成B,则原本的操作数就需要交换位置,?较结果也同样需要置反;此外,对于对于路径上的条件的每?个变量,BinPatch也会通过值集分析获得其所有可能的值[188,189],图6–4展?了图6–3中条件判断变量的值集分析结果,arg_*表?函数的参数。之后,BinPatch分别识别PC和PD中的组合逻辑(第10?)。对于?进制代码,其实现组合逻辑的顺序可能是不同于其对应的源代码的,这都由编译器及编译配置决定(?如优化选项)。以png_set_PLTE为例,其析取在图6–3(b)中是以逆序的形式实现的,即?先检查的是info_ptr,?后才是png_ptr,?在图6–3(a),实现的顺序则是和源代码?致的顺序,所以在对齐组合逻辑时,BinPatch只考虑其内容,?不管其中各个?逻辑的具体实现顺序。图6–5展?了以上析取的简化控制流图,两个条件判断被认为属于同?组合逻辑,当它们所在基本块bb_0和bb_1满?:
本文编号:3365339
本文链接:https://www.wllwen.com/kejilunwen/ruanjiangongchenglunwen/3365339.html