一种基于程序演进模型的目标代码逆向工程方法技术

技术编号:14014744 阅读:54 留言:0更新日期:2016-11-17 20:32
本发明专利技术公开了一种基于程序演进模型的目标代码逆向工程方法,可以自动地识别目标代码文件封装格式,区分目标代码文件代码段,并使用反汇编技术进行分析并生成相应的程序模型,又在前一个程序模型基础上,再次进行分析并生成新的程序模型,不断重复以上过程,逐步精化,最终生成.ASM可再汇编文件。采用本发明专利技术,可以对自混淆的、含有指令重叠的目标代码文件进行准确而有效的逆向工程,可以应用于含有自混淆指令,指令重叠等加壳恶意软件的分析与识别以及防反汇编闭源软件的分析。

【技术实现步骤摘要】

本专利技术涉及数据处理领域,尤其涉及一种基于程序演进模型的目标代码逆向工程方法
技术介绍
随着软件复杂度的提高,逆向工程越来越引起人们的重视,成为软件工程领域的一个新兴分支。使用目标代码逆向工程技术是为了在没有源代码的情况下,直接从已编译的或被特殊处理的最终目标程序出发,应用多种技术手段,复原程序行为语义信息,从而帮助了解程序的原理。分析恶意软件、闭源软件的漏洞、闭源软件的互操作性、目标程序与源程序的一致性、验证编译器的性能和准确性以及在调试过程中显示汇编指令都是目标代码逆向工程技术的关键应用场景。对目标代码进行逆向工程,根据其逆向工程的结果分析病毒运行机制、评估软件质量与推断程序行为目的的需求越来越多。传统的目标代码逆向工程技术主要有线性扫描与递归下降两种经典基础方法。线性扫描为反汇编程序假设可执行的二进制代码包含了多个连续的二进制代码流,并且连续地对它进行解码。而被广泛应用的一款著名商业化的反汇编软件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;本文档来自技高网...
一种基于程序演进模型的目标代码逆向工程方法

【技术保护点】
一种基于程序演进模型的目标代码逆向工程方法,包括以下步骤:步骤A:启动人机交互接口,向人机交互接口分别输入待逆向工程的目标代码文件、程序模型存储文件以及待生成的可再汇编代码文件的存储路径;步骤B:读取目标代码文件首部,识别目标代码文件的封装格式,并将其封装格式打印到输出提示单元;步骤C:根据输出提示单元接收的不同的封装格式,在不同的位置取出目标代码文件的起始地址,以及代码段的长度,定位代码段的地址范围;步骤D:识别目标代码文件首部所记录的处理器体系结构信息;步骤E:在指定的程序模型存储文件存储路径的目录下创建一个空的程序模型存储文件;步骤F:结合前一轮创建的程序模型存储文件开始逐条分析代码段起始地址的机器指令,并将指令相关的信息写入到新创建的程序模型存储文件中;步骤G:如果存在前一轮的程序模型存储文件,则将新生成写入的程序模型存储文件与前一轮所创建的程序模型存储文件进行比较,若两个程序模型没有差异,则表示程序模型已经稳定,则跳转至步骤H;否则,回到步骤E,重新进行分析和修改操作,记录程序模型到新的程序模型存储文件之中。步骤H:结合最后一个程序模型存储文件中存储的信息,即迭代修改后稳定的机器指令序列,使用对应处理器体系结构的反汇编引擎,生成反汇编代码,写入到最后的可再汇编代码文件中。...

【技术特征摘要】
1.一种基于程序演进模型的目标代码逆向工程方法,包括以下步骤:步骤A:启动人机交互接口,向人机交互接口分别输入待逆向工程的目标代码文件、程序模型存储文件以及待生成的可再汇编代码文件的存储路径;步骤B:读取目标代码文件首部,识别目标代码文件的封装格式,并将其封装格式打印到输出提示单元;步骤C:根据输出提示单元接收的不同的封装格式,在不同的位置取出目标代码文件的起始地址,以及代码段的长度,定位代码段的地址范围;步骤D:识别目标代码文件首部所记录的处理器体系结构信息;步骤E:在指定的程序模型存储文件存储路径的目录下创建一个空的程序模型存储文件;步骤F:结合前一轮创建的程序模型存储文件开始逐条分析代码段起始地址的机器指令,并将指令相关的信息写入到新创建的程序模型存储文件中;步骤G:如果存在前一轮的程序模型存储文件,则将新生成写入的程序模型存储文件与前一轮所创建的程序模型存储文件进行比较,若两个程序模型没有差异,则表示程序模型已经稳定,则跳转至步骤H;否则,回到步骤E,重新进行分析和修改操作,记录程序模型到新的程序模型存储文件之中。步骤H:结合最后一个程序模型存储文件中存储的信息,即迭代修改后稳定的机器指令序列,使用对应处理器体系结构的反汇编引擎,生成反汇编代码,写入到最后的可再汇编代码文件中。2.一种如权利要求1所述的方法,所述步骤B的读取目标代码文件首部,识别目标代码文件的封装格式,并将其封装格式打印到输...

【专利技术属性】
技术研发人员:史建琦熊家文黄滟鸿何积丰李昂方徽星
申请(专利权)人:华东师范大学
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1