[发明专利]一种基于NLP的二进制代码相似性比对方法有效
申请号: | 202110988539.2 | 申请日: | 2021-08-26 |
公开(公告)号: | CN113703773B | 公开(公告)日: | 2022-07-19 |
发明(设计)人: | 贾张涛;付修锋;李雅斯;杨铁湃;邵飒;金玉川 | 申请(专利权)人: | 北京计算机技术及应用研究所 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F40/216;G06F40/284 |
代理公司: | 中国兵器工业集团公司专利中心 11011 | 代理人: | 刘瑞东 |
地址: | 100854*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 nlp 二进制 代码 相似性 方法 | ||
本发明涉及一种基于NLP的二进制代码相似性比对方法,属于代码比对领域。本发明利用代码中的跳转标识将汇编样本切分多个函数块,并利用NLP的方式将函数代码映射成函数特征向量,同时设计了以函数为基本分析单元的工程相似计算方法,从而完成代码溯源。该方法能满足二进制代码相似性对比中相似度检测的需求,且有着较高的准确率和召回率。
技术领域
本发明属于代码比对领域,具体涉及一种基于NLP的二进制代码相似性比对方法。
背景技术
开源复用是重要的软件开发模式,开源软件复用有助于缩减软件开发成本,提高了开发效率。但开源代码侵权与代码抄袭同样成为了当前软件行业的两个主问题,现有二进制代码相似性解决方案存在精确度和召回率低等问题。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是如何提供一种基于NLP的二进制代码相似性比对方法,以解决二进制代码相似性比对精确度不高的问题。
(二)技术方案
为了解决上述技术问题,本发明提出一种基于NLP的二进制代码相似性比对方法,该方法包括如下步骤:
第一步:二进制代码反汇编
将二进制代码文件Bin_0转换为汇编文件Asm_0;
第二步:汇编文件切分
Asm_0可视为二进制代码函数的集合,对Asm_0进行函数、代码块提取,函数是多个代码块的集合;
第三步:特征提取
依据拆分好的代码块序列,利用NLP算法,结合函数特征信息,对二进制代码的文件、函数块、代码块分别进行编码,获得函数的特征向量;
第四步:相似度计算
通过计算函数特征向量之间的距离来获取函数的相似情况,根据函数的相似情况判断二进制代码工程的相似度。
如权利要求1所述的基于NLP的二进制代码相似性比对方法,其特征在于,所述第一步具体包括:通过二进制代码反汇编工具,将二进制代码文件Bin_0转换为汇编文件Asm_0。
进一步地,所述第二步具体包括:
S21、根据函数开始标识和函数结束标识,对汇编文件进行切分,提取汇编文件中的函数信息;函数用P表示,一个汇编代码S由S={P_1,P_2,……,P_n}表示;
S22、每一个函数由多个代码基本块组成,并通过分支指令标记,代码块用L表示,每个函数表示为多个代码块的集合P={L_1,L_2,……,L_m};
S23、对汇编文件中的函数标识、偏移地址、分支指令、函数地址、跳转地址和立即数进行标准化处理。
进一步地,分支指令标记包括jnz和jmp。
进一步地,所述第三步具体包括如下步骤:
S31、函数块P表示为代码块的集合,P={L_1,L_2,……,L_m};
S32、对于代码块L_k进行分词处理:根据汇编语言的特征,对代码块的文本进行分词处理;
S33、将代码块L_k序列映射成特征向量:使用哈希函数将每个代码块生成一组长度为64位向量,得到代码块L_k对应的哈希向量Hash_k;
S34、分词词频统计,代码块L_k的各个分词进行词频统计,以每个分词出现的频度作为该分词权值,T_k={…,mov:X,…},X为mov出现的频度。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京计算机技术及应用研究所,未经北京计算机技术及应用研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110988539.2/2.html,转载请声明来源钻瓜专利网。