首页 / 专利库 / 企业组织 / 流程图 / 一种PE文件地址定位系统

一种PE文件地址定位系统

阅读:973发布:2020-05-12

专利汇可以提供一种PE文件地址定位系统专利检索,专利查询,专利分析的服务。并且本 发明 提出了一种PE文件的地址 定位 系统,该系统包括系统定位模 块 和自我定位模块;所述系统定位模块用于展示在所述PE文件正常载入后,由 操作系统 完成变量和函数的地址定位的过程,其包括PE文件基本信息模块、重定位表模块、导入表模块和导出表模块;自我定位模块用于实现用户自行完成定位,包括变量定位的模块和函数地址定位模块;所述变量定位模块包括基于CALL指令的定位模块;所述函数地址定位模块包括基于返回地址的定位模块、基于SEH的定位模块和基于PEB的定位模块。采用本发明的系统,可以高效、简单、清晰地实现PE文件的定位。,下面是一种PE文件地址定位系统专利的具体信息内容。

1.一种PE文件的地址定位系统,其特征在于:该系统包括系统定位模和自我定位模块;所述系统定位模块用于展示在所述PE文件正常载入后,由操作系统完成变量和函数的地址定位的过程,其包括PE文件基本信息模块、重定位表模块、导入表模块和导出表模块;
自我定位模块用于实现用户自行完成定位,包括变量定位模块和函数地址定位模块;所述变量定位模块包括基于CALL指令的定位模块;所述函数地址定位模块包括基于返回地址的定位模块、基于SEH的定位模块和基于PEB的定位模块。
2.根据权利要求1所述的PE文件的地址定位系统,其特征在于:所述PE文件基本信息模块具体包括:PE总体结构图、DOS头部信息、PE头部信息、节表信息、节数据信息、RVA和文件偏移地址转换;
其中,可对RVA和文件偏移地址之间转换进行在线测试。
3.根据权利要求1所述的PE文件的地址定位系统,其特征在于:所述重定位表模块被配置为展示在PE文件载入过程中需要修正的变量地址,其包括全局变量、静态变量和部分局部变量;所述重定位表模块首先显示重定位的地址总页数、每页包含的地址项数以及每页的RVA值,并可通过公式计算出重定位表项在PE文件中的具体位置,并得到该位置的反汇编代码。
4.根据权利要求1所述的PE文件的地址定位系统,其特征在于:所述导入表模块被配置为包括:展示导入目录表、导入名字表和导入地址表;其中所述导入目录表显示当前PE文件导入的动态链接库DLL;导入名字表显示从所述动态链接库DLL中导入的函数;所述导入地址表用于显示导入的动态链接库DLL中的函数的具体地址;所述导出表模块被配置为显示导出目录表、导出地址表、导出名字表和导出序号表的信息;所述导出目录表展示导出的动态链接库DLL的名字、导出目录表的起始序号、导出函数的总数;所述导出地址表展示各个函数在PE文件中代码的起始地址;所述导出名字表展示PE文件导出的各个函数的名字,以便其它文件按名字导入;所述导出序号表展示PE文件导出的各个函数的序号。
5.根据权利要求1所述的PE文件的地址定位系统,其特征在于:基于CALL指令的定位模块被配置为首先展示PE文件静态反汇编的代码,然后利用CALL指令求出默认装载地址和实际装载地址之间的差距值,最后利用该差距值对反汇编得到的代码中变量的地址进行修正,即可得到所述变量的地址,并可结合所述PE文件的内存空间地址进行正确性验证。
6.根据权利要求1所述的PE文件的地址定位系统,其特征在于:基于返回地址的定位模块被配置为首先以流程图的形式给出某个应用程序启动的基本流程,并提供用户文件选择接口;用户通过该接口选定某个待测试的PE文件;系统随后启动该文件,并在启动过程中设置相应的断点,用户可观察到此时CPU各个寄存器值、堆栈值、以及指定位置的内存值;用户可借助手动变换的功能完成kernel32.dll基地址的定位。
7.根据权利要求1所述的PE文件的地址定位系统,其特征在于:在所述PE文件被装载到内存中后,在执行第一条指令前,其堆栈栈顶处存放的是kernel32.dll中ExitThread函数的地址;利用ExitThread函数的地址向下搜索即可查询到kernel32.dll的基地址。
8.根据权利要求1所述的PE文件的地址定位系统,其特征在于:所述基于SEH的定位模块被配置为在SEH链表的末端,定位异常处理机制的函数地址,该函数处于kernel32.dll中,找到该函数的地址后即可找到kernel32.dll的基地址。
9.根据权利要求1所述的PE文件的地址定位系统,其特征在于:所述基于PEB的定位模块被配置为在进程环境块PEB中首先查找其中的LDR链表;所述LDR链表包括加载顺序模块链表、内存顺序模块链表、初始化顺序模块链表;在所述顺序模块链表、所述内存顺序模块链表、所述初始化顺序模块链表中查找kernel32.dll所在节点和该节点中的kernel32.dll的基地址。
10.根据权利要求6-9任一项所述的PE文件的地址定位系统,其特征在于:所述函数地址定位模块还包括被配置为根据所述kernel32.dll的基地址定位到kernel32.dll导出表的地址,在导出表中寻找到LoadLibrary和GetProcAddress函数的地址,再利用这两个函数的地址装载目标函数对应的动态链接库DLL,装载完成以后即可得到目标函数的实际内存地址。

