一种基于SimHash算法的二进制文件快速比较方法技术

技术编号:15329470 阅读:72 留言:0更新日期:2017-05-16 13:08
本发明专利技术公开了一种基于SimHash算法的二进制文件比较方法,其步骤为:S1:利用IDA Pro的扩展功能,编写插件对二进制文件进行信息提取;所述信息包括二进制文件的汇编指令序列、控制流图、调用流图信息;S2:对提取到的二进制文件信息进行预处理;S3:对预处理过后的二进制文件信息进行关键字定义;S4:对提取到的关键字进行权重衡量;S5:利用提取到的关键字及其权重,计算函数的SimHash指纹特征,并对指纹特征进行存储;S6:基于查询后的相似结果,再采用基于结构化匹配的经典算法进行精确匹配。本发明专利技术具有通用性好、高效率、准确度高等优点。

A fast binary file comparison method based on SimHash algorithm

The invention discloses a method for comparison of SimHash algorithm based on binary file, which comprises the following steps: S1: IDA Pro by extended function, the binary file write plug-ins for information extraction; the information including a binary file compilation instruction sequence, control flow graph, flow graph information; S2: pretreatment of to extract binary file information; S3: after pretreatment of the binary file information by keywords definition; S4: the extraction of keywords and keyword weighting; S5: weight extracted by the SimHash fingerprint calculation function, and storage of fingerprint; S6: similar results after the query based on the accurate matching algorithm based on classical structural matching. The invention has the advantages of good versatility, high efficiency and high accuracy.

