反汇编与软件逆向课件.ppt
《反汇编与软件逆向课件.ppt》由会员分享,可在线阅读,更多相关《反汇编与软件逆向课件.ppt(67页珍藏版)》请在三一办公上搜索。
1、反汇编与逆向技术,1,t课件,课程目录,一、软件逆向概述,二、基础知识,三、常用工具,四、逆向破解实战,五、总结,2,t课件,1.1软件逆向的概念,软件逆向概述,可执行文件,突破软件限制,汇编层分析算法,软件源代码,3,t课件,软件逆向概述,1.2软件逆向的一般步骤,1、研究保护方法,去除保护功能,2、反汇编目标软件,定位功能函数,3、分析汇编代码,4、修改汇编代码或还原高级源代码,4,t课件,软件逆向概述,1.3软件逆向的应用,软件破解,软件汇编级BUG调试,病毒分析,漏洞分析,5,t课件,基础知识,2.2、汇编语言基础知识,2.3、可执行文件结构,2.5、软件保护(选),2.1、数据结构基
2、础知识,2.4、Windows启动与程序装载,6,t课件,数据结构基础,2.1.1栈的结构,7,t课件,数据结构基础,2.1.2栈的工作原理,8,t课件,汇编基础,2.2.1汇编语言概述 汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。,简单概括:,1、汇编语言是机器
3、语言的符号表示,与硬件相关,2、个人电脑运行的是基于X86处理器架构的汇编语言,3、最终程序的运行都是一条条指令的运行,9,t课件,汇编基础,2.2.2汇编语言与其它语言的转换,32位,10,t课件,汇编基础,2.2.3常见汇编指令,Add eax,ecx eax寄存器的值加上ecx寄存器的值,结果保存在eax寄存器,Sub eax,ecx eax寄存器的值减去ecx寄存器的值,结果保存在eax寄存器,cmp eax,ebx eax寄存器的值与ebx寄存器的值比较,如相等z标志置1否则置0,Jnz eax Jnz不为0时跳转,即z标志为0时跳转到eax表示的地址处继续执行,Call eax 先
4、将下条指令的地址压栈,再跳转到eax表示的地址处执行,mov eax,ecx 将ecx寄存器的值保存在eax寄存器中,Ret 将当前栈顶的值取出,存放到EIP中,并继续执行,正常情况下:call指令一般在子函数调用时使用,ret指令在子函数返回时使用,11,t课件,汇编基础,2.2.4常用寄存器,EAX 累加器,在加法、乘法指令中用到的寄存器,或存放函数返回值,EBX 基地址寄存器,在内存寻址时存放基地址,ECX 计数器,在循环中一般会使用,EDX 存放整数除法产生的余数,ESI/EDI:源/目标索引寄存器,在很多字符串操作中ESI指向源,EDI指向目标,EBP 基址指针,一般用来存放函数的起
5、始地址,ESP 始终指向栈顶,EIP 存放下条指令的地址,12,t课件,汇编基础,2.2.5一个函数的反汇编代码(Debug版),int add(int low,int high) int sum=0; int i=low; for(i;i=high;+i) sum+=i; return sum;,push ebpmov ebp,espsub esp,0 x10mov dword ptr ss:ebp-0 x4,0 x0mov eax,dword ptr ss:ebp+0 x8mov dword ptr ss:ebp-0 x8,eaxjmp short 00401352mov eax,dwor
6、d ptr ss:ebp-0 x8add dword ptr ss:ebp-0 x4,eaxinc dword ptr ss:ebp-0 x8mov eax,dword ptr ss:ebp-0 x8cmp eax,dword ptr ss:ebp+0 xCjle short 00401349mov eax,dword ptr ss:ebp-0 x4leaveretn,13,t课件,可执行文件结构,2.3.1程序的编译与链接,源文件经过编译,生成目标文件(在Windows中是*.obj文件,在Linux中是*.o文件)。目标文件再用链接器链接(和库文件一起组合)生成最终的可执行文件,14,t课
7、件,可执行文件结构,2.3.3 PE文件的结构,系统的主要功能就是执行程序,对可执行文件的学习,可以更加深入的了解系统的运行机制,在Windows系统中,可执行文件的结构如下:,区块间隙,0填充,文件尾,文件头,文件,内存,基地址,15,t课件,可执行文件结构,2.3.2可执行文件分类,在Linux中,系统不是根据文件的扩展名来查找对应的程序,而是根据文件中二进制的标记字段,其可执行文件为ELF文件(Executable and Linkable Format),在Windows系统中,可执行文件如*.exe文件、*.dll文件都统称为PE(Portable Executable)文件,PE文
8、件按照一定的标准进行字段组织,使之能正确的被系统装载和执行,PE文件和ELF文件都是基于Unix的COFF文件演化而来,后面我们主要介绍Windows的PE文件结构,及Windows下的反汇编分析,16,t课件,软件逆向概述,17,t课件,PE文件结构,2.2.3.1 PE文件结构的DOS头部,typedef struct _IMAGE_DOS_HEADER / DOS .EXE header WORD e_magic; / Magic number,标志,为MZ WORD e_cblp; / Bytes on last page of file WORD e_cp; / Pages in f
9、ile WORD e_crlc; / Relocations WORD e_cparhdr; / Size of header in paragraphs WORD e_minalloc; / Minimum extra paragraphs needed WORD e_maxalloc; / Maximum extra paragraphs needed WORD e_ss; / Initial (relative) SS value WORD e_sp; / Initial SP value WORD e_csum; / Checksum WORD e_ip; / Initial IP v
10、alue WORD e_cs; / Initial (relative) CS value WORD e_lfarlc; / File address of relocation table WORD e_ovno; / Overlay number WORD e_res4; / Reserved words WORD e_oemid; / OEM identifier (for e_oeminfo) WORD e_oeminfo; / OEM information; e_oemid specific WORD e_res210; / Reserved words LONG e_lfanew
11、; / PE文件头的文件偏移 IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;,18,t课件,PE文件结构,2.2.3.2 PE文件结构的PE头部,typedef struct _IMAGE_NT_HEADERS DWORD Signature; /PE头标志,为PE IMAGE_FILE_HEADER FileHeader; /文件头 IMAGE_OPTIONAL_HEADER32 OptionalHeader; /可选头 IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;,Signature字段为PE文件的标志,十六进制固定为0 x
12、5035, FileHeader为文件头,存放了一些关于文件的属性,如创建时间。 OptionalHeader名字叫可选头,实质是必须的,并且存放了很多重要的信息,如程序的基地址、程序的执行入口等。,19,t课件,PE文件结构,2.2.3.2 PE文件结构的PE头部,typedef struct _IMAGE_FILE_HEADER WORD Machine; /运行平台 WORD NumberOfSections; /区块数量 DWORD TimeDateStamp; /文件创建时间 DWORD PointerToSymbolTable; /指向符号表 DWORD NumberOfSymbo
13、ls; /符号表中符号个数 WORD SizeOfOptionalHeader; /可选头的大小 WORD Characteristics; /文件属性 IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;,Characteristics属性字段标记了文件的很多信息,如可执行文件是EXE还是DLL、可执行文件是否为系统文件、是否是32位字的机器等,20,t课件,PE文件结构,2.2.3.2 PE文件结构的PE头部,PE可选头部保存了可执行文件中最多的重要信息,最后一个元素数据目录表,保存了程序中导出、导入表、数据、异常处理等的地址,21,t课件,PE文件结构,2.2.
14、3.3 PE文件结构的区块表,typedefstruct_IMAGE_SECTION_HEADER BYTENameIMAGE_SIZEOF_SHORT_NAME; / 节表名称,如“.text”unionDWORDPhysicalAddress;/ 物理地址DWORDVirtualSize; / 虚拟大小 Misc;DWORDVirtualAddress; / 节区的 RVA 地址DWORDSizeOfRawData; / 在文件中对齐后的尺寸DWORDPointerToRawData; / 在文件中的偏移量DWORDPointerToRelocations; / 在OBJ文件中使用,重定位
15、的偏移DWORDPointerToLinenumbers; / 行号表的偏移(供调试使用地)WORDNumberOfRelocations; / 在OBJ文件中使用,重定位项数目WORDNumberOfLinenumbers; / 行号表中行号的数目DWORDCharacteristics; / 节属性如可读,可写,可执行等IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;,22,t课件,PE文件结构,2.2.3.4 PE文件结构的导入表,可执行文件文件使用来自其他动态链接库的代码和数据时,称为导入,当PE文件装入内存时,Windows加载器的工作之一就是
16、定位所有被导入的函数和数据并且让正在被装入的文件可以使用那些地址。这个过程是通过PE文件的导入表(Import Table)来完成的,导入表中存放的是函数名和其驻留的动态链接库信息。,在数据目录表的第二个元素存放的是导入表的地址,每引用一个动态链接库文件,就会有一个对应的导入表结构来描述,导入表结构如下:,typedef struct _IMAGE_IMPORT_DESCRIPTOR union DWORD Characteristics; / 表示结尾时此字段为0 DWORD OriginalFirstThunk; /指向导入名字表INT的RVA数组首地址 ; DWORD TimeDateS
17、tamp; DWORD ForwarderChain; / -1 if no forwarders DWORD Name; /动态链接库名称 DWORD FirstThunk; /指向导入地址表的首地址 IMAGE_IMPORT_DESCRIPTOR;,23,t课件,PE文件结构,2.2.3.4 PE文件结构的导入表,PE文件在装入内存前的导入表结构如下:,INT,IAT,24,t课件,PE文件结构,2.2.3.4 PE文件结构的导入表,PE文件在装入内存后的导入表结构如下:,INT,IAT,25,t课件,PE文件结构,26,t课件,PE文件结构,2.2.3.5 PE文件结构的导出表,当创建一
18、个DLL文件时,实际上创建了一组能让EXE或其它DLL调用的一组函数,此时PE装载器根据DLL文件中输出信息修正被执行文件的IAT。当一个DLL函数能被EXE或另一个DLL文件使用时,它被称为导出了。其中导出信息保存在导出表中,DLL文件通过导出表向系统提供导出函数名、序号和入口地址等信息。,在数据目录表的第一个元素存放的是导出表的地址,其结构如下:,27,t课件,PE文件结构,2.2.3.5 PE文件结构的导出表,28,t课件,PE文件结构,更多PE文件知识推荐,29,t课件,Windows启动与程序装载,2.4.1 Windows启动过程,计算机开机后,先执行的是系统固件,即BIOS或EF
19、I(Windows 8以后的主要引导方式),系统固件在完成了对硬件的基本检测之后,将控制权交给磁盘上的引导程序,磁盘引导程序再执行操作系统的加载程序,在Vista后加载程序是WinLoad.exe,系统加载程序首先会对CPU做必要的初始化工作,如切换到保护模式、启用分页机制等。然后通过启动配置文件(Boot.ini或BCD),得到Windows系统的系统目录并加载系统的内核文件,即NTOSKRNL.EXE。当加载这个文件时,会检查它的导入表所依赖的其它文件,包括内核调试通信的硬件扩展DLL等。,然后加载程序会读取注册表,加载其中定义的启动类型(SERVICE_BOOT_START(0))的驱动
20、程序,如磁盘驱动程序等。,完成了上述操作后,系统加载程序会从内核文件的PE头中找到入口函数,并调用这个函数,函数名为:KiSystemStartup,30,t课件,Windows启动与程序装载,2.4.1 Windows启动过程,KiSystemStartup函数的主要过程为如下三步:,第一,调用HalInitializeProcessor()函数初始化CPU,第二,调用KdInitSystem()初始化内核调试引擎,第三,调用KiInitializeKernel()开始内核初始化,这个函数会调用KiInitSystem()来,初始化系统的全局数据结构。,KdInitSystem()函数会初始
21、化系统的一些与调试相关的全局变量,如:,KdPitchDebugger(bool):当系统启动选项包含 /NODEBUG时设置为真,kdDebuggerEnabled(bool):当系统启动选项包含 /DEBUG或/DEBUGPORT且不包含/NODEBUG时设置为真,KiDeubgRoutine(function):指向内核处理回调函数,调试启动时指向kdpTrap,否则指向kdpStub,31,t课件,软件逆向概述,Windows系统启动过程,32,t课件,Windows启动与程序装载,2.4.2windows程序运行原理,Windows程序运行在保护模式下,也就是每个程序都有自己独立的空
22、间,在Win32系统中,每个程序都有独立的4G空间,即地址0 x00000000到地址0 xFFFFFFFF。,为了高效的调度和执行操作系统的各种服务,Windows会把操作系统和内核数据和代码映射到系统中所有进程的进程空间中,因此4G的空间包括两个部分:用户空间和系统空间(低2G为用户空间,高2G为系统空间),0 x00000000,0 x7FFFFFFF,0 x80000000,0 xFFFFFFFF,用户空间,系统空间,进程1,进程2,进程3,进程4,线程,线程,线程,线程,线程,线程,线程,系统模块,驱动程序,33,t课件,Windows启动与程序装载,2.4.2windows程序运行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 软件 逆向 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-1486080.html