CN110362343A - N-Gram的检测字节码相似度的方法 - Google Patents
N-Gram的检测字节码相似度的方法 Download PDFInfo
- Publication number
- CN110362343A CN110362343A CN201910653076.7A CN201910653076A CN110362343A CN 110362343 A CN110362343 A CN 110362343A CN 201910653076 A CN201910653076 A CN 201910653076A CN 110362343 A CN110362343 A CN 110362343A
- Authority
- CN
- China
- Prior art keywords
- gram
- bytecode
- similarity
- file
- module
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/22—Matching criteria, e.g. proximity measures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
- G06F8/751—Code clone detection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种基于N‑Gram的检测字节码相似度的方法,通过将待比较的可执行二进制文件用N元语法模型转化为字节码,采用N‑Gram hash算法分析字节码并得到对应的hash值,最后通过winnowing算法从中提取特征后计算得到相似度。本发明能够对Java可执行文件进行字节码层面的相似度判断,并且使用了hash算法分析提高了方法执行的效率,从而能够广泛应用在Java字节码混淆程度评估,代码克隆检测等方面。
Description
技术领域
本发明涉及的是一种计算机信息处理领域的技术,具体是一种基于语言模型(N-Gram)的检测字节码相似度的方法。
背景技术
字节码相似度计算是程序分析的一个研究方向,对于代码克隆检测和混淆评估方面具有重要意义,能够帮助程序员减少冗余代码、提高编码效率以及提升代码安全度、保护代码支持产权。Java语言最大的优势在于其平台无关性,一次编译,随处运行,然而这个特点也造成了它的易反编译的缺陷。那么如何保护Java程序的知识产权,维护程序员的利益,混淆技术应运而生。
混淆,即在保证字节码程序原语义不变的前提下,将其换为更难反编译或者反编译后更难理解的技术。通常认为,与源程序相似度越低,则混淆效果越好。代码克隆检测作为程序分析的一个古老研究方向已经发展得极为完善,从最初的基于文本的检测到后来的基于控制流图,再到现在的多种方式联合使用,但总的来说只要涉及到对程序进行静态分析,需要用到结构上的表示、相似度对比(例如,对比抽象语法树等),整个程序运行的速率便会大大降低。
发明内容
本发明针对现有技术存在的上述不足,提出一种基于N-Gram的检测字节码相似度的方法,能够对Java可执行文件进行字节码层面的相似度判断,并且使用了hash算法分析提高了方法执行的效率,从而能够广泛应用在Java字节码混淆程度评估,代码克隆检测等方面。
本发明是通过以下技术方案实现的:
本发明通过将待比较的可执行二进制文件用N元语法模型转化为字节码,采用N-Gram hash算法分析字节码并得到对应的hash值,最后通过winnowing算法从中提取特征后计算得到相似度。
所述的转化,以基于栈的.class文件与基于寄存器的.dex文件的格式进行解析并转化为可阅读、可使用字符操作处理的字节码文件。
所述的转化,通过统一的Binary2Bytecode接口屏蔽不同文件反编译的差别,该接口识别当前可执行文件的类型为.class或.dex并调用对应的逆向工程,即基于对应的指令集转化为散列值。
所述的分析,即将字节码文件中的散列值映射至N-Gram hash表达式H(c1...cN)=c1*bN-1+c2*bN-2+...+cN-1*b+cN,其中:H为映射关系,c1...cN为一个N元语法,b为基底。
所述的提取特征,使用winnowing算法通过滑动窗口进行特征选取以保证其均匀性,通过保留每个窗口中值最小/大的特征实现随机性的保证,具体步骤包括:
1)设定移动窗口大小并依次遍历离散值;
2)记录每个移动窗中最小或最大的离散值及其下标组成特征值对;
3)删除相同的特征值对,完成特征提取。
所述的相似度其中:ListN(s)为字节码s中N-Gram表示的特征列表,GN(s)为字节码s中N-Gram表示的特征集合,num为GN(s)与GN(t)交集中元素在ListN(s)与ListN(t)中出现的次数,即使用本方法衡量两个字节码文件的相似度将某个相同特征出现的次数也纳入了计算。
本发明涉及一种实现上述方法的***,包括:以串行的方式互相连接的可执行文件转化模块、哈希值计算模块、特征值提取模块及相似度计算模块,其中:可执行文件转化模块将二进制文件转化为文本可解析的字节码文件并输出至哈希值计算模块,哈希值计算模块将字节码文件转化为向量的形式并输出至特征值提取模块,特征值提取模块使用winnowing方式对哈希值向量进行抽取作为最终的可执行文件表示向量并输出至相似度计算模块,相似度计算模块基于表示向量使用改进的N-Gram相似度计算的公式计算最终的相似度结果。
技术效果
与现有技术相比,本发明具有操作简单,执行速度快,扩展性强的工业实用性和工业技术效果。操作简单及强扩展性体现在该方法使用了接口屏蔽各个可执行文件与字节码文件的差异,而且该接口功能可继续扩展。执行速度快在于本方法既不需要对文件进行复杂的静态分析,也不需要对静态分析的结果进行复杂的对比计算。该方法的能耗很低,执行一般可在1s内完成(根据具体实施方式中的数据),但是具体依赖于可执行文件的大小。该方法的能耗主要在于最后一个相似度计算模块,最差的结果是O(nm),n,m是两个字节码文件的指令大小。
附图说明
图1为字节码文件转化为hash向量示意图;
图2为接口Binary2Bytecode将可执行文件解析为相应字节码文件示意图;
图3为字节码散列值向量转化为3-Gram hash值示意图;
图4为相似度数值集合获得流程示意图;
图5为N-Gram相似度VS可执行文件相对大小示意图。
具体实施方式
本实施例借助于Android R8(ver.1.4.9)。Android R8是谷歌新推出的用户可定制字节码混淆器,直接将Java可运行程序混淆并转化为Dalvikvm字节码,即.dex文件。操作***为Ubuntu16.04,JDK1.8。
本实施例包括以下步骤:
步骤1)数据准备:首先使用随机的方式生成50个Android R8的混淆配置文件,使用不同的混淆配置文件会导致最终生成的.dex文件的差异。其次使用不加任何混淆配置的Android R8将源Java程序转化为.dex文件。
所述的转化,采用如图2所示的Binary2Bytecode接口,通过识别可执行文件的类型调用不同的反编译工具,这样的设计可以屏蔽可执行文件之间的差异,对于使用该方法的用户来说,它是透明的。
步骤2)将步骤1中的50个随机混淆.dex文件分别与未混淆的.dex文件进行基于N-Gram的相似度计算,所得的50个相似度数值存储在表格中,方便之后的实验比对,如图4所示,具体步骤包括:
2.1)将.dex文件根据基于对应的指令集转化为散列值;
2.2)对字节码文件进行N-Gram hash算法处理,本实施例对于字节码散列值使用3-Gram hash算法,如图1中所示向量采用以下hash表达式进行映射:
H(c1...cN)=c1*bN-1+c2*bN-2+...+cN-1*b+cN,其中:H表示映射关系,c1...cN表示一个N元语法,b表示基底,本实施例中取8。
2.3)使用winnowing算法对散列值提取特征并根据特征计算相似度,借助了滑动窗口进行特征选取用以保证其均匀性,随机性的保证是通过保留每个窗口中值最小(最大)的特征来实现的。具体过程如下:
假设存在如下一组特征值且设定窗口大小为4:
17 28 75 15 56 89 78 32 8 69 35 30 87 101 203 99
在第一个窗口中最小值为15,以此类推:
17 28 75 15 56 89 78 32 8 69 35 30 87 101 203 99
在第二个窗口中依旧是那个15:
17 28 75 15 56 89 78 32 8 69 35 30 87 101 203 99
直到第五个窗口更新为32(这也是两个被选取的特征值最远间隔的情况):
17 28 75 15 56 89 78 32 8 69 35 30 87 101 203 99
最终选取的特征值对为:[15,3][32,7][8,8][30,11][87,12],前项为特征值,后项为对应的下标。当出现hash值一样但下标不一样的特征时,下标用以区分不同特征值。
步骤3)将步骤2得到的50个相似度数值与这50个.dex文件相对大小变化率进行比对,如图5所示。Android R8在对某一程序进行混淆与转化时,最终可执行文件的大小对于混淆程度的变化是灵敏的,所以该实验选取混淆后可执行文件相对于未混淆可执行文件的相对大小作为实验比较的指标。
由图可以看出,N-Gram所计算出的相似度大小变化与可执行文件相对大小的变化是基本一致的,可以证明该方法的有效性,而且此方法运行速度很快。
经过具体实际实验,在JDK1.8Ubuntu16.04的环境下,以大小为50的样例运行上述方法,得到的实验结果是,该方法能够有效地描述字节码文件的相似度。且单个文件的相似度计算可以在ms级完成。
上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。
Claims (7)
1.一种基于N-Gram的检测字节码相似度的方法,其特征在于,通过将待比较的可执行二进制文件用N元语法模型转化为字节码,采用N-Gram hash算法分析字节码并得到对应的hash值,最后通过winnowing算法从中提取特征后计算得到相似度。
2.根据权利要求1所述的基于N-Gram的检测字节码相似度的方法,其特征是,所述的转化,以基于栈的.class文件与基于寄存器的.dex文件的格式进行解析并转化为可阅读、可使用字符操作处理的字节码文件。
3.根据权利要求1所述的基于N-Gram的检测字节码相似度的方法,其特征是,所述的转化,通过统一的Binary2Bytecode接口屏蔽不同文件反编译的差别,该接口识别当前可执行文件的类型为.class或.dex并调用对应的逆向工程,即基于对应的指令集转化为散列值。
4.根据权利要求1所述的基于N-Gram的检测字节码相似度的方法,其特征是,所述的分析,即将字节码文件中的散列值映射至N-Gram hash表达式H(c1...cN)=c1*bN-1+c2*bN-2+...+cN-1*b+cN,其中:H为映射关系,c1...cN为一个N元语法,b为基底。
5.根据权利要求1所述的基于N-Gram的检测字节码相似度的方法,其特征是,所述的提取特征,使用winnowing算法通过滑动窗口进行特征选取以保证其均匀性,通过保留每个窗口中值最小/大的特征实现随机性的保证,具体步骤包括:
1)设定移动窗口大小并依次遍历离散值;
2)记录每个移动窗中最小或最大的离散值及其下标组成特征值对;
3)删除相同的特征值对,完成特征提取。
6.根据权利要求1所述的基于N-Gram的检测字节码相似度的方法,其特征是,所述的相似度其中:ListN(s)为字节码s中N-Gram表示的特征列表,GN(s)为字节码s中N-Gram表示的特征集合,num为GN(s)与GN(t)交集中元素在ListN(s)与ListN(t)中出现的次数,即使用本方法衡量两个字节码文件的相似度将某个相同特征出现的次数也纳入了计算。
7.一种实现上述任一权利要求所述方法的***,其特征在于,包括:以串行的方式互相连接的可执行文件转化模块、哈希值计算模块、特征值提取模块及相似度计算模块,其中:可执行文件转化模块将二进制文件转化为文本可解析的字节码文件并输出至哈希值计算模块,哈希值计算模块将字节码文件转化为向量的形式并输出至特征值提取模块,特征值提取模块使用winnowing方式对哈希值向量进行抽取作为最终的可执行文件表示向量并输出至相似度计算模块,相似度计算模块基于表示向量使用改进的N-Gram相似度计算的公式计算最终的相似度结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910653076.7A CN110362343A (zh) | 2019-07-19 | 2019-07-19 | N-Gram的检测字节码相似度的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910653076.7A CN110362343A (zh) | 2019-07-19 | 2019-07-19 | N-Gram的检测字节码相似度的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110362343A true CN110362343A (zh) | 2019-10-22 |
Family
ID=68220358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910653076.7A Pending CN110362343A (zh) | 2019-07-19 | 2019-07-19 | N-Gram的检测字节码相似度的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110362343A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112579155A (zh) * | 2021-02-23 | 2021-03-30 | 北京北大软件工程股份有限公司 | 代码相似性检测方法、装置以及存储介质 |
WO2023028721A1 (en) * | 2021-08-28 | 2023-03-09 | Huawei Technologies Co.,Ltd. | Systems and methods for detection of code clones |
CN116954701A (zh) * | 2023-08-09 | 2023-10-27 | 软安科技有限公司 | 一种基于血缘关系的二进制检测方法及*** |
CN117473494A (zh) * | 2023-06-06 | 2024-01-30 | 兴华永恒(北京)科技有限责任公司 | 同源二进制文件的确定方法、装置、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101546320A (zh) * | 2008-03-27 | 2009-09-30 | 林兆祥 | 一种基于滑动窗口的数据差异分析方法 |
CN105871619A (zh) * | 2016-04-18 | 2016-08-17 | 中国科学院信息工程研究所 | 一种基于n-gram多特征的流量载荷类型检测方法 |
US20180143979A1 (en) * | 2016-11-21 | 2018-05-24 | Université de Lausanne | Method for segmenting and indexing features from multidimensional data |
CN109101479A (zh) * | 2018-06-07 | 2018-12-28 | 苏宁易购集团股份有限公司 | 一种用于中文语句的聚类方法及装置 |
CN109151218A (zh) * | 2018-08-21 | 2019-01-04 | 平安科技(深圳)有限公司 | 通话语音质检方法、装置、计算机设备及存储介质 |
CN109977668A (zh) * | 2017-12-27 | 2019-07-05 | 哈尔滨安天科技股份有限公司 | 恶意代码的查询方法及*** |
-
2019
- 2019-07-19 CN CN201910653076.7A patent/CN110362343A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101546320A (zh) * | 2008-03-27 | 2009-09-30 | 林兆祥 | 一种基于滑动窗口的数据差异分析方法 |
CN105871619A (zh) * | 2016-04-18 | 2016-08-17 | 中国科学院信息工程研究所 | 一种基于n-gram多特征的流量载荷类型检测方法 |
US20180143979A1 (en) * | 2016-11-21 | 2018-05-24 | Université de Lausanne | Method for segmenting and indexing features from multidimensional data |
CN109977668A (zh) * | 2017-12-27 | 2019-07-05 | 哈尔滨安天科技股份有限公司 | 恶意代码的查询方法及*** |
CN109101479A (zh) * | 2018-06-07 | 2018-12-28 | 苏宁易购集团股份有限公司 | 一种用于中文语句的聚类方法及装置 |
CN109151218A (zh) * | 2018-08-21 | 2019-01-04 | 平安科技(深圳)有限公司 | 通话语音质检方法、装置、计算机设备及存储介质 |
Non-Patent Citations (3)
Title |
---|
GCYXF: "《Jaccard系数(Jaccard Coefficient)和tf-idf方法》", 《HTTPS://BLOG.CSDN.NET/GCYXF/ARTICLE/DETAILS/39480425》 * |
君的名字: "《【代码克隆检测】基于K-gram hash 分析特征提取技术(代码篇)》", 《 HTTPS://BLOG.CSDN.NET/GRACE_0642/ARTICLE/DETAILS/53128303》 * |
君的名字: "《基于K-gram的winnowing特征提取剽窃查重检测技术(概念篇)》", 《HTTPS://BLOG.CSDN.NET/GRACE_0642/ARTICLE/DETAILS/53115067》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112579155A (zh) * | 2021-02-23 | 2021-03-30 | 北京北大软件工程股份有限公司 | 代码相似性检测方法、装置以及存储介质 |
WO2023028721A1 (en) * | 2021-08-28 | 2023-03-09 | Huawei Technologies Co.,Ltd. | Systems and methods for detection of code clones |
CN117473494A (zh) * | 2023-06-06 | 2024-01-30 | 兴华永恒(北京)科技有限责任公司 | 同源二进制文件的确定方法、装置、电子设备及存储介质 |
CN116954701A (zh) * | 2023-08-09 | 2023-10-27 | 软安科技有限公司 | 一种基于血缘关系的二进制检测方法及*** |
CN116954701B (zh) * | 2023-08-09 | 2024-05-14 | 软安科技有限公司 | 一种基于血缘关系的二进制组件检测方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110362343A (zh) | N-Gram的检测字节码相似度的方法 | |
Baldwin et al. | Leveraging support vector machine for opcode density based detection of crypto-ransomware | |
US10534931B2 (en) | Systems, devices and methods for automatic detection and masking of private data | |
CN104424402B (zh) | 一种用于检测盗版应用程序的方法及装置 | |
CN101477610B (zh) | 源码和目标码联合嵌入的软件水印方法 | |
WO2019246294A1 (en) | Methods, devices and systems for data augmentation to improve fraud detection | |
CN107239678B (zh) | 一种基于Java文件目录结构的Android应用重打包检测方法 | |
CN110569629A (zh) | 二进制代码文件溯源方法 | |
CN110990058B (zh) | 软件相似性度量方法及装置 | |
CN108694042B (zh) | 网页中的JavaScript代码解混淆方法 | |
CN104462990A (zh) | 字符串加解密方法和装置 | |
Ren et al. | A buffer overflow prediction approach based on software metrics and machine learning | |
Shakya et al. | Smartmixmodel: machine learning-based vulnerability detection of solidity smart contracts | |
Jia et al. | A neural network-based approach for cryptographic function detection in malware | |
Mai et al. | MobileNet-Based IoT Malware Detection with Opcode Features | |
CN105808602B (zh) | 一种垃圾信息的检测方法及装置 | |
EP3384403A1 (en) | Spreadsheet with unit parsing | |
CN109670972A (zh) | 核保方法、装置、电子设备、存储介质 | |
Ali-Gombe et al. | cRGB_Mem: At the intersection of memory forensics and machine learning | |
Park et al. | Symmetric-Key cryptographic routine detection in anti-reverse engineered binaries using hardware tracing | |
CN114254613A (zh) | 基于IR2Vec的跨架构密码算法识别方法及*** | |
Lee et al. | Trend of malware detection using deep learning | |
Adhikari et al. | Using the Strings Metadata to Detect the Source Language of the Binary | |
Xuan et al. | BiTCN malware classification method based on multi-feature fusion | |
Xu et al. | Family Classification based on Tree Representations for Malware |
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: 20191022 |