【技术实现步骤摘要】
一种基于SimHash算法的二进制文件快速比较方法
本专利技术主要涉及到计算机系统安全
,特指一种基于SimHash算法的二进制文件快速比较方法。
技术介绍
随着计算机技术的飞速发展和互联网的广泛应用,软件自身的规模也随着功能的多样性而变得越来越大。日趋丰富的功能在给用户带来良好体验的同时,也带来了诸多安全问题。同时,一定规模的软件难免会使用第三方的组件,而第三方的组件往往缺乏源代码:如微软系统的动态链接库文件,欲对这样的软件进行代码审查,逆向工程手段几乎是唯一的选择。在逆向工程中,静态分析的主要任务是全部或部分恢复二进制文件中被完全抹除的函数和数据信息,为后续版本的系统分析、设备攻击和控制利用的关键点定位等工作奠定基础。但由于当前软件版本众多、规模庞大,使这项工作越来越无法依靠人力来完成。因此自动化逆向需求应运而生。在这其中所用到的主要方法就是二进制文件的比对技术。目前,常用的二进制文件比对方法大致有四种,分别是基于源文件的二进制字节内容比较、基于源文件反汇编后的汇编指令比较、基于汇编指令的相似性图形比较和基于汇编指令的结构化图形比较。这几种方法按照先后顺序不断克服前面方法存在的缺陷,但对于一些大型复杂的二进制文件而言,这些方法仍存在着不足。现有的二进制比较方法中,除直接比较二进制内容的方法外,大都采用了:提取特征,遍历函数集合寻找匹配函数,迭代修正匹配结果的三步走流程。对于两个二进制文件A和B。假设N(A)表示A中函数的个数,N(B)表示B中函数的个数,t表示两个特征签名比较所需要的时间,n表示循环迭代次数。则该算法流程的时间复杂度大致为O(n*N(A)*N(B)*t)。虽然后续的一些方法做了改进,能逐步缩小比较的集合,但从整体时间复杂度上分析,并没有明显的提升。对于某些大型软件而言,反汇编后的函数集合往往为几十万甚至上百万,对于这些软件而言传统方法的比较次数达到了1010~12次(不计较特征匹配时间和迭代次数),这样的时间效率令人无法接受,需要一种新的方法能缩小比较的集合,只计算那些可能相似的函数之间进行匹配。
技术实现思路
本专利技术要解决的技术问题就在于:针对现有技术存在的技术问题,本专利技术提供一种通用性好、具有较高效率和准确度的基于SimHash算法的二进制文件比较方法。为解决上述技术问题,本专利技术采用以下技术方案:一种基于SimHash算法的二进制文件比较方法,其步骤为:S1:利用IDAPro的扩展功能,编写插件对二进制文件进行信息提取;所述信息包括二进制文件的汇编指令序列、控制流图、调用流图信息;S2:对提取到的二进制文件信息进行预处理;S3:对预处理过后的二进制文件信息进行关键字定义;S4:对提取到的关键字进行权重衡量;S5:利用提取到的关键字及其权重,计算函数的SimHash指纹特征,并对指纹特征进行存储;S6:基于查询后的相似结果,再采用基于结构化匹配的经典算法进行精确匹配。作为本专利技术的进一步改进:在步骤S3中,对关键字的定义考虑:单个指令、基本块、基本路径;取单个指令的操作码和操作数作为关键字,用SPP算法计算每个基本块的SPP值,基本路径的SPP值作为关键字。作为本专利技术的进一步改进:在步骤S4中,关键字重要性程度为:基本路径>基本块>单个指令;对于单个指令而言,其操作码和操作数的权重为1;于基本块而言,其权重为其SPP值;对于基本路径而言,其权重为该路径所经过的指令数目。作为本专利技术的进一步改进:在步骤S3的详细流程为:S301:对控制流图进行分割块合并;S302:对指令序列进行寄存器模糊化处理;S303:对指令序列中的地址信息进行重定向。作为本专利技术的进一步改进:在步骤S301中,CFG中当一个基本块只有一个子块,且该子块也只有一个父块时,这两个基本块就被定义为分割块;假设函数F中所有基本块的集合为B,p(a)为CFG中基本块a的父节点的集合,c(a)为CFG中基本块a的子节点的集合,e(a,b)为CFG中以a为起点,b为终点的一条边,流程为:i.遍历集合B中的基本块;如果已遍历完,则跳转到步骤v;否则,从集合B中取基本块b,执行步骤ii;ii.如果基本块b的子节点集合c(b)的大小为1,执行步骤iii,否则返回i;iii.令a=c(b),如果基本块a的父节点集合p(a)的大小为1,执行步骤iv,否则返回i;iv.将b和a合并为新的基本块c;同时,移除边e(b,a),{e(x,b)|x∈p(b)}和{e(a,x)|x∈c(a)};并建立新的边{e(x,c)|x∈p(b)}和{e(c,x)|x∈c(a)};同时将基本块c加入集合B中,返回步骤i;v.结束。作为本专利技术的进一步改进:在步骤S303的流程为:i.对于代码段跳转指令而言,在提取特征值时忽略指令后的偏移地址,选择目的地址块的哈希值作为特征;ii.对于数据段的数据指针,提取该指针所索引的数据值的opcode作为特征。作为本专利技术的进一步改进:所述步骤S5的流程为:S501:函数的SimHash指纹特征计算;S502:函数的SimHash指纹特征存储;S503:函数的SimHash指纹特征查询。作为本专利技术的进一步改进:所述步骤S501的流程为:i.设一个32维的向量V和一个32位的二进制数S,并将它们初始化为0;ii.设关键字集合为K,s(k)={hash(k)|k∈K}为关键字k的长度为32位的哈希值,v(k)为关键字k的权重;iii.对于每一个关键字k∈K,for(i=0to31):如果s(k)的第i位为1,则V的第i个元素加上v(k),否则减去v(k);iv.对所有的关键字按照步骤iii进行操作后,如果V的第i个元素大于0,则将S的第i位置为1,否则为0;最后的输出S即为函数的指纹特征。作为本专利技术的进一步改进:所述步骤S502的流程为:i.遍历二进制文件的函数集合F,对于每一个函数f∈F,计算指纹S(f);ii.建立一个8位的索引表,索引范围为:0~255;iii.对每个指纹S(f)的32位二进制表示,按照31~24,23~16,15~8,7~0分成4段,每段8位,将完整的32位指纹存在这4段所表示的索引项中。作为本专利技术的进一步改进:所述步骤S503的流程为:i.遍历待匹配文件的函数集合F,对于每一个函数f∈F,计算指纹S(f);ii.对每个指纹S(f)的32位二进制表示,按照31~24,23~16,15~8,7~0分成4段,每段8位;记为S1,S2,S3,S4;iii.将S1,S2,S3,S4作为索引项,在已拥有知识库的二进制文件中进行查询。与现有技术相比,本专利技术的优点在于:1.本专利技术的基于SimHash算法的二进制文件比较方法,具有很好的通用性,重点解决了时间效率这一根本问题,使得对大型软件的比较成为可能。同时,在对函数提取特征时,更多关注函数的结构特征和关联关系,并采用SimHash算法将函数的不同特征进行综合评价,使得对于采用代码混淆技术等的复杂软件比较成为可能。2.本专利技术的基于SimHash算法的二进制文件比较方法,二进制文件比较的准确性好。在本专利技术所提出的方法中,首先对基本块和基本路径采用了SPP算法提取其关键字,解决了其内部指令重排的问题;同时,在对提取函数的SimHash指纹特征时,由于SimHash的本文档来自技高网
...
一种基于SimHash算法的二进制文件快速比较方法

