脱壳基础知识入门之寻找OEP.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
脱壳基础知识入门之寻找OEP.doc

  脱壳基础知识入门之寻找OEP~教育资源库   一般的压缩壳,如Aspack等都有专用的脱壳机 。而加密壳(如ASProtect,Armadillo)一般很少有脱壳机,必须手工脱壳。手工脱壳一般情况是分三步:一是查找程序的真正入口点(OEP);二是抓取内存映像文件;三是输入表重建。(当然现在的加密壳复杂些,要考虑更多的东西)   OEP是OriginalEntryPoint缩写,即程序加壳前的真正的入口点。   外壳初始化的现场环境(各寄存器值)与原程序的现场环境是相同的。加壳程序初始化时保存各寄存器的值,外壳执行完毕,会恢复各寄存器内容。其代码形式一般如下:   PUSHFD    ;将标志寄存器入栈保存    PUSHAD    ;pusheax,ecx,edx,ebx,esp,ebp,esi,edi         ;外壳代码部分    POPAD     ;popedi,esi,ebp,esp,ebx,edx,ecx,eax    POPFD     ;恢复标志寄存器    JMPOEP    ; OEP:     ;解压后的程序原代码  为了讲述方便,本节用UPX加壳的icrosoftVisualC++6.0编译的,接下来用UPX来加壳,方法是开个DOS窗口,用命令upxnotepad.exe。如下图所示:      这时再用PEid查看加壳的文件,PEid会给出如下信息:UPX0.89.6-1.02/1.05-1.24-gt;MarkusLaszlo      UPX的壳可以用UPX.exe自身来脱,命令是:upx-d文件名。一些变种的UPX壳用UPX.EXE自身脱不了,这时可以试试UPXShellEx这款工具。   本节实例下载:notepad.upx.rar   脱壳前建议用PE工具LordPE打开目标文件查看一下区块,以尽可能地多了解一些信息,对脱壳有帮助,如下图:      1.根据跨段指令寻找OEP   推荐用Ollydbg来调试脱壳,比SoftICE和TRain函数上。再用Ollydbg打开实例notepad.upx.exe就可中断在外壳的入口点处了:      上图相关代码如下:   0040E8C0gt; 60       pushad  //一开始Ollydbg就会中断这行,这个就是外壳的入口点,注意这个pushad指令   绝大多数加壳程序在被加密的程序中加上一个或多个段,所以依据跨段的转移指令(JMP)就可找到真正的入口点,此时就会有POPAD/POPFD指令出现。UPX用了一次跨段的转移指令(JMP),在跳到OEP处会看到虚拟地址的值有一个突变,此时就能确定OEP了。   UPX壳比较简单,大家不必要跟踪去找这个跨段的转移指令,中断ain后,只需要在Ollydbg里往下翻屏,就会发现这个跨段转移指令:      上图相关代码如下:   0040EA0E  61       popad      //注意这里的popad指令,和开始的pushad对应         0040EA0F -E9B826FFFF  jmp  004010CC //这里跳到OEP,将光标移到这,按F4执行到这行   这一句0040EA0F jmp 004010CC就是跳到OEP的指令,执行到这,UPX外壳己将程序解压完毕,并模拟Windows加载器的将原始程序加载到内存,004010CC就是映射到内存目标程序的入口点,此时就可抓取内存映像文件了。   2.根据堆栈平衡原理找OEP   这个堆栈平衡原理其找OEP原理这篇文档描述的比较详细:寻找真正的入口(OEP)--广义ESP定律   操作方法:多数壳在运行到OEP的时候ESP=0012FFC4,这就是说程序的第一句是对0012FFC0进行写入操作,只要在0012FFC0下硬件写入断点(命令行里键入HW12FFC0),我们就能停在OEP的第二句处。   用OllyDBG重新加载实例程序notepad.upx.exe,在命令行下硬件写断点:      按F9执行程序,就会中断在OEP第二行:      此时如果将光标向上移,会发现第一句代码变乱了: 004010C7  000D0A0 12下一页 友情提醒:,特别!00055 add  [5500000A],cl 004010CD  8BEC     mov  ebp,esp  这是因为Ollydbg将数据当汇编代码来分析了,你可以按Ctrl+ALT+向上光标键将当前显示的代码向上滚动一个字节就可看到正确的汇编代码了: 004010CC  55       push  ebp 004010CD  8BEC      mov  e

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档