CN110569629A - 二进制代码文件溯源方法 - Google Patents
二进制代码文件溯源方法 Download PDFInfo
- Publication number
- CN110569629A CN110569629A CN201910853284.1A CN201910853284A CN110569629A CN 110569629 A CN110569629 A CN 110569629A CN 201910853284 A CN201910853284 A CN 201910853284A CN 110569629 A CN110569629 A CN 110569629A
- Authority
- CN
- China
- Prior art keywords
- binary code
- file
- binary
- simhash
- assembly
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 32
- 238000004364 calculation method Methods 0.000 claims abstract description 12
- 230000006870 function Effects 0.000 claims description 7
- 230000008569 process Effects 0.000 claims description 5
- 230000011218 segmentation Effects 0.000 claims description 5
- 230000009467 reduction Effects 0.000 claims description 4
- 230000015654 memory Effects 0.000 claims description 3
- 238000004458 analytical method Methods 0.000 abstract description 11
- 230000018109 developmental process Effects 0.000 description 3
- 230000008520 organization Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/16—Program or content traceability, e.g. by watermarking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出了一种二进制代码文件溯源方法,该方法通过反汇编生成汇编代码,然后基于汇编指令生成二进制文件的Simhash特征值,最后结合倒排索引方法和Simhash汉明距离计算,实现二进制代码文件相似性比对,并最终完成二进制代码文件溯源。该方法具有较好的时间和空间复杂度,能够满足在海量代码库中进行二进制代码文件快速溯源分析的要求,具有较高的准确率和召回率。
Description
技术领域
本发明属于代码溯源分析领域,提出了一种二进制代码文件溯源方法。
背景技术
基于代码复用的开发模式,作为提高软件开发效率和质量的重要手段,已成为软件开发的主流方式,这就造成最终开发出来的软件构成复杂、来源广泛,从而为软件安全性和知识产权自主性带来巨大挑战。软件中可能同时包含多种类型或多种来源的构件或代码,如包含组织内部开发的构件代码、软件外包开发的代码、从多个开源社区复用的构件代码或者代码片段、购买的第三方商业构件代码等。
为了提高软件的可控性,降低软件安全性和知识产权风险,必须进行软件组成及溯源分析。软件组成及溯源分析方法可以分成基于源代码的溯源分析和基于目标代码的溯源分析两类,对于海量代码库的二进制代码文件,现有方法无法快速实现其溯源。
发明内容
本发明的目的在于提供一种二进制代码文件溯源方法,解决了基于海量代码库的二进制代码快速溯源问题。该溯源方法不仅具有较好的时间和空间复杂度,而且具有较高的准确率和召回率,实现程序代码复用的快速溯源分析。
本发明的技术方案如下:一种二进制代码文件溯源方法,其特征在于,具体包括以下步骤:
第一步,二进制文件反汇编:将二进制文件中的代码段转化成汇编代码;
第二步,二进制代码特征计算:基于汇编代码生成二进制代码文件的Simhash值;
第三步,基于特征的文件溯源:通过计算两个Simhash值之间的汉明距离,就可以判定两个二进制代码文件是否相似,完成二进制代码文件的溯源。
有益效果:本发明通过反汇编生成汇编代码,基于汇编指令生成Simhash特征值,结合倒排索引技术和Simhash汉明距离计算,实现二进制代码文件相似性比较,并最终完成二进制代码文件溯源。该方法具有较好的时间和空间复杂度,能够满足在海量代码库中进行二进制代码文件快速溯源分析的要求。具有较高的准确率和召回率,从而为软件安全性和知识产权自主性提供技术支撑;可以基于海量代码库的二进制代码文件溯源应用场景。
附图说明
图1为本发明的流程图;
图2为二进制文件代码特征计算流程图;
图3为Simhash特征值汉明距离的计算方法示意图。
具体实施方式
如图1所示,本发明提供一种二进制代码文件溯源方法,具体实施步骤为:
第一步、二进制文件反汇编
二进制文件反汇编是指借助反汇编工具,将二进制文件中的代码段转化成汇编代码,删除与程序代码特征无关信息,并对汇编代码中的偏移地址、函数地址、立即数和部分跳转指令等进行特殊处理。汇编代码相对于二进制指令,更加容易理解,而且每一条汇编指令都代表一定的语义,是天然的程序“指纹”。
使用IDAPro工具可以对二进制代码文件逆向未加壳或脱壳获取汇编代码。由于软件源代码的轻微改动都将造成汇编代码中寄存器、立即数、内存地址等的大幅变动,为了忽略这种差异对于代码溯源分析的影响,需要对获取到的汇编代码进行如下处理:
(1)寄存器如EAX、AX、AL等依据所占位数分别标准化为REG32、REG16、REG18;
(2)内存如[EAX]、[EDI+4]等均表示为MEM;
(3)立即数如0、5A4Dh表示为VAL;
(4)CALL指令调用函数时统一规范化为“CALL FUNCTION”;
(5)跳转指令如“JZ LOC_500001”统一规范化为“JZ LOCATION”。
第二步、二进制代码特征计算
一个执行逻辑不同的程序,其对应的汇编代码必然不同,因此汇编代码完全可以作为二进制代码文件特征的计算基础。二进制代码特征计算过程主要包括分词、散列、加权、合并、降维等5个步骤,最终生成长度为64位的Simhash特征值。
二进制文件代码特征计算过程如图2所示,具体过程描述如下:
(1)分词:因为汇编代码是以指令为基础,因此按照汇编指令对汇编代码进行分词处理,同时根据每种指令出现的频率,赋予权值。
(2)散列:针对每种汇编指令使用相同的哈希函数计算出一个64位的指纹值α,此时的汇编指令就转化成一系列的数字。
(3)加权合并:针对每种汇编指令进行加权合并处理,形成向量β。如果指纹值α的第i位为1(0<i<64),则向量β的第i位加上该汇编指令的权重,否则减去该汇编指令的权重。
(4)降维:针对向量β进行降维处理,形成最终的特征值S。如果向量β的第i位大于0,则将S的第i位设为1,否则设为0。特征值S就是最终形成的64位二进制代码文件Simhash特征值,可以基于该Simhash特征值进行二进制代码文件溯源分析。
第三步、基于特征的文件溯源
由于二进制代码特征完全可以反映二进制代码文件,因此两个二进制代码文件的相似性比对,就可以转换成两个文件Simhash特征值的比较。Simhash是一种局部敏感哈希,假设两个字符串A、B具有一定的相似性,A、B经过局部敏感Simhash计算后,仍然可以保持这种相似性。
两个Simhash的相似性体现为这两个Simhash值之间的汉明距离,所谓汉明距离,是指两个二进制数(即01串)对应位取不同值的个数。两个Simhash值之间的汉明距离越近,则说明这两个Simhash特征值对应的二进制代码文件相似度越高。
二进制代码文件溯源分析的关键是二进制代码文件的相似性比对。经过上一步的处理,二进制代码文件的相似性比对已经转化为Simhash特征值汉明距离的计算,通过计算两个simhash值之间的汉明距离,就可以判定两个二进制代码文件是否相似,从而实现二进制代码文件的溯源。一般地,针对两个64位Simhash特征值,在汉明距离不大于3时,两者具有很高的相似度。因此,二进制代码文件的相似性比对,就转化成了查找汉明距离为3以内的二进制代码文件。
然而,两个Simhash特征值的汉明距离计算很容易,但是面对海量的代码库时,不可能采用逐个比对的方式,因此需要采用新的方法,具体方法如下:
针对64位Simhash值,如需找出海明距离小于等于3的Simhash特征值,通过抽屉原理可知,平分为4个部分的Simhash特征值,至少有一个部分是完全相同。因此将64位Simhash特征值S切分为相同长度的4部分,每部分16位,即S=[s1,s2,s3,s4],然后针对s1、s2、s3、s4和S以及二进制代码文件创建倒排索引,结构如图3所示。
对于一个待比对的Simhash特征值SP,使用相同方式切分为4个部分,即SP=[sp1,sp2,sp3,sp4],然后针对spi检索具有相同对应部分si的Simhash特征值S(i=1,2,3,4),并进行汉明距离的计算,如果特征值SP和S之间的汉明距离不大于3,则说明这两个特征值对应的二进制文件相似,也即表明待比对文件溯源成功。
Claims (9)
1.一种二进制代码文件溯源方法,其特征在于,具体包括以下步骤:
第一步,二进制文件反汇编:将二进制文件中的代码段转化成汇编代码;
第二步,二进制代码特征计算:基于汇编代码生成二进制代码文件的Simhash值;
第三步,基于特征的文件溯源:通过计算两个Simhash值之间的汉明距离,就可以判定两个二进制代码文件是否相似,完成二进制代码文件的溯源。
2.根据权利要求1所述的一种二进制代码文件溯源方法,其特征在于,第一步中,将二进制文件中的代码段转化成汇编代码后,删除与程序代码特征无关信息,并对获取的汇编代码进行处理。
3.根据权利要求2所述的一种二进制代码文件溯源方法,其特征在于,对获取到的汇编代码进行如下处理:
(1)寄存器依据所占位数分别标准化为REG32、REG16、REG18;
(2)内存均表示为MEM;
(3)立即数表示为VAL;
(4)CALL指令调用函数时统一规范化为“CALL FUNCTION”;
(5)跳转指令统一规范化为“JZ LOCATION”。
4.根据权利要求2所述的一种二进制代码文件溯源方法,其特征在于,第二步中,二进制代码特征计算过程主要包括分词、散列、加权、合并、降维,最终生成长度为64位的Simhash特征值。
5.根据权利要求4所述的一种二进制代码文件溯源方法,其特征在于,第二步中,二进制文件代码特征计算过程具体如下:
分词:按照汇编指令对汇编代码进行分词处理,同时根据每种指令出现的频率,赋予权值;
散列:针对每种汇编指令使用相同的哈希函数计算出一个64位的指纹值α,此时的汇编指令就转化成一系列的数字;
加权合并:针对散列后的每种汇编指令进行加权合并处理,形成向量β;
降维:针对向量β进行降维处理,形成最终的特征值S,特征值S就是最终形成的64位二进制代码文件Simhash特征值。
6.根据权利要求5所述的一种二进制代码文件溯源方法,其特征在于,加权合并中,如果指纹值α的第i位为1,0<i<64,则向量β的第i位加上该汇编指令的权重,否则减去该汇编指令的权重。
7.根据权利要求5所述的一种二进制代码文件溯源方法,其特征在于,加权合并中,如果向量β的第i位大于0,则将S的第i位设为1,否则设为0。
8.根据权利要求1-7任一项所述的一种二进制代码文件溯源方法,其特征在于,第三步中,通过查找汉明距离为3以内的二进制代码文件即可实现二进制代码文件的相似性比对。
9.根据权利要求1-7任一项所述的一种二进制代码文件溯源方法,其特征在于,第三步的具体方法如下:
将64位Simhash特征值S切分为相同长度的4部分,每部分16位,即S=[s1,s2,s3,s4],然后针对s1、s2、s3、s4和S以及二进制代码文件创建倒排索引;
对于一个待比对的Simhash特征值SP,使用相同方式切分为4个部分,即SP=[sp1,sp2,sp3,sp4],然后针对spi检索具有相同对应部分si的Simhash特征值S,i=1,2,3,4,并进行汉明距离的计算,如果特征值SP和S之间的汉明距离不大于3,则说明这两个特征值对应的二进制文件相似,也即表明待比对文件溯源成功。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910853284.1A CN110569629A (zh) | 2019-09-10 | 2019-09-10 | 二进制代码文件溯源方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910853284.1A CN110569629A (zh) | 2019-09-10 | 2019-09-10 | 二进制代码文件溯源方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110569629A true CN110569629A (zh) | 2019-12-13 |
Family
ID=68778858
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910853284.1A Pending CN110569629A (zh) | 2019-09-10 | 2019-09-10 | 二进制代码文件溯源方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110569629A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111290784A (zh) * | 2020-01-21 | 2020-06-16 | 北京航空航天大学 | 适用于大规模样本的程序源代码相似度检测方法 |
CN112698837A (zh) * | 2020-12-31 | 2021-04-23 | 上海戎磐网络科技有限公司 | 基于软件基因的动态行为与二进制代码匹配方法和装置 |
WO2021121338A1 (en) * | 2019-12-17 | 2021-06-24 | Beijing Didi Infinity Technology And Development Co., Ltd. | Fingerprints for open source code governance |
CN113590192A (zh) * | 2021-09-26 | 2021-11-02 | 北京迪力科技有限责任公司 | 一种质量分析的方法及相关设备 |
US11163948B2 (en) | 2018-07-10 | 2021-11-02 | Beijing Didi Infinity Technology And Development Co., Ltd. | File fingerprint generation |
CN113703773A (zh) * | 2021-08-26 | 2021-11-26 | 北京计算机技术及应用研究所 | 一种基于nlp的二进制代码相似性比对方法 |
CN113722238A (zh) * | 2021-11-01 | 2021-11-30 | 北京大学 | 一种实现对源码文件快速开源成分检测的方法和系统 |
CN114995880A (zh) * | 2022-05-23 | 2022-09-02 | 北京计算机技术及应用研究所 | 一种基于SimHash的二进制代码相似性比对方法 |
CN115016843A (zh) * | 2022-05-23 | 2022-09-06 | 北京计算机技术及应用研究所 | 一种高精度的二进制代码相似性比对方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104933364A (zh) * | 2015-07-08 | 2015-09-23 | 中国科学院信息工程研究所 | 一种基于调用行为的恶意代码自动化同源判定方法及系统 |
CN104933365A (zh) * | 2015-07-08 | 2015-09-23 | 中国科学院信息工程研究所 | 一种基于调用习惯的恶意代码自动化同源判定方法及系统 |
CN106126235A (zh) * | 2016-06-24 | 2016-11-16 | 中国科学院信息工程研究所 | 一种复用代码库构建方法、复用代码快速溯源方法及系统 |
CN107491691A (zh) * | 2017-08-08 | 2017-12-19 | 东北大学 | 一种基于机器学习的远程取证工具安全分析系统 |
CN107657175A (zh) * | 2017-09-15 | 2018-02-02 | 北京理工大学 | 一种基于图像特征描述子的恶意样本同源检测方法 |
-
2019
- 2019-09-10 CN CN201910853284.1A patent/CN110569629A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104933364A (zh) * | 2015-07-08 | 2015-09-23 | 中国科学院信息工程研究所 | 一种基于调用行为的恶意代码自动化同源判定方法及系统 |
CN104933365A (zh) * | 2015-07-08 | 2015-09-23 | 中国科学院信息工程研究所 | 一种基于调用习惯的恶意代码自动化同源判定方法及系统 |
CN106126235A (zh) * | 2016-06-24 | 2016-11-16 | 中国科学院信息工程研究所 | 一种复用代码库构建方法、复用代码快速溯源方法及系统 |
CN107491691A (zh) * | 2017-08-08 | 2017-12-19 | 东北大学 | 一种基于机器学习的远程取证工具安全分析系统 |
CN107657175A (zh) * | 2017-09-15 | 2018-02-02 | 北京理工大学 | 一种基于图像特征描述子的恶意样本同源检测方法 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11163948B2 (en) | 2018-07-10 | 2021-11-02 | Beijing Didi Infinity Technology And Development Co., Ltd. | File fingerprint generation |
WO2021121338A1 (en) * | 2019-12-17 | 2021-06-24 | Beijing Didi Infinity Technology And Development Co., Ltd. | Fingerprints for open source code governance |
CN111290784B (zh) * | 2020-01-21 | 2021-08-24 | 北京航空航天大学 | 适用于大规模样本的程序源代码相似度检测方法 |
CN111290784A (zh) * | 2020-01-21 | 2020-06-16 | 北京航空航天大学 | 适用于大规模样本的程序源代码相似度检测方法 |
CN112698837A (zh) * | 2020-12-31 | 2021-04-23 | 上海戎磐网络科技有限公司 | 基于软件基因的动态行为与二进制代码匹配方法和装置 |
CN113703773A (zh) * | 2021-08-26 | 2021-11-26 | 北京计算机技术及应用研究所 | 一种基于nlp的二进制代码相似性比对方法 |
CN113703773B (zh) * | 2021-08-26 | 2022-07-19 | 北京计算机技术及应用研究所 | 一种基于nlp的二进制代码相似性比对方法 |
CN113590192A (zh) * | 2021-09-26 | 2021-11-02 | 北京迪力科技有限责任公司 | 一种质量分析的方法及相关设备 |
CN113722238A (zh) * | 2021-11-01 | 2021-11-30 | 北京大学 | 一种实现对源码文件快速开源成分检测的方法和系统 |
CN113722238B (zh) * | 2021-11-01 | 2022-04-26 | 北京大学 | 一种实现对源码文件快速开源成分检测的方法和系统 |
CN114995880A (zh) * | 2022-05-23 | 2022-09-02 | 北京计算机技术及应用研究所 | 一种基于SimHash的二进制代码相似性比对方法 |
CN115016843A (zh) * | 2022-05-23 | 2022-09-06 | 北京计算机技术及应用研究所 | 一种高精度的二进制代码相似性比对方法 |
CN115016843B (zh) * | 2022-05-23 | 2024-03-26 | 北京计算机技术及应用研究所 | 一种高精度的二进制代码相似性比对方法 |
CN114995880B (zh) * | 2022-05-23 | 2024-04-05 | 北京计算机技术及应用研究所 | 一种基于SimHash的二进制代码相似性比对方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110569629A (zh) | 二进制代码文件溯源方法 | |
Lin et al. | A novel approach for code smells detection based on deep leaning | |
CN108573045B (zh) | 一种基于多阶指纹的比对矩阵相似度检索方法 | |
JP6605573B2 (ja) | 並列ディシジョン・ツリー・プロセッサー・アーキテクチャ | |
US20180196609A1 (en) | Data Deduplication Using Multi-Chunk Predictive Encoding | |
CN110825363B (zh) | 智能合约获取方法、装置、电子设备及存储介质 | |
CN111324750B (zh) | 一种大规模文本相似度计算及文本查重方法 | |
JP6160259B2 (ja) | 文字列探索方法、文字列探索装置および文字列探索プログラム | |
CN111258966A (zh) | 一种数据去重方法、装置、设备及存储介质 | |
WO2007114722A1 (en) | An optimal floating-point expression translation method based on pattern matching | |
US10078646B2 (en) | Hardware efficient fingerprinting | |
US10241767B2 (en) | Distributed function generation with shared structures | |
WO2021175053A1 (zh) | 一种在虚拟机中执行功能模块的方法和装置 | |
CN115730313A (zh) | 一种恶意文档检测方法、装置、存储介质及设备 | |
US10140581B1 (en) | Conditional random field model compression | |
US11150993B2 (en) | Method, apparatus and computer program product for improving inline pattern detection | |
CN111651695A (zh) | 一种短链接的生成与解析方法及装置 | |
CN114995880B (zh) | 一种基于SimHash的二进制代码相似性比对方法 | |
CN116204612A (zh) | 一种文本相似度计算方法及系统 | |
US20130173647A1 (en) | String matching device based on multi-core processor and string matching method thereof | |
CN115904486A (zh) | 一种代码相似度检测方法及装置 | |
CN113031952A (zh) | 深度学习模型的执行代码的确定方法、装置及存储介质 | |
CN113569251B (zh) | 一种基于汇编指令序列的二进制可执行文件脆弱性检测方法 | |
CN115016843B (zh) | 一种高精度的二进制代码相似性比对方法 | |
CN111930313B (zh) | 主机中数据关联访问的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191213 |