【技术保护点】
一种基于SimHash算法的二进制文件比较方法,其特征在于,步骤为:S1:利用IDA Pro的扩展功能,编写插件对二进制文件进行信息提取;所述信息包括二进制文件的汇编指令序列、控制流图、调用流图信息;S2:对提取到的二进制文件信息进行预处理;S3:对预处理过后的二进制文件信息进行关键字定义;S4:对提取到的关键字进行权重衡量;S5:利用提取到的关键字及其权重,计算函数的SimHash指纹特征,并对指纹特征进行存储;S6:基于查询后的相似结果,再采用基于结构化匹配的经典算法进行精确匹配。

【技术特征摘要】
1.一种基于SimHash算法的二进制文件比较方法,其特征在于,步骤为:S1:利用IDAPro的扩展功能,编写插件对二进制文件进行信息提取;所述信息包括二进制文件的汇编指令序列、控制流图、调用流图信息;S2:对提取到的二进制文件信息进行预处理;S3:对预处理过后的二进制文件信息进行关键字定义;S4:对提取到的关键字进行权重衡量;S5:利用提取到的关键字及其权重,计算函数的SimHash指纹特征,并对指纹特征进行存储;S6:基于查询后的相似结果,再采用基于结构化匹配的经典算法进行精确匹配。2.根据权利要求1所述的基于SimHash算法的二进制文件比较方法,其特征在于,在步骤S3中,对关键字的定义考虑:单个指令、基本块、基本路径;取单个指令的操作码和操作数作为关键字,用SPP算法计算每个基本块的SPP值,基本路径的SPP值作为关键字。3.根据权利要求1所述的基于SimHash算法的二进制文件比较方法,其特征在于,在步骤S4中,关键字重要性程度为:基本路径>基本块>单个指令;对于单个指令而言,其操作码和操作数的权重为1;于基本块而言,其权重为其SPP值;对于基本路径而言,其权重为该路径所经过的指令数目。4.根据权利要求1或2或3所述的基于SimHash算法的二进制文件比较方法,其特征在于,在步骤S3的详细流程为:S301:对控制流图进行分割块合并;S302:对指令序列进行寄存器模糊化处理;S303:对指令序列中的地址信息进行重定向。5.根据权利要求4所述的基于SimHash算法的二进制文件比较方法,其特征在于,在步骤S301中,CFG中当一个基本块只有一个子块,且该子块也只有一个父块时,这两个基本块就被定义为分割块;假设函数F中所有基本块的集合为B,p(a)为CFG中基本块a的父节点的集合,c(a)为CFG中基本块a的子节点的集合,e(a,b)为CFG中以a为起点,b为终点的一条边,流程为:i.遍历集合B中的基本块;如果已遍历完,则跳转到步骤v;否则,从集合B中取基本块b,执行步骤ii;ii.如果基本块b的子节点集合c(b)的大小为1,执行步骤iii,否则返回i;iii.令a=c(b),如果基本块a的父节点集合p(a)的大小为1,执行步骤iv,否则返回i;iv.将b和a合并为新的基本块c;同时,移除边e(b,a),{e(x,b)|x∈p(b)}和{e(a,x)|x∈c(...

【专利技术属性】
技术研发人员:唐勇俞昕王宝生王毅喻波解炜李根
申请(专利权)人:中国人民解放军国防科学技术大学
类型:发明
国别省市:湖南,43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1