ESP定律脱UPX壳笔记
本帖最后由 明次 于 2011-6-22 22:54 编辑1.随便找个加了UPX壳的程序,我就用C++写了个Hello world,然后加上UPX壳
2.用OD导入
00486520 > $60 pushad ;我们停在这里
00486521 .BE 00F04600 mov esi,1.0046F000
00486526 .8DBE 0020F9FF lea edi,dword ptr ds:
0048652C .57 push edi
0048652D .83CD FF or ebp,FFFFFFFF
00486530 .EB 10 jmp short 1.00486542
3.按F8 来到00486521然后看寄存器面板,如图
4.在ESP值中点“数据窗口中跟随”如图
5.看数据面板,下硬件断点 如图
6.运行程序,然后会跳到这里:
0048668B .8D4424 80 lea eax,dword ptr ss: ;停在这里
0048668F >6A 00 push 0
00486691 .39C4 cmp esp,eax
00486693 .^ 75 FA jnz short 1.0048668F ;往上跳,别实现
00486695 .83EC 80 sub esp,-80 ;F4
00486698 .- E9 C3E3F9FF jmp 1.00424A60 ;重点
此时离OEP(程序真正的入口点)也不远了,不过有个地方要注意一下
在00486693这个跳是往上跳的,不要实现。所以我们直接在下一行(也就是00486695)按F4
然后可以一直走了,一直走到00486698,注意这个跳,从00486698跳到00424A60对于这个Hello world程序来说,这是一个很大的跳转,经验告诉我们,这是跳到OEP的所以继续走我们就来到OEP了
OEP:
00424A60 55 push ebp
00424A61 8BEC mov ebp,esp
00424A63 6A FF push -1
00424A65 68 A8104700 push 1.004710A8
00424A6A 68 2CF54200 push 1.0042F52C
00424A6F 64:A1 00000000mov eax,dword ptr fs:
00424A75 50 push eax
00424A76 64:8925 0000000>mov dword ptr fs:,esp
00424A7D 83C4 F0 add esp,-10
00424A80 53 push ebx
00424A81 56 push esi
00424A82 57 push edi
00424A83 8965 E8 mov dword ptr ss:,esp
00424A86 FF15 B8014800 call dword ptr ds: ; kernel32.GetVersion
00424A8C A3 84E34700 mov dword ptr ds:,eax
00424A91 A1 84E34700 mov eax,dword ptr ds:
最后. 开始脱壳,可以用OD插件“脱壳调试进程”进行脱壳如图
最后别忘了PEID查下是否脱壳成功
CM下载:
不错啊,太牛逼了次哥 还可以~~呵呵~~谢谢分享学习 试试ESP插件 两次内存断点,直接定位到OEP! 回复 小妒 的帖子
{:1_920:} 谢谢驴师傅 我记得有位大牛说过:ESP简单过程:F8 1次 → 下hr esp 断点 → F9 运行 → F8 2次 → 到达OEP sonjab 发表于 2011-6-25 10:11 static/image/common/back.gif
我记得有位大牛说过:ESP简单过程:F8 1次 → 下hr esp 断点 → F9 运行 → F8 2次 → 到达OEP
这个ESp都是这样?学习了!!! 回复 lonie 的帖子
ESP多很简单的