CN103577728B - 一种使用收缩执行依赖图识别库函数的方法 - Google Patents
一种使用收缩执行依赖图识别库函数的方法 Download PDFInfo
- Publication number
- CN103577728B CN103577728B CN201310572174.0A CN201310572174A CN103577728B CN 103577728 B CN103577728 B CN 103577728B CN 201310572174 A CN201310572174 A CN 201310572174A CN 103577728 B CN103577728 B CN 103577728B
- Authority
- CN
- China
- Prior art keywords
- function
- dependency graph
- built
- instruction
- point
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 28
- 230000008602 contraction Effects 0.000 title claims description 18
- 239000011159 matrix material Substances 0.000 claims abstract description 10
- 230000001343 mnemonic effect Effects 0.000 claims description 6
- 238000005206 flow analysis Methods 0.000 claims description 2
- 230000006870 function Effects 0.000 description 64
- 238000010586 diagram Methods 0.000 description 6
- 238000004458 analytical method Methods 0.000 description 5
- 230000000052 comparative effect Effects 0.000 description 3
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000005065 mining 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/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
一种使用收缩执行依赖图识别库函数的方法,属于软件逆向工程领域。所述方法为:1)对目标函数和库函数建立执行依赖图(EDG);2)对EDG的局部EDG序列化,得到特征值序列和有序邻接矩阵;3)参照库函数EDG将目标函数和库函数EDG中有唯一点序列且不包含库函数EDG首尾的局部EDG收缩成点;4)判断库函数收缩EDG是否是目标函数收缩EDG的同构子图;5)验证识别结果是否有效。本方法不但能准确识别完整库函数,还能识别传统方法不能识别的多态及非连续字节的内联库函数,并有效缩短识别时间。
Description
技术领域
本发明属于软件逆向工程领域,涉及一种使用收缩执行依赖图识别库函数的方法。
背景技术
逆向工程在二进制代码审查、恶意代码分析、移植代码等方面具有非常重要的应用。库函数识别是整个逆向工程里至关重要的一个环节。它不但可以大大简化分析人员的工作量,还可以用来挖掘分析人员感兴趣的代码,辅助分析人员理解二进制代码。传统库函数识别方法使用函数头字节特征造成识别率偏低,而且也无法识别内联库函数。另外库函数的实例可能是多态的或者其字节是不连续的,对于这样的库函数,传统的库函数识别方法是无法处理的。
库函数的识别是逆向工程中的关键技术。库函数识别的难点在于库函数实例的字节可能是非连续的,并且代码中的操作数可能也与库函数不同。
发明内容
为了解决上述两个难点,本发明提出了一种通过判断执行依赖图子图同构来识别内联库函数的新方法。
本发明提出的使用收缩执行依赖图识别库函数的方法,包括如下步骤:
步骤1:构建目标函数和库函数的执行依赖图;
步骤2:对执行依赖图中的局部执行依赖图进行序列化,得到点特征值序列和存储边信息的有序邻接矩阵;
步骤3:参照库函数执行依赖图将目标函数和库函数执行依赖图中有唯一确定的点序列且不包含库函数执行依赖图首尾的局部执行依赖图收缩成一个点;
步骤4:判断库函数的收缩执行依赖图是否是目标函数收缩执行依赖图的同构子图,其中对于未收缩的点仅比较其特征值,对于收缩的点不仅比较其特征值序列,还比较其有序邻接矩阵;
步骤5:验证目标函数收缩执行依赖图中识别出的与库函数收缩执行依赖图同构的子图是否是有效的识别结果。
执行依赖图(ExecutionDependenceGraph,EDG)是本发明提出的一种综合程序依赖图与控制流图的新的混合表示。通过EDG,将库函数识别问题转化为子图同构测试问题。子图同构测试是NP难问题。使用EDG的库函数识别方法,在识别复杂库函数时往往不能在规定时间内结束。在EDG的基础上,本发明提出了一种改进的EDG,即收缩执行依赖图(ContractedExecutionDependenceGraph,CEDG)。一个基本块的EDG称为局部EDG。一个局部EDG序列化后,若唯一对应于一个点序列,则此局部EDG的同构判断可以通过比较特征值序列和有序0-1邻接矩阵来完成。利用此特性,在EDG子图同构测试中,参照库函数执行依赖图将目标函数和库函数执行依赖图中有唯一确定的点序列且不包含库函数执行依赖图首尾的局部执行依赖图收缩成一个点。按这种方法收缩后的EDG,称为收缩执行依赖图(CEDG),然后对目标函数的CEDG和库函数的CEDG进行子图同构测试。特别的,对于完整库函数识别,因目标函数和库函数指令数相等而只需进行图同构测试,因此,库函数和目标函数的所有局部EDG都可以收缩。
本方法不但能准确识别完整库函数,还能识别传统方法不能识别的多态及非连续字节的内联库函数,并有效缩短识别时间。收缩执行依赖图方法可以在维持与不收缩方法准确率与查全率一致的情况下,有效缩短识别时间。
附图说明
图1是本发明的流程示意图。
图2是目标函数执行依赖图示意图。
图3是库函数执行依赖图示意图。
图4是目标函数收缩执行依赖图示意图。
图5是库函数收缩执行依赖图示意图。
图6是识别结果验证不通过示意图一。
图7是识别结果验证不通过示意图二。
具体实施方式
下面结合附图对本发明的技术方案作进一步的说明,但并不局限于此,凡是对本发明技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的保护范围中。
具体实施方式一:本实施方式中的使用收缩执行依赖图识别库函数的方法,首先对目标函数和库函数建立执行依赖图;然后对执行依赖图的基本块内依赖图进行序列化;如果一个基本块内依赖图有唯一确定的点序列,则在执行依赖图中将其收缩成一个点;判断库函数的执行依赖图是否是目标函数执行依赖图的同构子图;最后验证识别结果是否有效。如图1-5所示,具体步骤如下:
步骤1:构建目标函数和库函数的执行依赖图:
执行依赖图(EDG)是本发明提出的一个综合程序依赖图与控制流图的新的混合表示。节点代表指令,边代表指令执行依赖(包括数据依赖和控制依赖)。其中数据依赖边只存在于基本块(单进单出的连续指令序列)内,控制依赖边不仅存在于基本块内,还存在于基本块间。
步骤11:对函数进行反汇编,计算指令读写集合及特征值;
步骤12:划分基本块(单进单出的连续指令序列),然后进行控制流分析,得到控制流图;
步骤13:对基本块内的指令进行数据和控制依赖分析;
步骤14:对基本块间的末尾指令和开头指令的控制依赖分析,即对任意块末尾指令v1与任意块开头指令v2,如果v2是v1的跳转目标,或者v2是条件跳转v1的下一条指令,或者v2是跳转目标且紧接v1之后,则v1和v2存在控制依赖;
步骤15:对基本块内的执行依赖进行简化,对任意三个点vi,vj,vk,若vi与vj,vj与vk,vi与vk有依赖,则EDG中删去(vi,vk)。
步骤2:对执行依赖图中局部EDG进行序列化,得到特征值序列和有序邻接矩阵:
步骤21:选取局部EDG中所有无前驱的点;
步骤22:将第一步选取的点按其对应的指令特征值从小到大的顺序进行排序后输出到点序列中;
步骤23:从局部EDG中删除第一步选取的点及其关联的边;
步骤24:重复步骤21、22、23,直至局部EDG中没有点为止;
步骤25:将点序列中的点替换为点的特征值得到特征值序列;
步骤26:遍历点序列中任意第i个和第j个点是否在局部EDG中存在边,如果存在,则将有序邻接矩阵的第i行j列元素标记为1,否则标记为0。
步骤3:参照库函数执行依赖图将目标函数和库函数执行依赖图中可以整体比较的局部执行依赖图收缩成一个点;
步骤4:判断库函数的收缩执行依赖图是否是目标函数收缩执行依赖图的同构子图,其中未收缩的点比较特征值,收缩的点比较特征值序列及有序邻接矩阵;
步骤5:判断目标函数收缩执行依赖图中识别出的与库函数收缩执行依赖图同构的子图是否是有效的识别结果。
具体实施方式二:本实施方式与具体实施方式一不同的是,步骤11中指令读写集合是指寄存器、标记寄存器各个标记位和内存。为避免复杂的指针别名分析,所有内存地址统一为一虚拟变量VMEM。
具体实施方式三:本实施方式与具体实施方式一不同的是,步骤11中指令特征值的计算具体步骤如下:
(1)指令标准化。标准化结果为二元组SR=(m,r),其中m为指令助记符,r为操作数特征值,其取值见表1:
表1
(2)标准化结果哈希化。先计算字符串哈希函数Hash(m),该函数的输入m是一个指令助记符,输出是与其他指令助记符不冲突的16位整数。然后,通过ID(SR)=Hash(m)|(r<<16)将该16位整数与左移16位的r值组合成一个32位的整数作为标准化后指令的特征值。
具体实施方式四:本实施方式与具体实施方式一不同的是,步骤13包括如下步骤:
(1)对基本块内任意两条指令v1,v2,如果且D1<D2,则它们存在数据依赖。其中Ri/Wi表示vi的读/写集合。Di表示vi的地址。
(2)如果基本块最后一条指令为跳转指令,则块内所有的指令都存在控制依赖于最后一条指令。
具体实施方式五:本实施方式与具体实施方式一不同的是,步骤3中的收缩EDG算法输入欲收缩的EDGG1和参照EDGG2,输出收缩后的EDG。具体包括如下步骤:
(1)标记G1中的所有局部EDG为收缩,除了那些没有唯一确定的点序列的局部EDG以外;
(2)识别G1中的包含任一G2头的所有指令的局部EDG,所谓头是指没有前驱的局部EDG;
(3)识别G1中的包含任一G2尾的所有指令的局部EDG,所谓尾是指没有后继的局部EDG;
(4)检查步骤(2)和步骤(3)中识别出的局部EDG之间的连通性。连通的局部EDG标记为不收缩;
(5)将G1中标记为收缩的局部EDG替换为一个点。原来指向局部EDG入口的边改为指向替换点。原来从局部EDG出口的出发的边改为从替换点出发。
具体实施方式六:本实施方式与具体实施方式一不同的是,步骤5的具体步骤如下:
(1)依次选取一个目标函数EDG中的但不在库函数实例中的点;
(2)如果此点在实例的地址范围之外,若实例中存在一点有控制依赖于此点,则返回FALSE(见图6),否则返回TRUE;
(3)如果此点在实例的地址范围之内,实例中存在一点有数据依赖于此点,但此点没有数据依赖于实例中其他点,则返回TRUE,否则返回FALSE(见图7)。
Claims (7)
1.一种使用收缩执行依赖图识别库函数的方法,其特征在于所述方法步骤如下:
步骤1:构建目标函数和库函数的执行依赖图;
步骤2:对执行依赖图中的局部执行依赖图进行序列化,得到点特征值序列和存储边信息的有序邻接矩阵;
步骤3:参照库函数执行依赖图将目标函数和库函数执行依赖图中有唯一确定的点序列且不包含库函数执行依赖图首尾的局部执行依赖图收缩成一个点;
步骤4:判断库函数的收缩执行依赖图是否是目标函数收缩执行依赖图的同构子图,其中对于未收缩的点仅比较其特征值,对于收缩的点不仅比较其特征值序列,还比较其有序邻接矩阵;
步骤5:验证目标函数收缩执行依赖图中识别出的与库函数收缩执行依赖图同构的子图是否是有效的识别结果。
2.根据权利要求1所述的一种使用收缩执行依赖图识别库函数的方法,其特征在于所述执行依赖图是依赖图与控制流图的混合表示,节点代表指令,边代表指令执行依赖。
3.根据权利要求1所述的一种使用收缩执行依赖图识别库函数的方法,其特征在于所述步骤1的具体步骤如下:
步骤11:对函数进行反汇编,计算指令读写集合及特征值;
步骤12:划分基本块,然后进行控制流分析,得到控制流图;
步骤13:对基本块内的指令进行数据和控制依赖分析;
步骤14:对基本块间的末尾指令和开头指令的控制依赖分析,即对任意块末尾指令v1与任意块开头指令v2,如果v2是v1的跳转目标,或者v2是条件跳转v1的下一条指令,或者v2是跳转目标且紧接v1之后,则v1和v2存在控制依赖;
步骤15:对基本块内的执行依赖进行简化,对任意三个点vi,vj,vk,若vi与vj,vj与vk,vi与vk有依赖,则执行依赖图中删去(vi,vk)。
4.根据权利要求3所述的一种使用收缩执行依赖图识别库函数的方法,其特征在于所述步骤13包括如下步骤:
(1)对基本块内任意两条指令v1,v2,如果且D1<D2,则它们存在数据依赖,其中Ri/Wi表示vi的读/写集合,Di表示vi的地址;
(2)如果基本块最后一条指令为跳转指令,则块内所有的指令都存在控制依赖于最后一条指令。
5.根据权利要求1所述的一种使用收缩执行依赖图识别库函数的方法,其特征在于所述步骤2的具体步骤如下:
步骤21:选取局部执行依赖图中所有无前驱的点;
步骤22:将第一步选取的点按其对应的指令特征值从小到大的顺序进行排序后输出到点序列中;
步骤23:从局部执行依赖图中删除第一步选取的点及其关联的边;
步骤24:重复步骤21、22、23,直至局部执行依赖图中没有点为止;
步骤25:将点序列中的点替换为点的特征值得到特征值序列;
步骤26:遍历点序列中任意第i个和第j个点是否在局部执行依赖图中存在边,如果存在,则将有序邻接矩阵的第i行j列元素标记为1,否则标记为0。
6.根据权利要求3所述的一种使用收缩执行依赖图识别库函数的方法,其特征在于所述步骤11中指令特征值的计算具体步骤如下:
(1)指令标准化:标准化结果为二元组SR=(m,r),其中m为指令助记符,r为操作数特征值;
(2)标准化结果哈希化:先计算字符串哈希函数Hash(m),该函数的输入m是一个指令助记符,输出是与其他指令助记符不冲突的16位整数;然后,通过ID(SR)=Hash(m)|(r<<16)将该16位整数与左移16位的r值组合成一个32位的整数作为标准化后指令的特征值。
7.根据权利要求1所述的一种使用收缩执行依赖图识别库函数的方法,其特征在于所述步骤5的具体步骤如下:
(1)依次选取一个目标函数执行依赖图中的但不在库函数实例中的点;
(2)如果此点在实例的地址范围之外,若实例中存在一点有控制依赖于此点,则返回FALSE,否则返回TRUE;
(3)如果此点在实例的地址范围之内,实例中存在一点有数据依赖于此点,但此点没有数据依赖于实例中其他点,则返回TRUE,否则返回FALSE。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310572174.0A CN103577728B (zh) | 2013-11-16 | 2013-11-16 | 一种使用收缩执行依赖图识别库函数的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310572174.0A CN103577728B (zh) | 2013-11-16 | 2013-11-16 | 一种使用收缩执行依赖图识别库函数的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103577728A CN103577728A (zh) | 2014-02-12 |
CN103577728B true CN103577728B (zh) | 2016-03-30 |
Family
ID=50049492
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310572174.0A Active CN103577728B (zh) | 2013-11-16 | 2013-11-16 | 一种使用收缩执行依赖图识别库函数的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103577728B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104915211B (zh) * | 2015-06-18 | 2018-04-17 | 西安交通大学 | 反编译中基于子图同构匹配算法的内在函数识别方法 |
CN110851925B (zh) * | 2019-10-31 | 2024-02-20 | 武汉科技大学 | 基于改进邻接矩阵的行星轮系同构判定方法、系统和介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1818863A (zh) * | 2006-03-13 | 2006-08-16 | 浙江大学 | 嵌入式软件反编译中的静态库函数识别实现方法 |
CN1892602A (zh) * | 2005-07-01 | 2007-01-10 | 中国科学院计算技术研究所 | 一种二进制翻译中库函数调用的处理方法 |
CN101697121A (zh) * | 2009-10-26 | 2010-04-21 | 哈尔滨工业大学 | 一种基于程序源代码语义分析的代码相似度检测方法 |
US7921418B2 (en) * | 2006-08-15 | 2011-04-05 | International Business Machines Corporation | Compile time evaluation of library functions |
CN102034042A (zh) * | 2010-12-13 | 2011-04-27 | 四川大学 | 基于函数调用关系图特征的恶意代码检测新方法 |
-
2013
- 2013-11-16 CN CN201310572174.0A patent/CN103577728B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1892602A (zh) * | 2005-07-01 | 2007-01-10 | 中国科学院计算技术研究所 | 一种二进制翻译中库函数调用的处理方法 |
CN1818863A (zh) * | 2006-03-13 | 2006-08-16 | 浙江大学 | 嵌入式软件反编译中的静态库函数识别实现方法 |
US7921418B2 (en) * | 2006-08-15 | 2011-04-05 | International Business Machines Corporation | Compile time evaluation of library functions |
CN101697121A (zh) * | 2009-10-26 | 2010-04-21 | 哈尔滨工业大学 | 一种基于程序源代码语义分析的代码相似度检测方法 |
CN102034042A (zh) * | 2010-12-13 | 2011-04-27 | 四川大学 | 基于函数调用关系图特征的恶意代码检测新方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103577728A (zh) | 2014-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10489455B2 (en) | Scoped search engine | |
Drew et al. | Polymorphic malware detection using sequence classification methods | |
CN107967152B (zh) | 基于最小分支路径函数胎记的软件局部抄袭证据生成方法 | |
CN110825363B (zh) | 智能合约获取方法、装置、电子设备及存储介质 | |
Kaplan et al. | RASSA: resistive prealignment accelerator for approximate DNA long read mapping | |
Faro et al. | The exact string matching problem: a comprehensive experimental evaluation | |
CN102870116B (zh) | 内容匹配方法和装置 | |
Cheng et al. | BitMapper: an efficient all-mapper based on bit-vector computing | |
CN108197433A (zh) | 快速dna测序数据分析平台的数据内存和硬盘分流存储方法 | |
US20210201163A1 (en) | Genome Sequence Alignment System and Method | |
US20110295869A1 (en) | Efficient string matching state machine | |
Bahubalendruni et al. | An efficient stable subassembly identification method towards assembly sequence generation | |
US9830326B2 (en) | Identifying data offsets using binary masks | |
Chen et al. | A high-throughput FPGA accelerator for short-read mapping of the whole human genome | |
CN103577728B (zh) | 一种使用收缩执行依赖图识别库函数的方法 | |
CN116561389A (zh) | 一种文本匹配方法、装置、设备及存储介质 | |
Pockrandt | Approximate string matching: improving data structures and algorithms | |
CN111063394A (zh) | 基于基因序列的物种快速查找及建库方法、系统和介质 | |
CN114420210B (zh) | 一种生物测序序列快速修剪方法及系统 | |
CN108304467A (zh) | 用于文本间匹配的方法 | |
Kim et al. | AirLift: A Fast and Comprehensive Technique for Translating Alignments between Reference Genomes | |
EP3113038B1 (en) | A data handling method | |
Chen et al. | CGAP-align: a high performance DNA short read alignment tool | |
Gouda et al. | A fast algorithm for subgraph search problem | |
CN105354100A (zh) | 一种修复希捷硬盘p表的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230625 Address after: Building 1, Kechuang headquarters, Shenzhen (Harbin) Industrial Park, 288 Zhigu street, Songbei District, Harbin City, Heilongjiang Province Patentee after: Harbin Nenchuang Digital Technology Co.,Ltd. Address before: 150000 No. 92, West Da Zhi street, Nangang District, Harbin, Heilongjiang. Patentee before: HARBIN INSTITUTE OF TECHNOLOGY |
|
TR01 | Transfer of patent right |