教你如何寻找程序OEP.docVIP

  • 7
  • 0
  • 约2.62千字
  • 约 4页
  • 2017-08-26 发布于河南
  • 举报
教你如何寻找程序OEP

教你如何寻找程序OEP 教你如何寻找程序的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加壳的Win98记事本来演示。首先用PEid查看加壳前的记事本:     PEid显示Notepad.exe程序是用MicrosoftVisualC++6.0编译的,接下来用UPX来加壳,方法是开个DOS窗口,用命令upxnotepad.exe。如下图所示:    这时再用PEid查看加壳的文件,PEid会给出如下信息:UPX0.89.6-1.02/1.05-1.24-MarkusLaszlo   UPX的壳可以用UPX.exe自身来脱,命令是:upx-d文件名。一些变种的UPX壳用UPX.EXE自身脱不了,这时可以试试UPXShellEx这款工具。   脱壳前建议用PE工具LordPE打开目标文件查看一下区块,以尽可能地多了解一些信息,对脱壳有帮助,如下图:      1.根据跨段指令寻找OEP   推荐用Ollydbg来调试脱壳,比SoftICE和TRW2000方便多了。运行Ollydbg,点击菜单“选项/调试设置”,将第一次暂停设在WinMain函数上。再用Ollydbg打开实例notepad.upx.exe就可中断在外壳的入口点处了:    上图相关代码如下:   0040E8C0 60       pushad  //一开始Ollydbg就会中断这行,这个就是外壳的入口点,注意这个pushad指令   绝大多数加壳程序在被加密的程序中加上一个或多个段,所以依据跨段的转移指令(JMP)就可找到真正的入口点,此时就会有POPAD/POPFD指令出现。UPX用了一次跨段的转移指令(JMP),在跳到OEP处会看到虚拟地址的值有一个突变,此时就能确定OEP了。   UPX壳比较简单,大家不必要跟踪去找这个跨段的转移指令,中断WinMain后,只需要在Ollydbg里往下翻屏,就会发现这个跨段转移指令:       上图相关代码如下:   0040EA0E  61       popad      //注意这里的popad指令,和开始的pushad对应         0040EA0F -E9B826FFFF  jmp  004010CC //这里跳到OEP,将光标移到这,按F4执行到这行   这一句0040EA0F jmp 004010CC就是跳到OEP的指令,执行到这,UPX外壳己将程序解压完毕,并模拟加载器的将原始程序加载到内存,004010CC就是映射到内存目标程序的入口点,此时就可抓取内存映像文件了。   2.根据堆栈平衡原理找OEP   这个堆栈平衡原理其找OEP原理这篇文档描述的比较详细:寻找真正的入口(OEP)--广义ESP定律   操作方法:多数壳在运行到OEP的时候ESP=0012FFC4,这就是说程序的第一句是对0012FFC0进行写入操作,只要在0012FFC0下硬件写入断点(命令行里键入HW12FFC0),我们就能停在OEP的第二句处。   用OllyDBG重新加载实例程序notepad.upx.exe,在命令行下硬件写断点:    按F9执行程序,就会中断在OEP第二行:   此时如果将光标向上移,会发现第一句代码变乱了: 004010C7  000D0A000055 add  [5500000A],cl 004010CD  8BEC     mov  ebp,esp   这是因为Ollydbg将数据当汇编代码来分析了,你可以按Ctrl+ALT+向上光标键将当前显示的代码向上滚动一个字节就可看到正确的汇编代码了: 004010CC  55       push  ebp 004010CD  8BEC

文档评论(0)

1亿VIP精品文档

相关文档