好友
阅读权限10
听众
最后登录1970-1-1
|
icer2
发表于 2010-1-16 08:40
本帖最后由 icer2 于 2010-1-17 01:39 编辑
大家好.. 我是新来的icer2 前两天开始学习的破解技术..
写此文仅供自己记录, 各位大牛就直接Pass~~ 吧..
入口很奇怪, 和一般的壳不一样..
00417B23 > E8 00000000 call UnPack__.00417B28
00417B28 60 pushad
00417B29 E8 4F000000 call UnPack__.00417B7D
00417B2E 26:A7 cmps dword ptr es:[esi],dword ptr es:[ed>
00417B30 93 xchg eax,ebx
00417B31 895A 12 mov dword ptr ds:[edx+12],ebx
00417B34 44 inc esp
00417B35 8577 8F test dword ptr ds:[edi-71],esi
00417B38 ED in eax,dx
00417B39 0B30 or esi,dword ptr ds:[eax]
00417B3B 7F 1B jg short UnPack__.00417B58
00417B3D 3864D4 F9 cmp byte ptr ss:[esp+edx*8-7],ah
先试下ESP定律.. ok 到这... 继续走.. F7进 Call
004176FC 894424 24 mov dword ptr ss:[esp+24],eax
00417700 61 popad
00417701 58 pop eax
00417702 58 pop eax
00417703 FFD0 call eax
00417705 E8 A9C40000 call UnPack__.00423BB3
0041770A CC int3
0041770B CC int3
0041770C CC int3
0041770D CC int3
0041770E CC int3
0041770F CC int3
00417710 0000 add byte ptr ds:[eax],al
00417712 0000 add byte ptr ds:[eax],al
00417714 90 nop
00417715 1E push ds
OK 到了我们经典的OEP...
004010CC 55 push ebp
004010CD 8BEC mov ebp,esp
004010CF 83EC 44 sub esp,44
004010D2 56 push esi
004010D3 FF15 00514100 call dword ptr ds:[415100] ; kernel32.GetCommandLineA
004010D9 8BF0 mov esi,eax
004010DB 8A00 mov al,byte ptr ds:[eax]
004010DD 3C 22 cmp al,22
004010DF 75 13 jnz short UnPack__.004010F4
004010E1 46 inc esi
004010E2 8A06 mov al,byte ptr ds:[esi]
004010E4 84C0 test al,al
004010E6 74 04 je short UnPack__.004010EC
004010E8 3C 22 cmp al,22
004010EA ^ 75 F5 jnz short UnPack__.004010E1
004010EC 803E 22 cmp byte ptr ds:[esi],22
004010EF 75 0D jnz short UnPack__.004010FE
004010F1 46 inc esi
004010F2 EB 0A jmp short UnPack__.004010FE
004010F4 3C 20 cmp al,20
004010F6 7E 06 jle short UnPack__.004010FE
004010F8 46 inc esi
OK 脱壳成功.. 有无效指针 直接减掉. 如果不减掉的话. 关闭程序后会弹出错误提示...
再试下内存断点法...
内存映射,项目 23
地址=00415000
大小=00001000 (4096.)
物主=UnPack__ 00400000
区段=2
类型=Imag 01001002
访问=R
初始访问=RWE
下段.
再下
内存映射,项目 22
地址=00401000
大小=0000D000 (53248.)
物主=UnPack__ 00400000
区段=0
包含=code
类型=Imag 01001004
访问=RW
初始访问=RWE
004010CC 55 push ebp
004010CD 8BEC mov ebp,esp
004010CF 83EC 44 sub esp,44
004010D2 56 push esi
004010D3 FF15 00514100 call dword ptr ds:[415100] ; kernel32.GetCommandLineA
004010D9 8BF0 mov esi,eax
004010DB 8A00 mov al,byte ptr ds:[eax]
004010DD 3C 22 cmp al,22
004010DF 75 13 jnz short UnPack__.004010F4
004010E1 46 inc esi
004010E2 8A06 mov al,byte ptr ds:[esi]
004010E4 84C0 test al,al
004010E6 74 04 je short UnPack__.004010EC
004010E8 3C 22 cmp al,22
004010EA ^ 75 F5 jnz short UnPack__.004010E1
004010EC 803E 22 cmp byte ptr ds:[esi],22
004010EF 75 0D jnz short UnPack__.004010FE
004010F1 46 inc esi
004010F2 EB 0A jmp short UnPack__.004010FE
004010F4 3C 20 cmp al,20
直接到达OEP.... 脱壳。修复 成功。
总结: 借鉴一下小生老师的话 "在你还很懵懂的时候, 可以多下内存断点, 最好全都下一下试试"
Ps: 很简单的脱壳.. 还是得好好学习。 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|