CN106055343A - 一种基于程序演进模型的目标代码逆向工程系统 - Google Patents
一种基于程序演进模型的目标代码逆向工程系统 Download PDFInfo
- Publication number
- CN106055343A CN106055343A CN201610456941.5A CN201610456941A CN106055343A CN 106055343 A CN106055343 A CN 106055343A CN 201610456941 A CN201610456941 A CN 201610456941A CN 106055343 A CN106055343 A CN 106055343A
- Authority
- CN
- China
- Prior art keywords
- unit
- file
- object code
- instruction
- dis
- 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.)
- Granted
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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于程序演进模型的目标代码逆向工程系统,可以自动地识别目标代码文件封装格式,区分目标代码文件代码段,并使用反汇编技术进行分析并生成相应的程序模型,又在前一个程序模型基础上,再次进行分析并生成新的程序模型,不断重复以上过程,逐步精化,最终生成.ASM可再汇编文件。采用本发明,可以对自混淆的、含有指令重叠的目标代码文件进行准确而有效的逆向工程,可以应用于含有自混淆指令,指令重叠等加壳恶意软件的分析与识别以及防反汇编闭源软件的分析。
Description
技术领域
本发明涉及数据处理领域,尤其涉及一种基于程序演进模型的目标代码逆向工程系统。
背景技术
随着软件复杂度的提高,逆向工程越来越引起人们的重视,成为软件工程领域的一个新兴分支。使用目标代码逆向工程技术是为了在没有源代码的情况下,直接从已编译的或被特殊处理的最终目标程序出发,应用多种技术手段,复原程序行为语义信息,从而帮助了解程序的原理。分析恶意软件、闭源软件的漏洞、闭源软件的互操作性、目标程序与源程序的一致性、验证编译器的性能和准确性以及在调试过程中显示汇编指令都是目标代码逆向工程技术的关键应用场景。对目标代码进行逆向工程,根据其逆向工程的结果分析病毒运行机制、评估软件质量与推断程序行为目的的需求越来越多。
传统的目标代码逆向工程技术主要有线性扫描与递归下降两种经典基础系统。线性扫描为反汇编程序假设可执行的二进制代码包含了多个连续的二进制代码流,并且连续地对它进行解码。而被广泛应用的一款著名商业化的反汇编软件IDA Pro则运用了递归下降的系统。与线性扫描技术相比,递归下降技术试图在每个控制转移指令中确定更多可能的目标地址。
通常,目标代码逆向工程模型是指可以用于表示目标代码中的指令操作和数据的综合模型。在现有技术与工具体系下,一般采用结合反汇编代码的控制流图与一些表格(符号表、导入导出表等)的方式表示。然而,随着编译、防护与混淆技术的发展,以及一些特定编译优化技术的引入,传统的逆向工程系统已经无法正确地构造出逆向模型。
发明内容
本发明的目的是通过以下技术方案实现的。
根据本发明的实施方式,公开了一种基于程序演进模型的目标代码逆向工程系统,所述系统具体包括:显示单元、输出提示单元、格式识别打印单元、采样单元、体系结构确定单元、模型存储创建单元、指令分析单元、比较单元以及反汇编单元,所述显示单元分别连接输出提示单元、格式识别打印单元,所述格式识别打印单元还分别连接输出提示单元和采样单元,所述输出提示单元还连接采样单元,所述采样单元依次连接体系结构确定单元、模型存储创建单元、指令分析单元、比较单元以及反汇编单元。
根据本发明的实施方式,所述显示单元启动人机交互接口,向人机交互接口分别输入待逆向工程的目标代码文件、程序模型存储文件以及待生成的可再汇编代码文件的存储路径。
根据本发明的实施方式,所述格式识别打印单元读取目标代码文件首部,识别目标代码文件的封装格式,并将其封装格式打印到输出提示单元。
根据本发明的实施方式,所述采样单元根据输出提示单元接收的不同的封装格式,在不同的位置取出目标代码文件的起始地址,以及代码段的长度,定位代码段的地址范围。
根据本发明的实施方式,所述体系结构确定单元识别目标代码文件首部所记录的处理器体系结构信息,根据不同的处理器体系结构,采用不同的反汇编处理引擎进行后续的指令分析与反汇编代码生成操作。
根据本发明的实施方式,所述模型存储创建单元在指定的程序模型存储文件存储路径的目录下创建一个空的程序模型存储文件。
根据本发明的实施方式,所述指令分析单元结合之前创建的程序模型存储文件开始逐条分析代码段起始地址的机器指令,并将指令相关的信息写入到新创建的程序模型存储文件中。
根据本发明的实施方式,所述比较单元,如果存在之前的程序模型存储文件,则将新生成写入的程序模型存储文件与前一轮所创建的程序模型存储文件进行比较,若两个程序模型没有差异,则表示程序模型已经稳定,则由所述反汇编单元结合最后一个程序模型存储文件中存储的信息,使用对应处理器体系结构的反汇编引擎,生成反汇编代码,写入到最后的可再汇编代码文件中。
本发明的优点在于:基于程序演进模型的目标代码逆向工程系统,从初始态空程序出发,通过搜索代码、求解间接跳转与检测自修改等一系列操作,逐步构造程序演进序列,可以对自混淆的、含有指令重叠的目标代码文件进行准确而有效的逆向工程,可以应用于含有自混淆指令,指令重叠等加壳恶意软件的分析与识别以及防反汇编闭源软件的分析,具有有益的技术效果。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
附图1示出了根据本发明实施方式的基于程序演进模型的目标代码逆向工程系统的结构示意图;
附图2示出了根据本发明实施方式的基于程序演进模型的目标代码逆向工程系统执行过程示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
根据本发明的实施方式,如附图1所示,公开了一种基于程序演进模型的目标代码逆向工程系统,所述程序演进模型即基于程序模型的演进进行逆向工程,所述系统具体包括:显示单元、输出提示单元、格式识别打印单元、采样单元、体系结构确定单元、模型存储创建单元、指令分析单元、比较单元以及反汇编单元,所述显示单元分别连接输出提示单元、格式识别打印单元,所述格式识别打印单元还分别连接输出提示单元和采样单元,所述输出提示单元还连接采样单元,所述采样单元依次连接体系结构确定单元、模型存储创建单元、指令分析单元、比较单元以及反汇编单元。
如附图2所示,所述基于程序演进模型的目标代码逆向工程系统运行原理具体为:
所述显示单元启动人机交互接口,向人机交互接口分别输入待逆向工程的目标代码文件、程序模型存储文件以及待生成的可再汇编代码文件的存储路径;具体包括:
显示单元首先启动第一人机交互接口,并向用户发出请求,请求输入待逆向工程的目标代码文件路径,将待分析的目标代码文件的路径输入到第一人机交互接口中,自动判断输入的待分析文件路径是否有效,如果是,则继续后续操作;否则,输出提示单元向用户提示:输入的待逆向工程目标代码文件路径无效,需重新输入;
然后,显示单元启动第二人机交互接口,并向用户发出请求,请求输入程序模型存储文件的存储目录路径,将程序模型存储文件的存储路径输入到第二人机交互接口中,判断输入的存储路径是否有效,如果是,则继续后续操作;否则,输出提示单元向用户提示:输入的程序模型存储文件存储目录路径无效,需重新输入;
最后,显示单元启动第三人机交互接口,并向用户发出请求,请求输入待生成的反汇编代码ASM文件路径,将待生成的反汇编代码ASM文件路径输入第三人机交互接口中,判断输入的反汇编代码ASM文件的存储路径是否正确,如果是,则进入格式识别打印操作;否则,输出提示单元向用户提示:输入的反汇编代码ASM文件路径无效,需重新输入。
所述格式识别打印单元读取目标代码文件首部,识别目标代码文件的封装格式,并将其封装格式打印到输出提示单元;具体包括:
读取文件首部数十个字节,匹配程序库中的样本,若匹配到相应封装格式的字节序列模式,则输出提示单元打印目标代码文件的封装格式;否则,输出无法识别文件封装,逆向工程结束。
所述采样单元根据输出提示单元接收的不同的封装格式,在不同的位置取出目标代码文件的起始地址,以及代码段的长度,定位代码段的地址范围。
所述体系结构确定单元识别目标代码文件首部所记录的处理器体系结构信息,即指令集类型信息,根据不同的处理器体系结构,采用不同的反汇编处理引擎进行后续的指令分析与反汇编代码生成操作;具体包括:
体系结构确定单元自动识别目标代码文件中机器码的体系结构,若能够识别,则所述模型存储创建单元在指定的程序模型存储文件存储路径的目录下创建一个空的程序模型存储文件;否则,提示用户自己选择可选的处理器体系结构,选择完成后,再由所述模型存储创建单元在指定的程序模型存储文件存储路径的目录下创建一个空的程序模型存储文件。
所述指令分析单元结合之前创建的程序模型存储文件开始逐条分析代码段起始地址的机器指令,并将指令相关的信息写入到新创建的程序模型存储文件中;具体包括:
如果所述模型存储创建单元创建的程序模型存储文件为第一程序模型存储文件,则直接从代码段起始地址开始逐条地分析机器指令;否则,从上一轮迭代所创建的程序模型存储文件中的取出机器指令序列来进行分析,在此过程中,根据机器指令的操作,对机器指令序列本身进行修改,生成新的机器指令序列,即生成新的程序模型,分析结束后,将该程序模型写入到创建的程序模型存储文件中;
写入程序模型存储文件的信息包括:指令在文件的偏移地址,指令在内存中的映射地址,指令内容以及相应的反汇编代码;
在分析机器指令的过程中,若遇到跳转指令,根据具体处理器体系结构中的指令语义,演算跳转指令与调用返回指令中的目标指令地址,若能获取跳转目标地址,如果该地址处的指令尚未分析,则跳转至相应地址的指令进行后续分析;如果不能获取跳转目标地址或者目标地址处指令已经经过分析,则直接将指令的相关信息记录到程序模型存储文件中,并继续向后分析指令,直至分析到最后一条指令。
所述比较单元,如果存在之前的程序模型存储文件,则将新生成写入的程序模型存储文件与前一轮所创建的程序模型存储文件进行比较,若两个程序模型没有差异,则表示程序模型已经稳定,则由所述反汇编单元结合最后一个程序模型存储文件中存储的信息,即迭代修改后稳定的机器指令序列,使用对应处理器体系结构的反汇编引擎,生成反汇编代码,写入到最后的可再汇编代码文件中;否则,重新对进行分析和修改操作,记录程序模型到新的程序模型存储文件之中。
本发明的基于程序演进模型的目标代码逆向工程系统的实现过程,可以看作是从初始态空程序P0出发,通过搜索代码、求解间接跳转与检测自修改等一系列操作,逐步构造程序演进序列P0…Pi…Pj…Pn的过程(0<=i<=j<=n)。实际上,程序Pn的演进构造是否可以达成,依赖于Pn-1的程序形态与演进前的数据状态。而这里,Pi与Pj或Pj与Pn将有可能是相同的,即程序通过一定的演进,存在回溯到演进过程的某一历史节点(但不保证数据状态也可回溯)的可能性。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (8)
1.一种基于程序演进模型的目标代码逆向工程系统,所述系统具体包括:显示单元、输出提示单元、格式识别打印单元、采样单元、体系结构确定单元、模型存储创建单元、指令分析单元、比较单元以及反汇编单元,所述显示单元分别连接输出提示单元、格式识别打印单元,所述格式识别打印单元还分别连接输出提示单元和采样单元,所述输出提示单元还连接采样单元,所述采样单元依次连接体系结构确定单元、模型存储创建单元、指令分析单元、比较单元以及反汇编单元。
2.一种如权利要求1所述的系统,所述显示单元启动人机交互接口,向人机交互接口分别输入待逆向工程的目标代码文件、程序模型存储文件以及待生成的可再汇编代码文件的存储路径。
3.一种如权利要求2所述的系统,所述格式识别打印单元读取目标代码文件首部,识别目标代码文件的封装格式,并将其封装格式打印到输出提示单元。
4.一种如权利要求3所述的系统,所述采样单元根据输出提示单元接收的不同的封装格式,在不同的位置取出目标代码文件的起始地址,以及代码段的长度,定位代码段的地址范围。
5.一种如权利要求4所述的系统,所述体系结构确定单元识别目标代码文件首部所记录的处理器体系结构信息,根据不同的处理器体系结构,采用不同的反汇编处理引擎进行后续的指令分析与反汇编代码生成操作。
6.一种如权利要求5所述的系统,所述模型存储创建单元在指定的程序模型存储文件存储路径的目录下创建一个空的程序模型存储文件。
7.一种如权利要求6所述的系统,所述指令分析单元结合之前创建的程序模型存储文件开始逐条分析代码段起始地址的机器指令,并将指令相关的信息写入到新创建的程序模型存储文件中。
8.一种如权利要求7所述的系统,所述比较单元,如果存在之前的程序模型存储文件,则将新生成写入的程序模型存储文件与前一轮所创建的程序模型存储文件进行比较,若两个程序模型没有差异,则表示程序模型已经稳定,则由所述反汇编单元结合最后一个程序模型存储文件中存储的信息,使用对应处理器体系结构的反汇编引擎,生成反汇编代码,写入到最后的可再汇编代码文件中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610456941.5A CN106055343B (zh) | 2016-06-22 | 2016-06-22 | 一种基于程序演进模型的目标代码逆向工程系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610456941.5A CN106055343B (zh) | 2016-06-22 | 2016-06-22 | 一种基于程序演进模型的目标代码逆向工程系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106055343A true CN106055343A (zh) | 2016-10-26 |
CN106055343B CN106055343B (zh) | 2019-01-18 |
Family
ID=57167876
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610456941.5A Active CN106055343B (zh) | 2016-06-22 | 2016-06-22 | 一种基于程序演进模型的目标代码逆向工程系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106055343B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598839A (zh) * | 2016-10-31 | 2017-04-26 | 华东师范大学 | 一种面向目标代码的程序静态分析方法 |
CN106648818A (zh) * | 2016-12-16 | 2017-05-10 | 华东师范大学 | 一种目标代码控制流图生成系统 |
CN106649095A (zh) * | 2016-10-31 | 2017-05-10 | 华东师范大学 | 一种面向目标代码的程序静态分析系统 |
CN109992467A (zh) * | 2017-12-29 | 2019-07-09 | 天津亚克互动科技有限公司 | 交互式应用产生的数据的解析方法和系统 |
CN110489130A (zh) * | 2018-05-31 | 2019-11-22 | 北京数聚鑫云信息技术有限公司 | 一种基于客户端的业务数据提取方法及装置 |
Citations (5)
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 |
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 | 唐道成 | 单片机从可执行文件找回汇编文件的实现方法 |
-
2016
- 2016-06-22 CN CN201610456941.5A patent/CN106055343B/zh active Active
Patent Citations (5)
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 |
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 |
---|
J KINDER ETC.: "Jakstab: A static analysis platform for binaries", 《INTERNATIONAL CONFERENCE ON COMPUTER AIDED VERIFICATION》 * |
奚琪 等: "《一种动静结合的代码反汇编框架》", 《一种动静结合的代码反汇编框架》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598839A (zh) * | 2016-10-31 | 2017-04-26 | 华东师范大学 | 一种面向目标代码的程序静态分析方法 |
CN106649095A (zh) * | 2016-10-31 | 2017-05-10 | 华东师范大学 | 一种面向目标代码的程序静态分析系统 |
CN106648818A (zh) * | 2016-12-16 | 2017-05-10 | 华东师范大学 | 一种目标代码控制流图生成系统 |
CN106648818B (zh) * | 2016-12-16 | 2019-06-14 | 华东师范大学 | 一种目标代码控制流图生成系统 |
CN109992467A (zh) * | 2017-12-29 | 2019-07-09 | 天津亚克互动科技有限公司 | 交互式应用产生的数据的解析方法和系统 |
CN109992467B (zh) * | 2017-12-29 | 2023-04-18 | 天津亚克互动科技有限公司 | 交互式应用产生的数据的解析方法和系统 |
CN110489130A (zh) * | 2018-05-31 | 2019-11-22 | 北京数聚鑫云信息技术有限公司 | 一种基于客户端的业务数据提取方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106055343B (zh) | 2019-01-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
David et al. | Neural reverse engineering of stripped binaries using augmented control flow graphs | |
Lacomis et al. | Dire: A neural approach to decompiled identifier naming | |
US11567759B1 (en) | Generating source code from binary files | |
CN106055343A (zh) | 一种基于程序演进模型的目标代码逆向工程系统 | |
CN106462434B (zh) | 整个程序代码的增量式编译 | |
CN104346274B (zh) | 程序调试器及一种程序的调试方法 | |
JP4766540B2 (ja) | プログラムコード変換の検証を実行するための方法および装置 | |
CN110287702B (zh) | 一种二进制漏洞克隆检测方法及装置 | |
Hasabnis et al. | Lifting assembly to intermediate representation: A novel approach leveraging compilers | |
CN106471476A (zh) | 用于对经优化代码的编辑并继续以及增强的经优化调试的技术 | |
CN108139891A (zh) | 针对外部文件的缺失包括建议 | |
KR20140102274A (ko) | 상태 기계 격자에서의 불리언 로직 | |
CN108027748B (zh) | 指令集模拟器及其模拟器生成方法 | |
CN107678748A (zh) | 一种源代码文件编译方法及装置 | |
CN103699820B (zh) | 用于相对跳转指令的混淆方法 | |
CN102200911A (zh) | 变量闭包 | |
CN107077346A (zh) | 具有多上下文智能辅助的代码开发工具 | |
CN102867144A (zh) | 一种用于检测和清除计算机病毒的方法和装置 | |
CN109145534A (zh) | 针对软件虚拟机保护的反混淆系统及方法 | |
US20060293875A1 (en) | Translating expressions in a computing environment | |
CN106126225B (zh) | 一种基于程序演进模型的目标代码逆向工程方法 | |
KR102546424B1 (ko) | 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법 | |
Wang et al. | OFFDTAN: a new approach of offline dynamic taint analysis for binaries | |
Murawski et al. | A contextual equivalence checker for IMJ | |
Heitman et al. | BARF: a multiplatform open source binary analysis and reverse engineering framework |
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 |