(2.3)--04:第二章PE格式及逆向工具.pdf

上传人:刘静 文档编号:57971230 上传时间:2022-11-06 格式:PDF 页数:51 大小:5.27MB
返回 下载 相关 举报
(2.3)--04:第二章PE格式及逆向工具.pdf_第1页
第1页 / 共51页
(2.3)--04:第二章PE格式及逆向工具.pdf_第2页
第2页 / 共51页
点击查看更多>>
资源描述

《(2.3)--04:第二章PE格式及逆向工具.pdf》由会员分享,可在线阅读,更多相关《(2.3)--04:第二章PE格式及逆向工具.pdf(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第二章基础知识知识点一:PE文件格式知识点二:虚拟内存知识点三:调试工具-OllyDBG和IDA知识点四:OllyDBG示例知识点一:PE文件格式PE文件格式可执行文件之所以可以被操作系统加载且运行,是因为它们遵循相同的规范。PE(Portable Executable)是Win32平台下可执行文件遵守的数据格式。常见的可执行文件(如“*.exe”文件和“*.dll”文件)都是典型的PE文件。一个可执行文件不光包含了二进制机器码,还会自带许多其他信息,如字符串、菜单、图标、位图、字体等。PE文件格式规定了所有的这些信息在可执行文件中如何组织。在程序被执行时,操作系统会按照PE文件格式的约定去相

2、应的地方准确地定位各种类型的资源,并分别装入内存的不同区域。PE文件格式把可执行文件分成若干个数据节(section),不同的资源被存放在不同的节中。一个典型的PE文件中包含的节如下:rsrctext idatadataPE文件由编译器产生,存放着二进制的机器代码,也是我们反汇编和调试的对象。初始化的数据块,如宏定义、全局变量、静态变量等。可执行文件所使用的动态链接库等外来函数与文件的信息。存放程序的资源,如图标、菜单等。除此以外,还可能出现的节包括“.reloc”、“.edata”、“.tls”、“.rdata”等。节名也可以自己定义,如果可执行文件经过了“加壳”处理,PE的节信息就会变得非

3、常“古怪”。在Crack和反病毒分析中需要经常处理这类古怪的PE文件。如果是正常编译出的标准PE文件,其节信息往往是大致相同的。但这些section的名字只是为了方便人的记忆与使用,使用Microsoft Visual C+中的编译指示符:#pragma data_seg()可以把代码中的任意部分编译到PE的任意节中全称应该是可执行程序资源压缩,是保护文件的常用手段。加壳过的程序可以直接运行,但是不能查看源代码。要经过脱壳才可以查看源代码。加壳加上外壳后,原始程序代码在磁盘文件中一般是以加密后的形式存在的,只在执行时在内存中还原,这样就可以比较有效地防止对程序文件的非法修改和静态反编译。加壳其

4、实是利用特殊的算法,对EXE、DLL文件里的代码、资源进行压缩、加密。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程附加在原程序上通过Windows加载器载入内存后,先于原始程序执行,得到控制权,执行过程中对原始程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。压缩壳的特点是减小软件体积大小,加密保护不是重点。加密壳种类比较多,不同的壳侧重点不同,一些壳单纯保护程序,另一些壳提供额外的功能,如提供注册机制、使用次数、时间限制等。加壳工具通常分为压缩壳和加密壳两类。存放着二进制的机器代码的PE文件的节是codetextdatarcscABCD

5、提交单选题1分知识点二:虚拟内存虚拟内存Windows的内存可以被分为两个层面:物理内存和虚拟内存。其中,物理内存非常复杂,需要进入Windows内核级别ring0才能看到。通常,在用户模式下,用调试器看到的内存地址都是虚拟内存。用户编制程序时使用的地址称为虚拟地址或逻辑地址,其对应的存储空间称为虚拟内存或逻辑地址空间;而计算机物理内存的访问地址则称为实地址或物理地址,其对应的存储空间称为物理存储空间或主存空间。程序进行虚地址到实地址转换的过程称为程序的再定位。(1)静态反汇编工具看到的PE文件中某条指令的位置是相对于磁盘文件而言的,即所谓的文件偏移,我们可能还需要知道这条指令在内存中所处的位

6、置,即虚拟内存地址。(2)反之,在调试时看到的某条指令的地址是虚拟内存地址,我们也经常需要回到PE文件中找到这条指令对应的机器码。PE文件与虚拟内存的映射在调试漏洞时,可能经常需要做这样两种操作:数据在PE文件中的地址叫文件偏移地址,这是文件在磁盘上存放时相对于文件开头的偏移。重要概念:相对虚拟地址(Relative Virtual Address,RVA)虚拟内存地址(Virtual Address,VA)装载基址(Image Base)文件偏移地址(File Offset)PE装入内存时的基地址。默认情况下,EXE文件在内存中的基地址是0 x00400000,DLL文件是0 x100000

7、00。这些位置可以通过修改编译选项更改。PE文件中的指令被装入内存后的地址。相对虚拟地址是内存地址相对于映射基址的偏移量。我们需要弄清楚PE文件地址和虚拟内存地址之间的映射关系,首先,我们先看几个重要的概念:虚拟内存地址、映射基址、相对虚拟内存地址三者之间有如下关系:VA=Image Base+RVA0 x1000字节0 x1000字节0 x1000字节装载基址装载基址(Image Base)0 x00400000内存其他.data节.rdata节.text节文件头、节表等0 x200字节0 x200字节0 x200字节PE文件起始文件起始0字节字节.data节.rdata节.text节文件头

8、、节表等PE文件由于操作系统在进行装载时“基本”上保持PE中的各种数据结构,所以文件偏移地址和RVA有很大的一致性。差异PE文件中的数据按照磁盘数据标准存放,以0 x200字节为基本单位进行组织。当一个数据节(section)不足0 x200字节时,不足的地方将被0 x00填充:当一个数据节超过0 x200字节时,下一个0 x200块将分配给这个节使用。因此PE数据节的大小永远是0 x200的整数倍。当代码装入内存后,将按照内存数据标准存放,并以0 x1000字节为基本单位进行组织。类似的,不足将被 补 全,若 超 出 将 分 配 下 一 个0 x1000为其所用。因此,内存中的节总是0 x1

9、000的整数倍。由于文件数据的存放单位与内存数据存放单位不同而造成一些差异:LordPE是一款功能强大的PE文件分析、修改、脱壳软件。LordPE是查看PE格式文件信息的首选工具,并且可以修改相关信息。单击“PE Editor”按钮,选择需要查看的PE文件,如下图所示:查看节信息查看导入导出表地址换算点击Sections按钮,可以查看节信息:在上图中,VOffset是RVA(相对虚拟地址),ROffset是文件偏移。也就是,在系统进程中,代码(.text节)将被加载到0 x400000+0 x11000=0 x411000的虚拟地址中(装载基址+RVA)。而在文件中,可以使用二进制文件打开,看

10、到对应的代码在0 x1000位置处。用户模式下,用调试器看到的内存地址都是真实地址物理地址虚拟内存以上都不对ABCD提交单选题1分知识点三:调试工具-OllyDBG和IDAOllyDbg是一种具有可视化界面的 32 位汇编分析调试器,适合动态调试。OllyDBG版的发布版本是个ZIP 压缩包,解压就可以使用了。OllyDbg的基本调试方法OllyDBG 有两种方式来载入程序进行调试打开(快捷键是F3)来打开可执行文件进行调试;一种是点击菜单文件附加来附加到一个己运行的进程上进行调试,要附加的程序必须己运行。另一种是点击菜单文件比如我们选择一个 test.exe 来调试,通过菜单 文件-打开 来

11、载入这个程序,OllyDBG 中显示的内容将会是这样:F2设置断点。F8单步步过。执行一条指令,遇到 CALL 等子程序不进入其代码。快捷键F7单步步入。功能同单步步过(F8)类似,区别是遇到 CALL 等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上。F4运行到选定位置。F9运行。快捷键CTR+F9执行到返回。此命令在执行到一个 ret(返回指令)指令时暂停,常用于从系统领空返回到我们调试的程序领空。ALT+F9执行到用户代码。可用于从系统领空快速返回到我们调试的程序领空。IDA PRO简称IDA(Interactive Disassembler),是一个世界顶级的交互式反汇编工

12、具,是逆向分析的主流工具。IDA使用File菜单中的Open选项,可以打开一个计划逆向分析的可执行文件,打开的过程是需要耗费一些时间的。IDA会对可执行文件进行分析。一旦打开成功,会提示你是否进入Proximity view。通常都会点Yes,按默认选项进入。如下图的Proximity view:反汇编窗口也叫IDA-View窗口,是操作和分析二进制文件的主要工具。反汇编窗口有三种显示格式视图间可以切换:在上图的Proximity view视图中,点选一个块,比如_main函数块,在其上点右键,可以看到Text view和Graph view等选项。通过右键可以实现不同视图的切换。图形视图:将

13、一个函数分解为许多基本块,类似程序流程图类似,生动的显示该函数由一个块到另一个块的控制流程。如下图所示的_main函数的图形视图:Yes边的箭头默认为绿色,No边的箭头默认为红色。蓝色箭头表示指向下一个即将执行的块文本视图:文本视图则呈现一个程序的完整反汇编代码清单(而在图形模式下一次只能显示一个函数),用户只有通过这个窗口才能查看一个二进制文件的数据部分。如下图所示的文本视图:通常虚拟地址以区域名称区域名称:虚拟地址虚拟地址这种格式显示,如.txt:0040110C0。实线箭头表示非条件跳转,虚线箭头则表示条件跳转。实线箭头表示非条件跳转,虚线箭头则表示条件跳转。如果一个跳转将控制权交给程序

14、中的某个地址,这时会使用粗粗线线,出现这类逆向流程,通常表示程序中存在循环。通常表示程序中存在循环。Names窗口:列举二进制文件的所有全局名称。名称是指对一个程序虚拟地址的符号描述。Names窗口显示的名称采用了颜色和字母编码,其编码方案如下:通过菜单ViewsOpen subviews可以打开更多的窗口。显示从二进制文件中提取出的字符串,以及每个字符串所在的地址。与双击Names窗口中的名称得到的结果类似,双击Strings窗口中的任何字符串,反汇编窗口将跳转到该字符串所在的地址。将Strings窗口与交叉引用结合,可以迅速定义感兴趣的字符串,并追踪到程序中任何引用该字符串的位置。Stri

15、ngs窗口Function name窗口该窗口显示所有的函数。点击函数名称,可以快速导航到反汇编视图中的该函数区域。该窗口中的条目如下:这一行信息指出:用户可以在二进制文件中虚拟地址为00401040的.text部分中找到_main函数,该函数长度为0 x50字节。Function call窗口函数调用(Function call)窗口将显示所有函数的调用关系。如下图:知识点四:OllyDBG示例OllyDBG示例本节将对一个简单的密码验证程序,使用OllyDBG进行破解。具体程序如下#include using namespace std;#define password 12345678b

16、ool verifyPwd(char*pwd)int flag;flag=strcmp(password,pwd);return flag=0;void main()bool bFlag;char pwd1024;printf(please input your password:n);while(1)scanf(%s,pwd);bFlag=verifyPwd(pwd);if(bFlag)printf(passedn);break;elseprintf(wrong password,please input again:n);通过运行程序,观察关键信息,通过对关键信息定位,来得到关键分支语句,

17、通过对该分支语句进行修改,达到破解的目的;一种方式是使用OllyDBG可以通过IDA Pro来观察代码结构,确定函数入口地址,对函数体返回值进行更改。另外一种方式破解对象是该程序生成的Debug模式的exe程序。对得到的exe程序(假定不知道上面的源代码),有多种方式实现破解:运行程序,输入一个密码,发现运行结果如下:在OllyDBG中,为了尽快定位到分支语句处,在反汇编窗口,点右键,选择“查找所有引用的字符串”功能:然后,使用快捷键,Ctrl+F打开搜索窗口,输入wrong,点确定后,将定位出错信息的哪一行代码:双击这一行代码,就会定位反汇编中的相应代码处如果jz条件成立,则跳转到00413

18、64b处,即显示错误密码分支语句中。如果将jz该指令改为jnz,则程序截然相反。输入了错误密码,将进入验证成功的分支中。双击jz密码一行,对其进行修改:破解方式一观察反汇编语言,可知核心分支判断在于:点修改当前汇编代码即可。注意:此时并没有真正修改二进制文件中的有关代码,如果想要修改二进制文件中的代码,需要在反汇编窗口,点右键,选择“编辑-复制当前修改到可执行文件”。保存后的可执行文件,将是破解后的文件。破解方式二更改函数。通过分析汇编语句,可知,验证命令使用的是verifyPwd函数,点右键选择跟随,逐步进入该函数:函数的返回值通过eax寄存器来完成的,核心语句即sete al。对于函数中的

19、代码:被解释为汇编语言:/将strcmp函数调用后的返回值(存在eax中)赋值给变量flag/将eax的值清空/将flag的值与0进行比较,即flag=0;/注意cmp运算的结果只会影响一些状态寄存器的值/sete是根据状态寄存器的值,如果相等,则设置,如果不等,则不设置要想更改该语句,在cmp dword ptr ebp-8,0处开始更改,将其更改为:mov al,01。取消保持代码空间大小,如果新代码超长,将无法完成更改。并将sete al改为NOP。得到结果如下:运行结果校验破解正确性XOR EAX,EAX 汇编语句执行后,EAX寄存器的值为012FFFFFFFFABCD提交单选题1分CMP EAX,EAX;SETE AL执行后AL寄存器的值为012FFFFFFFFABCD提交单选题1分

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