CN110569629A - 二进制代码文件溯源方法 - Google Patents

二进制代码文件溯源方法 Download PDF

Info

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
Application number
CN201910853284.1A
Other languages
English (en)
Inventor
陶金龙
纪祖赑
高艳鹍
冯大成
张建伟
汪进银
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Institute of Computer Technology and Applications
Original Assignee
Beijing Institute of Computer Technology and Applications
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Institute of Computer Technology and Applications filed Critical Beijing Institute of Computer Technology and Applications
Priority to CN201910853284.1A priority Critical patent/CN110569629A/zh
Publication of CN110569629A publication Critical patent/CN110569629A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/16Program or content traceability, e.g. by watermarking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; 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,则说明这两个特征值对应的二进制文件相似,也即表明待比对文件溯源成功。
CN201910853284.1A 2019-09-10 2019-09-10 二进制代码文件溯源方法 Pending CN110569629A (zh)

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)

* Cited by examiner, † Cited by third party
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
US11163948B2 (en) 2018-07-10 2021-11-02 Beijing Didi Infinity Technology And Development Co., Ltd. File fingerprint generation
CN113590192A (zh) * 2021-09-26 2021-11-02 北京迪力科技有限责任公司 一种质量分析的方法及相关设备
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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104933365A (zh) * 2015-07-08 2015-09-23 中国科学院信息工程研究所 一种基于调用习惯的恶意代码自动化同源判定方法及***
CN104933364A (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 北京理工大学 一种基于图像特征描述子的恶意样本同源检测方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104933365A (zh) * 2015-07-08 2015-09-23 中国科学院信息工程研究所 一种基于调用习惯的恶意代码自动化同源判定方法及***
CN104933364A (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)

* Cited by examiner, † Cited by third party
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
CN111290784A (zh) * 2020-01-21 2020-06-16 北京航空航天大学 适用于大规模样本的程序源代码相似度检测方法
CN111290784B (zh) * 2020-01-21 2021-08-24 北京航空航天大学 适用于大规模样本的程序源代码相似度检测方法
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) 二进制代码文件溯源方法
CN108573045B (zh) 一种基于多阶指纹的比对矩阵相似度检索方法
JP6605573B2 (ja) 並列ディシジョン・ツリー・プロセッサー・アーキテクチャ
US20180196609A1 (en) Data Deduplication Using Multi-Chunk Predictive Encoding
CN110825363B (zh) 智能合约获取方法、装置、电子设备及存储介质
CN111324750B (zh) 一种大规模文本相似度计算及文本查重方法
JP6160259B2 (ja) 文字列探索方法、文字列探索装置および文字列探索プログラム
CN111258966A (zh) 一种数据去重方法、装置、设备及存储介质
CN103761476A (zh) 特征提取的方法及装置
WO2007114722A1 (en) An optimal floating-point expression translation method based on pattern matching
US10078646B2 (en) Hardware efficient fingerprinting
WO2021175053A1 (zh) 一种在虚拟机中执行功能模块的方法和装置
US20180246708A1 (en) Distributed function generation with shared structures
CN115730313A (zh) 一种恶意文档检测方法、装置、存储介质及设备
US10140581B1 (en) Conditional random field model compression
US11150993B2 (en) Method, apparatus and computer program product for improving inline pattern detection
CN114995880B (zh) 一种基于SimHash的二进制代码相似性比对方法
CN116204612A (zh) 一种文本相似度计算方法及***
Lee et al. Trend of malware detection using deep learning
Wu et al. Checking big suffix and LCP arrays by probabilistic methods
US20130173647A1 (en) String matching device based on multi-core processor and string matching method thereof
CN115904486A (zh) 一种代码相似度检测方法及装置
CN113031952A (zh) 深度学习模型的执行代码的确定方法、装置及存储介质
CN113569251B (zh) 一种基于汇编指令序列的二进制可执行文件脆弱性检测方法
CN115016843B (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