| 
注册时间2005-5-4
阅读权限30
最后登录1970-1-1UID1420 龙战于野 
 
 该用户从未签到 | 
 
| 郁闷!今天遇到一个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 ]
 | 
 |