CN106126225B - 一种基于程序演进模型的目标代码逆向工程方法 - Google Patents
一种基于程序演进模型的目标代码逆向工程方法 Download PDFInfo
- Publication number
- CN106126225B CN106126225B CN201610456943.4A CN201610456943A CN106126225B CN 106126225 B CN106126225 B CN 106126225B CN 201610456943 A CN201610456943 A CN 201610456943A CN 106126225 B CN106126225 B CN 106126225B
- Authority
- CN
- China
- Prior art keywords
- file
- procedural model
- object code
- model storage
- storage file
- 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
Classifications
-
- 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/74—Reverse engineering; Extracting design information from source code
Abstract
本发明公开了一种基于程序演进模型的目标代码逆向工程方法,可以自动地识别目标代码文件封装格式,区分目标代码文件代码段,并使用反汇编技术进行分析并生成相应的程序模型,又在前一个程序模型基础上,再次进行分析并生成新的程序模型,不断重复以上过程,逐步精化,最终生成.ASM可再汇编文件。采用本发明,可以对自混淆的、含有指令重叠的目标代码文件进行准确而有效的逆向工程,可以应用于含有自混淆指令,指令重叠等加壳恶意软件的分析与识别以及防反汇编闭源软件的分析。
Description
技术领域
本发明涉及数据处理领域,尤其涉及一种基于程序演进模型的目标代码逆向工程方法。
背景技术
随着软件复杂度的提高,逆向工程越来越引起人们的重视,成为软件工程领域的一个新兴分支。使用目标代码逆向工程技术是为了在没有源代码的情况下,直接从已编译的或被特殊处理的最终目标程序出发,应用多种技术手段,复原程序行为语义信息,从而帮助了解程序的原理。分析恶意软件、闭源软件的漏洞、闭源软件的互操作性、目标程序与源程序的一致性、验证编译器的性能和准确性以及在调试过程中显示汇编指令都是目标代码逆向工程技术的关键应用场景。对目标代码进行逆向工程,根据其逆向工程的结果分析病毒运行机制、评估软件质量与推断程序行为目的的需求越来越多。
传统的目标代码逆向工程技术主要有线性扫描与递归下降两种经典基础方法。线性扫描为反汇编程序假设可执行的二进制代码包含了多个连续的二进制代码流,并且连续地对它进行解码。而被广泛应用的一款著名商业化的反汇编软件IDA Pro则运用了递归下降的方法。与线性扫描技术相比,递归下降技术试图在每个控制转移指令中确定更多可能的目标地址。
通常,目标代码逆向工程模型是指可以用于表示目标代码中的指令操作和数据的综合模型。在现有技术与工具体系下,一般采用结合反汇编代码的控制流图与一些表格(符号表、导入导出表等)的方式表示。然而,随着编译、防护与混淆技术的发展,以及一些特定编译优化技术的引入,传统的逆向工程方法已经无法正确地构造出逆向模型。
发明内容
本发明的目的是通过以下技术方案实现的。
根据本发明的实施方式,公开了一种基于程序演进模型的目标代码逆向工程方法,包括以下步骤:
步骤A:启动人机交互接口,向人机交互接口分别输入待逆向工程的目标代码文件、程序模型存储文件以及待生成的可再汇编代码文件的存储路径;
步骤B:读取目标代码文件首部,识别目标代码文件的封装格式,并将其封装格式打印到输出提示单元;
步骤C:根据输出提示单元接收的不同的封装格式,在不同的位置取出目标代码文件的起始地址,以及代码段的长度,定位代码段的地址范围;
步骤D:识别目标代码文件首部所记录的处理器体系结构信息;
步骤E:在指定的程序模型存储文件存储路径的目录下创建一个空的程序模型存储文件;
步骤F:结合前一轮创建的程序模型存储文件开始逐条分析代码段起始地址的机器指令,并将指令相关的信息写入到新创建的程序模型存储文件中;
步骤G:如果存在前一轮的程序模型存储文件,则将新生成写入的程序模型存储文件与前一轮所创建的程序模型存储文件进行比较,若两个程序模型没有差异,则表示程序模型已经稳定,则跳转至步骤H;否则,回到步骤E,重新对进行分析和修改操作,记录程序模型到新的程序模型存储文件之中。
步骤H:结合最后一个程序模型存储文件中存储的信息,即迭代修改后稳定的机器指令序列,使用对应处理器体系结构的反汇编引擎,生成反汇编代码,写入到最后的可再汇编代码文件中。
根据本发明的实施方式,所述步骤B的读取目标代码文件首部,识别目标代码文件的封装格式,并将其封装格式打印到输出提示单元具体包括:
步骤B1,读取文件首部数十个字节,匹配程序库中的样本,若匹配到相应封装格式的字节序列模式,则转到步骤B2;否则,输出:无法识别文件封装,逆向工程结束;
步骤B2:在输出提示单元打印目标代码文件的封装格式,然后转到步骤C。
根据本发明的实施方式,所述处理器体系结构信息包括指令集类型信息,根据不同的处理器体系结构,采用不同的反汇编处理引擎进行后续步骤的指令分析与反汇编代码生成操作;
根据本发明的实施方式,所述步骤D的识别目标代码文件首部所记录的处理器体系结构信息具体包括:
步骤D1,控制单元自动识别目标代码文件中机器码的体系结构,若能够识别,则转到步骤E;否则,转到步骤D2;
步骤D2,提示用户自己选择可选的处理器体系结构,选择完成后,转到步骤E。
根据本发明的实施方式,所述步骤F具体包括:如果步骤E中创建的程序模型存储文件为第一程序模型存储文件,则直接从代码段起始地址开始逐条地分析机器指令;否则,从上一轮迭代所创建的程序模型存储文件中的取出机器指令序列来进行分析,在此过程中,根据机器指令的操作,对机器指令序列本身进行修改,生成新的机器指令序列,即生成新的程序模型,分析结束后,将该程序模型写入到步骤E中创建的程序模型存储文件中。
根据本发明的实施方式,写入程序模型存储文件的信息包括:指令在文件的偏移地址,指令在内存中的映射地址,指令内容以及相应的反汇编代码。
本发明的优点在于:基于程序演进模型的目标代码逆向工程方法,从初始态空程序出发,通过搜索代码、求解间接跳转与检测自修改等一系列操作,逐步构造程序演进序列,可以对自混淆的、含有指令重叠的目标代码文件进行准确而有效的逆向工程,可以应用于含有自混淆指令,指令重叠等加壳恶意软件的分析与识别以及防反汇编闭源软件的分析,具有有益的技术效果。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
附图1示出了根据本发明实施方式的基于程序演进模型的目标代码逆向工程方法的流程图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
根据本发明的实施方式,如附图1所示,公开了一种基于程序演进模型的目标代码逆向工程方法,所述程序演进模型即基于程序模型的演进来进行逆向工程,所述方法包括以下步骤:
步骤A:启动人机交互接口,向人机交互接口分别输入待逆向工程的目标代码文件、程序模型存储文件以及待生成的可再汇编代码文件的存储路径;具体包括:
步骤A1,启动第一人机交互接口,并向用户发出请求,请求输入待逆向工程的目标代码文件路径,将待分析的目标代码文件的路径输入到第一人机交互接口中,控制单元自动判断输入的待分析文件路径是否有效,如果是,则转到步骤A2;否则,输出提示单元向用户提示:输入的待逆向工程目标代码文件路径无效,需重新输入;
步骤A2,启动第二人机交互接口,并向用户发出请求,请求输入程序模型存储文件的存储目录路径,将程序模型存储文件的存储路径输入到第二人机交互接口中,控制单元判断输入的存储路径是否有效,如果是,则转到步骤A3;否则,输出提示单元向用户提示:输入的程序模型存储文件存储目录路径无效,需重新输入;
步骤A3,启动第三人机交互接口,并向用户发出请求,请求输入待生成的反汇编代码ASM文件路径,将待生成的反汇编代码ASM文件路径输入第三人机交互接口中,控制单元判断输入的反汇编代码ASM文件的存储路径是否正确,如果是,则转到步骤B;否则,输出提示单元向用户提示:输入的反汇编代码ASM文件路径无效,需重新输入。
步骤B:读取目标代码文件首部,识别目标代码文件的封装格式,并将其封装格式打印到输出提示单元;具体包括:
步骤B1,读取文件首部数十个字节,匹配程序库中的样本,若匹配到相应封装格式的字节序列模式,则转到步骤B2;否则,输出:无法识别文件封装,逆向工程结束;
步骤B2:在输出提示单元打印目标代码文件的封装格式,然后转到步骤C。
步骤C:根据输出提示单元接收的不同的封装格式,在不同的位置取出目标代码文件的起始地址,以及代码段的长度,定位代码段的地址范围;
步骤D:识别目标代码文件首部所记录的处理器体系结构信息,即指令集类型信息,根据不同的处理器体系结构,采用不同的反汇编处理引擎进行后续步骤的指令分析与反汇编代码生成操作;具体包括:
步骤D1,控制单元自动识别目标代码文件中机器码的体系结构,若能够识别,则转到步骤E;否则,转到步骤D2;
步骤D2,提示用户自己选择可选的处理器体系结构,选择完成后,转到步骤E。
步骤E:在指定的程序模型存储文件存储路径的目录下创建一个空的程序模型存储文件;
步骤F:结合前一轮创建的程序模型存储文件开始逐条分析代码段起始地址的机器指令,并将指令相关的信息写入到新创建的程序模型存储文件中;具体包括:
如果步骤E中创建的程序模型存储文件为第一程序模型存储文件,则直接从代码段起始地址开始逐条地分析机器指令;否则,从上一轮迭代所创建的程序模型存储文件中的取出机器指令序列来进行分析,在此过程中,根据机器指令的操作,对机器指令序列本身进行修改,生成新的机器指令序列,即生成新的程序模型,分析结束后,将该程序模型写入到步骤E中创建的程序模型存储文件中;
写入程序模型存储文件的信息包括:指令在文件的偏移地址,指令在内存中的映射地址,指令内容以及相应的反汇编代码;
所述步骤F还包括:分析机器指令的过程中,若遇到跳转指令,根据具体处理器体系结构中的指令语义,演算跳转指令与调用返回指令中的目标指令地址,若能获取跳转目标地址,如果该地址处的指令尚未分析,则跳转至相应地址的指令进行后续分析;如果不能获取跳转目标地址或者目标地址处指令已经经过分析,则直接将指令的相关信息记录到程序模型存储文件中,并继续向后分析指令,直至分析到最后一条指令。
步骤G:如果存在前一轮的程序模型存储文件,则将新生成写入的程序模型存储文件与前一轮所创建的程序模型存储文件进行比较,若两个程序模型没有差异,则表示程序模型已经稳定,则跳转至步骤H;否则,回到步骤E,重新对进行分析和修改操作,记录程序模型到新的程序模型存储文件之中。
步骤H:结合最后一个程序模型存储文件中存储的信息,即迭代修改后稳定的机器指令序列,使用对应处理器体系结构的反汇编引擎,生成反汇编代码,写入到最后的可再汇编代码文件中。
本发明的基于程序演进模型的目标代码逆向工程方法的实现过程,可以看作是从初始态空程序P0出发,通过搜索代码、求解间接跳转与检测自修改等一系列操作,逐步构造程序演进序列P0…Pi…Pj…Pn的过程(0<=i<=j<=n)。实际上,程序Pn的演进构造是否可以达成,依赖于Pn-1的程序形态与演进前的数据状态。而这里,Pi与Pj或Pj与Pn将有可能是相同的,即程序通过一定的演进,存在回溯到演进过程的某一历史节点(但不保证数据状态也可回溯)的可能性。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (5)
1.一种基于程序演进模型的目标代码逆向工程方法,包括以下步骤:
步骤A:启动人机交互接口,向人机交互接口分别输入待逆向工程的目标代码文件、程序模型存储文件以及待生成的可再汇编代码文件的存储路径;
步骤B:读取目标代码文件首部,识别目标代码文件的封装格式,并将其封装格式打印到输出提示单元;
步骤C:根据输出提示单元接收的不同的封装格式,在不同的位置取出目标代码文件的起始地址,以及代码段的长度,定位代码段的地址范围;
步骤D:识别目标代码文件首部所记录的处理器体系结构信息;
步骤E:在指定的程序模型存储文件存储路径的目录下创建一个空的程序模型存储文件;
步骤F:结合前一轮创建的程序模型存储文件开始逐条分析代码段起始地址的机器指令,并将指令相关的信息写入到新创建的程序模型存储文件中;
步骤G:如果存在前一轮的程序模型存储文件,则将新生成写入的程序模型存储文件与前一轮所创建的程序模型存储文件进行比较,若两个程序模型没有差异,则表示程序模型已经稳定,则跳转至步骤H;否则,回到步骤E,重新进行分析和修改操作,记录程序模型到新的程序模型存储文件之中;
步骤H:结合最后一个程序模型存储文件中存储的信息,即迭代修改后稳定的机器指令序列,使用对应处理器体系结构的反汇编引擎,生成反汇编代码,写入到最后的可再汇编代码文件中;
其特征在于,
步骤D中:所述处理器体系结构信息包括指令集类型信息,根据不同的处理器体系结构,采用不同的反汇编处理引擎进行后续步骤的指令分析与反汇编代码生成操作;
步骤F中:如果步骤E中创建的程序模型存储文件为第一程序模型存储文件,则直接从代码段起始地址开始逐条地分析机器指令;否则,从上一轮迭代所创建的程序模型存储文件中的取出机器指令序列来进行分析,在此过程中,根据机器指令的操作,对机器指令序列本身进行修改,生成新的机器指令序列,即生成新的程序模型,分析结束后,将该程序模型写入到步骤E中创建的程序模型存储文件中。
2.一种如权利要求1所述的方法,所述步骤B的读取目标代码文件首部,识别目标代码文件的封装格式,并将其封装格式打印到输出提示单元具体包括:
步骤B1,读取文件首部数十个字节,匹配程序库中的样本,若匹配到相应封装格式的字节序列模式,则转到步骤B2;否则,输出:无法识别文件封装,逆向工程结束;
步骤B2:在输出提示单元打印目标代码文件的封装格式,然后转到步骤C。
3.一种如权利要求1所述的方法,所述步骤D的识别目标代码文件首部所记录的处理器体系结构信息具体包括:
步骤D1,控制单元自动识别目标代码文件中机器码的体系结构,若能够识别,则转到步骤E;否则,转到步骤D2;
步骤D2,提示用户自己选择可选的处理器体系结构,选择完成后,转到步骤E。
4.一种如权利要求3所述的方法,所述步骤F具体包括:如果步骤E中创建的程序模型存储文件为第一程序模型存储文件,则直接从代码段起始地址开始逐条地分析机器指令;否则,从上一轮迭代所创建的程序模型存储文件中的取出机器指令序列来进行分析,在此过程中,根据机器指令的操作,对机器指令序列本身进行修改,生成新的机器指令序列,即生成新的程序模型,分析结束后,将该程序模型写入到步骤E中创建的程序模型存储文件中。
5.一种如权利要求4所述的方法,写入程序模型存储文件的信息包括:指令在文件的偏移地址,指令在内存中的映射地址,指令内容以及相应的反汇编代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610456943.4A CN106126225B (zh) | 2016-06-22 | 2016-06-22 | 一种基于程序演进模型的目标代码逆向工程方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610456943.4A CN106126225B (zh) | 2016-06-22 | 2016-06-22 | 一种基于程序演进模型的目标代码逆向工程方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106126225A CN106126225A (zh) | 2016-11-16 |
CN106126225B true CN106126225B (zh) | 2019-02-12 |
Family
ID=57267823
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610456943.4A Active CN106126225B (zh) | 2016-06-22 | 2016-06-22 | 一种基于程序演进模型的目标代码逆向工程方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106126225B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106775913B (zh) * | 2016-12-16 | 2019-07-09 | 华东师范大学 | 一种目标代码控制流图生成方法 |
CN111310172B (zh) * | 2018-12-12 | 2022-03-11 | 北京忆芯科技有限公司 | 通过反汇编验证处理器执行轨迹的方法及控制部件 |
CN110262802B (zh) * | 2019-06-25 | 2023-02-03 | 中日龙(襄阳)机电技术开发有限公司 | 一种取出机Sequence数据的新型执行方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20030018722A (ko) * | 2001-08-31 | 2003-03-06 | (주) 소프트4소프트 | 소프트웨어 유지보수를 위한 자료 흐름 그래프 자동 생성방법 |
CN102681821A (zh) * | 2011-12-31 | 2012-09-19 | 浙江大学 | 基于C-SKY v2指令集的二进制工具集设计方法 |
CN103218246A (zh) * | 2013-04-19 | 2013-07-24 | 中国科学院自动化研究所 | 一种基于图描述语言的将二进制工具生成方法 |
CN103885770A (zh) * | 2014-01-21 | 2014-06-25 | 唐道成 | 单片机从可执行文件找回汇编文件的实现方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6339776B2 (en) * | 1999-10-04 | 2002-01-15 | International Business Machines Corporation | Dynamic semi-structured repository for mining software and software-related information |
-
2016
- 2016-06-22 CN CN201610456943.4A patent/CN106126225B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20030018722A (ko) * | 2001-08-31 | 2003-03-06 | (주) 소프트4소프트 | 소프트웨어 유지보수를 위한 자료 흐름 그래프 자동 생성방법 |
CN102681821A (zh) * | 2011-12-31 | 2012-09-19 | 浙江大学 | 基于C-SKY v2指令集的二进制工具集设计方法 |
CN103218246A (zh) * | 2013-04-19 | 2013-07-24 | 中国科学院自动化研究所 | 一种基于图描述语言的将二进制工具生成方法 |
CN103885770A (zh) * | 2014-01-21 | 2014-06-25 | 唐道成 | 单片机从可执行文件找回汇编文件的实现方法 |
Non-Patent Citations (2)
Title |
---|
《一种动静结合的代码反汇编框架》;奚琪 等;《小型微型计算机系统》;20131015;2251-2255 |
Jakstab: A static analysis platform for binaries;J Kinder etc.;《International Conference on Computer Aided Verification》;20081231;423-427 |
Also Published As
Publication number | Publication date |
---|---|
CN106126225A (zh) | 2016-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106055343B (zh) | 一种基于程序演进模型的目标代码逆向工程系统 | |
US10545733B2 (en) | Code reusability | |
CN111708539B (zh) | 一种应用程序代码转换方法、装置、电子设备和存储介质 | |
CN106471476B (zh) | 用于对经优化代码的编辑并继续以及增强的经优化调试的技术 | |
CN102200911B (zh) | 变量闭包 | |
US9678730B2 (en) | Decision tree ensemble compilation | |
US10437574B2 (en) | System and method for providing code completion features for code modules | |
US9223570B2 (en) | Migration assistance using compiler metadata | |
US11579856B2 (en) | Multi-chip compatible compiling method and device | |
Hasabnis et al. | Lifting assembly to intermediate representation: A novel approach leveraging compilers | |
Gauthier et al. | Premise selection and external provers for HOL4 | |
CN103377045B (zh) | 用于翻译验证测试的方法和系统 | |
CN109101237A (zh) | 代码的加密编译方法及装置 | |
CN107678748A (zh) | 一种源代码文件编译方法及装置 | |
CN106126225B (zh) | 一种基于程序演进模型的目标代码逆向工程方法 | |
CN105446725A (zh) | 用于模型驱动开发的方法和系统 | |
WO2017025940A1 (en) | Static analysis and reconstruction of deep link handling in compiled applications | |
CN109564540A (zh) | 用于jit编译器的调试工具 | |
CN109614103A (zh) | 一种基于字符的代码补全方法及系统 | |
US7822615B2 (en) | Translating expressions in a computing environment | |
CN116166236A (zh) | 代码推荐方法、装置、计算机设备及存储介质 | |
KR20200071413A (ko) | 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법 | |
CN109155129B (zh) | 语言程控系统 | |
CN110659022B (zh) | 一种基于Java自动调用Python脚本的方法 | |
JP2017522639A5 (zh) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |