好友
阅读权限25
听众
最后登录1970-1-1
|
明次
发表于 2011-6-22 22:52
本帖最后由 明次 于 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:[esi+FFF92000]
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:[esp-80] ;停在这里
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 00000000 mov eax,dword ptr fs:[0]
00424A75 50 push eax
00424A76 64:8925 0000000>mov dword ptr fs:[0],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:[ebp-18],esp
00424A86 FF15 B8014800 call dword ptr ds:[4801B8] ; kernel32.GetVersion
00424A8C A3 84E34700 mov dword ptr ds:[47E384],eax
00424A91 A1 84E34700 mov eax,dword ptr ds:[47E384]
最后. 开始脱壳,可以用OD插件“脱壳调试进程”进行脱壳 如图
最后别忘了PEID查下是否脱壳成功
CM下载:
1.rar
(93.29 KB, 下载次数: 165)
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|