- UID
- 1420
注册时间2005-5-4
阅读权限30
最后登录1970-1-1
龙战于野
该用户从未签到
|
郁闷!今天遇到一个ASProtect v1.23RC1的壳,能找到OEP,但不能修复IAT!
今天遇到一个ASProtect v1.23RC1的壳,由于没有脱壳这样的壳,就找了一篇相关的文章。
看雪的文章(关于asprotect 1.23rc1)
http://www.pediy.com/bbshtml/BBS6/pediy6259.htm
遇到的软件是一个外挂,脱壳过程如下:
【软件名称】:梦幻宝宝 V 6.1.4
【软件功能】:梦幻西游外挂
【下载地址】:http://www.5uwg.com/soft/4060.htm
【作者声明】:初学Crack,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】:WinXP、Flydbg1.10、PEiD、LordPE、Import REConstructor v1.6 FINAL
1.查壳,从看雪下载了FI3.0r和Peid0.93,解压后查看壳的类型,都显示为ASProtect v1.23RC1。
2.下载FLYOD,运行,载入隐藏插件运行,载入外挂。
3.按照看雪的文章,一步一步的进行下去,到了第25个shift+f9的时候,看堆栈,设断点,再按F8,按了N个F8,花了3个多小时,没有结果。(可能是我的汇编太差了)
4.想了想,看看有没有简单一点的办法,最后想到看看用ESP定律能不能搞定它。试了几次后,发现可以,而且速度很快,没要多少步骤。
5.现在重新来过,运行OD,运行隐藏插件,载入此软件。
按一下F8,现在的ESP的值是12ffc0。在命令行内输入hw 12ffc0,回车。
在命令行中输入 HW 12ffc0 回车
00401000 > 68 01105300 push my.00531001
00401005 E8 01000000 call my.0040100B
0040100A C3 retn
0040100B C3 retn
F9 中断
00531002 E8 03000000 call my.0053100A
00531007 - E9 EB045D45 jmp 45B014F7
0053100C 55 push ebp
0053100D C3 retn
F9 内存异常
012A335C 3100 xor dword ptr ds:[eax],eax
012A335E EB 01 jmp short 012A3361
012A3360 68 648F0500 push 58F64
012A3365 0000 add byte ptr ds:[eax],al
012A3367 00EB add bl,ch
25个 SHIFT+F9 内存异常
012A2CD1 3100 xor dword ptr ds:[eax],eax
012A2CD3 64:8F05 0000000>pop dword ptr fs:[0]
012A2CDA 58 pop eax
012A2CDB 833D 7C6D2A01 0>cmp dword ptr ds:[12A6D7C],0
012A2CE2 74 14 je short 012A2CF8
012A2CE4 6A 0C push 0C
CRTL+g 输入右边堆栈区的异常句柄 (SE 句柄)(也就是ESP-1的单元内的值)(012A2CB4),回车 代码跳到刚才输入的值的地方。
0012FF64 0012FFE0 指针到下一个 SEH 记录
0012FF68 012A2CB4 SE 句柄
0012FF6C 01290000
0012FF70 01270000
在这儿下断点,再向下遇到一个RETN,再向下又看到一个RETn,在此处下断。
012A2CB4 8B4424 0C mov eax,dword ptr ss:[esp+C] 这儿下个断点
012A2CB8 8380 B8000000 0>add dword ptr ds:[eax+B8],2
012A2CBF C740 18 0000000>mov dword ptr ds:[eax+18],0
012A2CC6 31C0 xor eax,eax
012A2CC8 C3 retn 一个RETN
012A2CC9 31C0 xor eax,eax
012A2CCB 64:FF30 push dword ptr fs:[eax]
012A2CCE 64:8920 mov dword ptr fs:[eax],esp
012A2CD1 3100 xor dword ptr ds:[eax],eax
012A2CD3 64:8F05 0000000>pop dword ptr fs:[0]
012A2CDA 58 pop eax
012A2CDB 833D 7C6D2A01 0>cmp dword ptr ds:[12A6D7C],0
012A2CE2 74 14 je short 012A2CF8
012A2CE4 6A 0C push 0C
012A2CE6 B9 7C6D2A01 mov ecx,12A6D7C
012A2CEB 8D45 F8 lea eax,dword ptr ss:[ebp-8]
012A2CEE BA 04000000 mov edx,4
012A2CF3 E8 54E1FFFF call 012A0E4C
012A2CF8 FF75 FC push dword ptr ss:[ebp-4]
012A2CFB FF75 F8 push dword ptr ss:[ebp-8]
012A2CFE 8B45 F4 mov eax,dword ptr ss:[ebp-C]
012A2D01 8338 00 cmp dword ptr ds:[eax],0
012A2D04 74 02 je short 012A2D08
012A2D06 FF30 push dword ptr ds:[eax]
012A2D08 FF75 F0 push dword ptr ss:[ebp-10]
012A2D0B FF75 EC push dword ptr ss:[ebp-14]
012A2D0E C3 retn 这儿下个断点
按2下SHIFT+F9 停在RETN (012A2D0E C3 retn)
按一下F8
012B4104 /E9 65080000 jmp 012B496E
012B4109 |888A 1F3E7DFB mov byte ptr ds:[edx+FB7D3E1>
012B410F |7D 29 jge short 012B413A
012B4111 |34 B9 xor al,0B9
012B4113 ^|73 E7 jnb short 012B40FC
012B4115 |CF iretd
012B4116 |C6 ??? ; 未知命令
012B4117 |BD B959E5CB mov ebp,CBE559B9
按一下CTRL+F8 程序会一个地方后不断循环,按一下F8,使程序暂停,按F8直到这段循环的最下面的一行,用鼠标点一下下一行程序,按F4跳出循环。
012B49BF 47 inc edi
012B49C0 8BEF mov ebp,edi
012B49C2 D1C5 rol ebp,1
012B49C4 81F5 A38FD7AC xor ebp,ACD78FA3
012B49CA 3BEE cmp ebp,esi
012B49CC ^ 0F85 EDFFFFFF jnz 012B49BF 上面是循环体
012B49D2 66:8BC6 mov ax,si 用鼠标点一下这一行程序,按F4跳出循环。
F9 这时前面设的硬件断点起作用了,现在程序停在了OEP附近。
012B496B 61 popad
012B496C FFE0 jmp eax
按两下F8进入OEP,这时就可以进行DUMP了。
0043B136 55 push ebp 标准MFC++ OEP
0043B137 8BEC mov ebp,esp
0043B139 6A FF push -1
0043B13B 68 38664C00 push my.004C6638
0043B140 68 80FD4300 push my.0043FD80
0043B145 64:A1 00000000 mov eax,dword ptr fs:[0]
0043B14B 50 push eax
0043B14C 64:8925 0000000>mov dword ptr fs:[0],esp
0043B153 83EC 58 sub esp,58
到这后,下面修复IAT我没有成功,请大吓帮忙完成。
[ Last edited by brightsm on 2005-8-8 at 02:30 PM ] |
|