[发明专利]一种基于SimHash算法的二进制文件快速比较方法在审
申请号: | 201611009372.6 | 申请日: | 2016-11-16 |
公开(公告)号: | CN106649218A | 公开(公告)日: | 2017-05-10 |
发明(设计)人: | 唐勇;俞昕;王宝生;王毅;喻波;解炜;李根 | 申请(专利权)人: | 中国人民解放军国防科学技术大学 |
主分类号: | G06F17/22 | 分类号: | G06F17/22 |
代理公司: | 湖南兆弘专利事务所(普通合伙)43008 | 代理人: | 周长清 |
地址: | 410073 湖南省长沙市砚瓦池正*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 simhash 算法 二进制文件 快速 比较 方法 | ||
技术领域
本发明主要涉及到计算机系统安全技术领域,特指一种基于SimHash算法的二进制文件快速比较方法。
背景技术
随着计算机技术的飞速发展和互联网的广泛应用,软件自身的规模也随着功能的多样性而变得越来越大。日趋丰富的功能在给用户带来良好体验的同时,也带来了诸多安全问题。同时,一定规模的软件难免会使用第三方的组件,而第三方的组件往往缺乏源代码:如微软系统的动态链接库文件,欲对这样的软件进行代码审查,逆向工程手段几乎是唯一的选择。
在逆向工程中,静态分析的主要任务是全部或部分恢复二进制文件中被完全抹除的函数和数据信息,为后续版本的系统分析、设备攻击和控制利用的关键点定位等工作奠定基础。但由于当前软件版本众多、规模庞大,使这项工作越来越无法依靠人力来完成。因此自动化逆向需求应运而生。在这其中所用到的主要方法就是二进制文件的比对技术。
目前,常用的二进制文件比对方法大致有四种,分别是基于源文件的二进制字节内容比较、基于源文件反汇编后的汇编指令比较、基于汇编指令的相似性图形比较和基于汇编指令的结构化图形比较。这几种方法按照先后顺序不断克服前面方法存在的缺陷,但对于一些大型复杂的二进制文件而言,这些方法仍存在着不足。
现有的二进制比较方法中,除直接比较二进制内容的方法外,大都采用了:提取特征,遍历函数集合寻找匹配函数,迭代修正匹配结果的三步走流程。对于两个二进制文件A和B。假设N(A)表示A中函数的个数,N(B)表示B中函数的个数,t表示两个特征签名比较所需要的时间,n表示循环迭代次数。则该算法流程的时间复杂度大致为O(n*N(A)*N(B)*t)。虽然后续的一些方法做了改进,能逐步缩小比较的集合,但从整体时间复杂度上分析,并没有明显的提升。对于某些大型软件而言,反汇编后的函数集合往往为几十万甚至上百万,对于这些软件而言传统方法的比较次数达到了1010~12次(不计较特征匹配时间和迭代次数),这样的时间效率令人无法接受,需要一种新的方法能缩小比较的集合,只计算那些可能相似的函数之间进行匹配。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种通用性好、具有较高效率和准确度的基于SimHash算法的二进制文件比较方法。
为解决上述技术问题,本发明采用以下技术方案:
一种基于SimHash算法的二进制文件比较方法,其步骤为:
S1:利用IDA Pro的扩展功能,编写插件对二进制文件进行信息提取;所述信息包括二进制文件的汇编指令序列、控制流图、调用流图信息;
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;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科学技术大学,未经中国人民解放军国防科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611009372.6/2.html,转载请声明来源钻瓜专利网。
- 上一篇:布艺沙发(一人位61016)
- 下一篇:布艺沙发(二人位61016)