说明书全文

一种PE文件地址定位系统

技术领域

[0001] 本发明属于计算机技术领域,涉及一种PE文件地址定位系统。

背景技术

[0002] Windows操作系统上的可执行文件格式经历了COM、MZ、NE、LE、PE等阶段。COM文件主要用于DOS操作系统,不支持重定位、文件最大为64KB。系统运行COM程序时,直接将其拷贝到内存的实地址0x100处进行运行。MZ文件在COM文件前面加上相应的文件头,并在文件头中指出第一条可执行指令的地址、堆栈地址等信息,从而支持了重定位,但是它主要还是用于DOS操作系统。NE格式是为了适应Windows 3.x系统而提出的一种文件格式,它将代码和数据隔离在不同的区域,支持重定位、动态链接库等功能。但是NE文件格式较为复杂,加载到内存以后将生成一个完全不同的结构,因此研究人员后面又提出了LE文件格式。LE格式将代码与数据混杂在一起,能够满足Windows操作系统从实模式切换到保护模式的需要,但是只适合于工作在底层的VxD程序。最后,为了适应Windows 9x、NT等操作系统的需要,研究人员提出了PE文件格式,它包括exe、dll、sys、scr等文件后缀,适用于目前常见的Windows 10、7、XP等操作系统,具有广阔的应用范围。学习PE文件格式不仅有助于理解程序的执行原理,而且能够加深对操作系统内核的理解。因此,在大学《计算机病毒分析与防护》、《软件逆向分析》、《计算机操作系统》等课程的教学中,以及从事软件逆向、计算机病毒分析等科研活动中,PE文件分析是必不可少的一个环节。
[0003] 在PE文件的讲授过程中,地址定位是其中的一个难点,它包括变量地址重定位和函数地址定位两部分,具体指的是可执行程序被装入内存后,如何将变量的地址由静态地址转换为运行内存空间中的实际地址;以及如何确定某个可执行函数在内存空间的地址。该部分涉及到的理论知识较多、概念较为抽象,学生常常难以掌握,因此本发明提供一套教学演示系统,以解决该问题。
[0004] 目前针对PE文件的解析工具可以划分为静态解析工具和动态解析工具两大类。静态解析工具主要包括PEINFO、PEview、W32DASM、WinHex等。这类工具从磁盘上读取PE文件的二进制数据,然后按照PE文件格式对这些二进制数据进行解析,将解析结果以树形结构、扁平分结构等形式展示出来。解析结果中一般包含DOS头部、NT头部(包括指纹字段、文件印象头、可选文件头等3部分)、节表和节数据等信息。这类工具解析的结果较为全面,对于理解PE文件静态格式具有重要帮助,但是由于PE文件变量及函数定位是在程序执行过程中发生的事件,因此这类工具对地址定位的教学辅助存在一定的不足。动态解析工具主要包括X64DBG、OllyDBG、IDA、SoftICE等。这类工具能够将可执行文件载入内存并调试执行,可以将PE文件的代码以汇编语言的形式进行展示,并能够实时显示程序运行过程中计算机的寄存器、堆栈、内存等单元的状态,支持在程序运行过程中对代码和数据进行适当修改,从而有助于使用者分析和理解程序的运行过程。此类工具虽然能够解决静态工具不能够反映文件运行的动态情况的问题,但是由于它们并非专针对变量及函数地址定位教学进行设计,导致在利用这类工具进行演示时,需要手工对变量和函数地址进行计算和定位,存在操作繁琐、展示结果过多过复杂,学生难以直观掌握等问题。

