脱壳基础知识入门
2007-01-14 20:15:39 来源:WEB开发网核心提示: 上图相关代码如下:0040EA0E61popad//注意这里的popad指令,和开始的pushad对应0040EA0F-E9B826FFFFjmp004010CC//这里跳到OEP,将光标移到这,脱壳基础知识入门(10),按F4执行到这行这一句0040EA0Fjmp004010CC就是跳到
上图相关代码如下:
0040EA0E 61 popad //注意这里的popad指令,和开始的pushad对应
0040EA0F -E9B826FFFF jmp 004010CC //这里跳到OEP,将光标移到这,按F4执行到这行
这一句0040EA0F jmp 004010CC就是跳到OEP的指令,执行到这,UPX外壳己将程序解压完毕,并模拟Windows加载器的将原始程序加载到内存,004010CC就是映射到内存目标程序的入口点,此时就可抓取内存映像文件了。
2.根据堆栈平衡原理找OEP
这个堆栈平衡原理其找OEP原理这篇文档描述的比较详细:寻找真正的入口(OEP)--广义ESP定律作者:Lenus
操作方法:多数壳在运行到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 mov ebp,esp //中断在这行
004010CF 83EC44 sub esp,44
004010D2 56 push esi
004010D3 FF15E4634000 call [4063E4] ;kernel32.GetCommandLineA
中断后,别忘点击菜单“调试/硬件断点/”打开硬件断点面板,将刚才的硬件断点删除。
更多精彩
赞助商链接