发明内容

[0005] 为解决上述技术问题,本发明提出了一种PE文件的地址定位系统,该系统包括系统定位模块和自我定位模块;所述系统定位模块用于展示在所述PE文件正常载入后,由操作系统完成变量和函数的地址定位的过程,其包括PE文件基本信息模块、重定位表模块、导入表模块和导出表模块;自我定位模块用于实现用户自行完成定位,包括变量定位的模块和函数地址定位模块;所述变量定位模块包括基于CALL指令的定位模块;所述函数地址定位模块包括基于返回地址的定位模块、基于SEH的定位模块和基于PEB的定位模块。
[0006] 优选地,所述PE文件基本信息模块具体包括:PE总体结构图,DOS头部信息,PE头部信息,节表信息,节数据信息,RVA和文件偏移地址转换,其中可对RVA和文件偏移地址之间转换进行在线测试。
[0007] 优选地,所述重定位表模块被配置为展示在PE文件载入过程中需要修正的变量地址,其包括全局变量、静态变量和部分局部变量;所述重定位表的展示模块首先显示重定位的地址总页数、每页包含的地址项数以及每页的RVA值,并可通过公式计算出重定位表项在PE文件中的具体位置,并得到该位置的反汇编代码。
[0008] 优选地,所述导入表模块被配置为包括展示导入目录表、导入名字表、导入地址表;其中所述导入目录表显示当前PE文件导入的动态链接库DLL。导入名字表显示从所述动态链接库DLL中导入的函数;所述导入地址表用于显示导入的动态链接库DLL中的函数的具体地址。所述导出表模块被配置为显示导出目录表、导出地址表、导出名字表和导出序号表的信息;所述导出目录表展示导出的动态链接库DLL的名字、导出目录表的起始序号、导出函数的总数;所述导出地址表展示各个函数在PE文件中代码的起始地址;所述导出名字表展示PE文件导出的各个函数的名字,以便其它文件按名字导入;所述导出序号表展示PE文件导出的各个函数的序号。
[0009] 优选地,基于CALL指令的定位模块被配置为首先展示PE文件静态反汇编的代码,然后利用CALL指令求出默认装载地址和实际装载地址之间的差距值,最后利用该差距值对反汇编得到的代码中变量的地址进行修正,即可得到所述变量的地址,并可结合所述PE文件的内存空间地址进行正确性验证。
[0010] 优选地,基于返回地址的定位模块被配置为首先以流程图的形式给出某个应用程序启动的基本流程,并提供用户文件选择接口;用户通过该接口选定某个待测试的PE文件;系统随后启动该文件,并在启动过程中设置相应的断点,用户可观察到此时CPU各个寄存器值、堆栈值、以及指定位置的内存值;用户可借助手动变换的功能完成kernel32.dll基地址的定位。
[0011] 优选地,在所述PE文件被装载到内存中后,在执行第一条指令前,其堆栈栈顶处存放的是kernel32.dll中ExitThread函数的地址;利用ExitThread函数的地址向下搜索即可查询到kernel32.dll的基地址。
[0012] 优选地,所述基于SEH的定位模块被配置为在SEH链表的末端,定位异常处理机制的函数地址,该函数处于kernel32.dll中。找到该函数的地址后即可找到kernel32.dll的基地址。
[0013] 优选地,所述基于PEB的定位模块被配置为在进程环境块PEB中首先查找其中的LDR链表;所述LDR链表包括加载顺序模块链表、内存顺序模块链表、初始化顺序模块链表;在所述顺序模块链表、所述内存顺序模块链表、所述初始化顺序模块链表中查找kernel32.dll所在节点和该节点中的kernel32.dll的基地址。
[0014] 优选地,所述函数地址定位模块还包括被配置为根据所述kernel32.dll的基地址定位到kernel32.dll导出表的地址,在导出表中寻找到LoadLibrary和GetProcAddress函数的地址,再利用这两个函数的地址装载目标函数对应的动态链接库DLL,装载完成以后即可得到目标函数的实际内存地址。
[0015] 采用本发明的系统,可以高效、简单、清晰地实现PE文件的定位。附图说明
[0016] 图1为本发明提出的PE文件地址定位教学演示系统;
[0017] 图2为本发明提出的PE文件基本信息展示组成;
[0018] 图3为本发明提出的利用返回地址定位其它函数地址的操作流程图;
[0019] 图4为本发明提出的基于SEH的定位模块的组成;
[0020] 图5为本发明提出的基于PEB的定位模块的组成。

具体实施方式

[0021] 以下结合附图对本发明的具体实施方式作出详细说明。
[0022] PE文件地址定位系统的功能结构如图1所示,主要包括系统定位模块和自我定位模块等两大部分。
[0023] 系统定位模块主要展示在PE文件正常载入的情况下,由操作系统完成变量和函数的地址定位过程。主要包括PE基本信息模块、重定位表模块、导入表模块和导出表模块。
[0024] 自我定位模块主要展示PE文件在不借助操作系统的机制下,自行完成变量和函数地址的定位,主要包括基于CALL指令的定位模块、基于返回地址的定位模块、基于SEH的定位模块和基于PEB的定位模块。
[0025] 系统定位模块可展示的主要信息包括:
[0026] (1)PE文件基本信息展示,如图2所示,该部分首先展示PE总体结构图,图中又包含DOS头部、PE头部、节表、节数据等4个组成部分。DOS头部展示DOS标识、PE头部地址等信息。PE头部展示PE标识、目标CPU类型、包含的PE节数量、代码节的大小、代码节起始地址、程序入口点、默认加载地址等信息。节表部分展示PE文件中各节的名字、属性、起始地址、按文件对齐大小等信息。节数据主要展示PE各节包含的具体数据,并展示节数据与节表之间对应关系图。在PE文件基本信息的讲授过程中,相对虚拟地址RVA和文件偏移地址的相互转换是一个难点,因此本部分针对任意PE文件还提供了两个地址之间的转换示例。学生可通过示例掌握转换的基本原理和具体计算过程,并依托教学演示系统的在线测试功能进行地址转换练习。系统将自动对学生给出地址的正确性进行判定。
[0027] (2)重定位表展示模块。该模块主要展示在PE文件载入过程中需要修正的变量地址,这些变量主要包括全局变量、静态变量和部分局部变量。该模块首先展示需要重定位的地址总页数、每页包含的地址项数以及每页的RVA值。然后,为了给学生清晰的展示变量地址重定位的具体作用,该模块通过公式计算出重定位表项在PE文件中的具体位置,并得到该位置的反汇编代码,证明此处进行重定位的必要性。
[0028] (3)导入表展示模块。该模块主要展示导入目录表、导入名字表、导入地址表等信息。导入目录表显示当前PE文件导入了哪些DLL。导入名字表显示从这些DLL中都导入了哪些函数。导入地址表则显示导入DLL函数的具体地址。三个表之间以导入目录表为核心,通过该表的相关表项与其它两表建立连接关系。学生通过图形化连线方式能够在三表之间进行自由浏览。
[0029] (4)导出表展示模块。该模块主要展示导出目录表、导出地址表、导出名字表和导出序号表等信息。导出目录表展示导出DLL的名字、起始序号、导出函数的总数等信息。导出地址表展示各个函数在PE文件中代码的起始地址。导出名字表展示PE文件导出的各个函数的名字,方便其它文件按名导入。导出序号表展示PE文件导出的各个函数的序号。
[0030] 与系统定位模块主要展示操作系统的自动地址变换机制不同,自我定位模块则主要展示PE文件如何在不借助操作系统的帮助下,自行完成变量重定位和函数地址定位。该模块主要展示基于CALL指令的定位方法、基于返回地址的定位方法、基于SEH的定位方法和基于PEB的定位方法。其中基于CALL指令的定位方法主要用于变量地址的重定位,其它方法主要用于函数地址的定位。这些方法是PE补丁、计算机病毒等程序利用到的核心技术之一,对学生理解PE文件格式和计算机病毒运行原理具有较大帮助。自我定位模块展示的信息主要包括:
[0031] (1)基于CALL指令的定位方法。该部分主要展示CALL指令的基本原理、CALL指令调用前的地址及其对应的变量信息、PE文件的默认装载地址、PE文件的实际装载地址等信息。为了清晰的展示变量地址变换过程,该模块首先展示PE文件静态反汇编的代码,然后利用CALL指令求出默认装载地址和实际装载地址之间的差距值,最后利用该差距值对反汇编得到的代码中变量的地址进行修正,并结合PE文件的内存空间进行正确性验证。
[0032] (2)基于返回地址的定位方法。为了让学生充分理解该方法的原理,该部分首先以流程图的形式给出某个应用程序启动的基本流程,并提供用户文件选择接口。学生可通过该接口选定某个待测试的PE文件。系统随后启动该文件,并在启动过程中设置相应的断点,将具体文件的启动过程对应到流程图上。在断点处,学生可观测到此时CPU各个寄存器值、堆栈值、以及指定位置的内存值。系统还提供了手动变换辅助功能,学生可借助该功能完成kernel32.dll基地址的定位,然后借助该基地址定位到kernel32.dll导出表的地址,在导出表中寻找到LoadLibrary和GetProcAddress函数的地址,再利用这两个函数的地址装载目标函数对应的DLL,装载完成以后即可得到目标函数的实际内存地址,其整体操作流程如图3所示。该部分寻找kernel32.dll基地址的核心原理是:PE文件被装载到内存中后,在执行第一条指令前,其堆栈栈顶处存放的是kernel32.dll中ExitThread函数的地址。利用该地址向下搜索即可查询到kernel32.dll的基地址。
[0033] (3)基于SEH的定位方法。SEH是操作系统中一种专门负责异常处理的机制,涉及到的数据结构和概念比较多。讲授新知识可以从学生已掌握的知识为起点,从而让学生达到触类旁通。因此,该部分首先给学生展示C++的异常处理流程图,然后结合该流程图给出操作系统在使用SEH时的异常处理流程以及相应的SEH链、线程环境块等数据结构,并进行实例展示。该部分的组成如图4所示。该方法进行函数定位的核心原理是:在SEH链表的末端,存放的是系统默认的异常处理函数,该函数处于kernel32.dll中。找到该函数的地址后即可找到kernel32.dll的基地址,从而按图3流程进一步找到其它目标函数的地址。
[0034] (4)基于PEB的定位方法。PEB是进程环境块,里面存放了进程对应PE文件的装载地址、LDR等关键信息。如图5所示,该部分首先展示PEB的总体结构图,并在图中给出每个字段的具体含义。其次给出LDR的结构图,并在图中给出加载顺序模块链表、内存顺序模块链表、初始化顺序模块链表等3个重要链表结构以及链表中存放的具体内容。该方法进行函数定位的核心原理是:在这3个链表中,均有某个节点对应kernel32.dll,并且节点中还存在相应的字段对应加载模块的名字和装载地址,依据名字是否相等即可找到kernel32.dll节点,从而得到kernel32.dll的基地址,后续得到其它函数地址的处理流程与图3类似。
[0035] 通过本发明的实施,可以达到如下效果
[0036] (1)展示内容包括变量地址和函数地址定位,全面覆盖了PE文件地址定位的教学内容。此外本发明还兼顾到学生基础不同的实际情况,注重其它相关知识例如程序启动过程、C++异常处理流程等的演示,避免学生在学习本内容时还要四处查找资料、补充基础知识的情况。
[0037] (2)学生的参与度较高,可以选择任意PE文件观察它的地址定位过程;能够设置多个断点,观察此时CPU寄存器和堆栈等内容,理解PE文件执行过程中的细节问题。系统还提供了相应的测试题,学生可以利用它们对自身掌握知识的程度进行检验。
[0038] (3)系统具有丰富的图形化界面,直观展示了PE总体结构图、导入表和导出表的对应关系图、应用程序的启动流程图、SEH异常处理流程图及异常处理链、PEB总体结构图、LDR结构图等关键图表,有助于学生迅速掌握复杂的理论知识。
[0039] (4)系统操作简单,容易上手。与其它静态和动态分析工具相比,学生使用该系统时无需掌握复杂的操作技巧,避免将时间浪费在工具软件的使用上面,而可以集中精关注相关概念和原理的理解,提升了学习效率。
[0040] 对于本领域技术人员而言,显然本发明实施例不限于上述示范性实施例的细节,而且在不背离本发明实施例的精神或基本特征的情况下,能够以其他的具体形式实现本发明实施例。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明实施例的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明实施例内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统、装置或终端权利要求中陈述的多个单元、模块或装置也可以由同一个单元、模块或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
[0041] 最后应说明的是,以上实施方式仅用以说明本发明实施例的技术方案而非限制,尽管参照以上较佳实施方式对本发明实施例进行了详细说明,本领域的普通技术人员应当理解,可以对本发明实施例的技术方案进行修改或等同替换都不应脱离本发明实施例的技术方案的精神和范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