- UID
 - 43523
 
 注册时间2007-12-28
阅读权限8
最后登录1970-1-1
初入江湖 
  
 
 
 
该用户从未签到  
 | 
 
这是我第一次发贴,请多指教=。= 
最近刚刚接触脱壳,学习了几天,决定拿VS对战平台1.9.10练手,(下载地址http://game1.vsa.com.cn/starcraft/jsp/comm/down.html)按照高手的脱壳思路,先查壳,后OD载入找OEP,然后用LORDPE脱壳,用ImportREC修复,但进行完毕后,VS不运行,具体如下: 
1、PEID查VS壳: 
显示UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo; 
2、OD载入: 
00584040 >  60              PUSHAD 
00584041    BE 00205300     MOV ESI,VSClient.00532000 
00584046    8DBE 00F0ECFF   LEA EDI,DWORD PTR DS:[ESI+FFECF000] 
0058404C    57              PUSH EDI 
0058404D    83CD FF         OR EBP,FFFFFFFF 
00584050    EB 10           JMP SHORT VSClient.00584062 
按F8单步一次,ESP值变红,决定用ESP定律脱壳,ESP值为0012FFA4,数据窗口跟随,然后下硬件断点(字)。 
按F9运行。出现如下代码: 
005841E7    8D4424 80       LEA EAX,DWORD PTR SS:[ESP-80] 
005841EB    6A 00           PUSH 0 
005841ED    39C4            CMP ESP,EAX 
005841EF  ^ 75 FA           JNZ SHORT VSClient.005841EB //此处循环 
005841F1    83EC 80         SUB ESP,-80//F4运行 
005841F4  - E9 F1F9F5FF     JMP VSClient.004E3BEA//到达OEP 
按F8单步会在0058413B和005841EF中间循环,因为每PUSH一下ESP值-4,值到ESP值和EAX相等时他才不再循环,直接在005841F1处按F4断点运行,按F8单步,跳到OEP。 
程序如下: 
004E3BEA    55              PUSH EBP   //各位大大这是OEP吗,我看了好多教程,好象都是到了55 PUSH EBP就是OEP,不是很明白为什么,好象VC++程序都是这样????? 
004E3BEB    8BEC            MOV EBP,ESP 
004E3BED    6A FF           PUSH -1 
004E3BEF    68 208B4F00     PUSH VSClient.004F8B20 
004E3BF4    68 543D4E00     PUSH VSClient.004E3D54                   ; JMP 到 MSVCRT._except_handler3 
004E3BF9    64:A1 00000000  MOV EAX,DWORD PTR FS:[0] 
004E3BFF    50              PUSH EAX 
004E3C00    64:8925 0000000>MOV DWORD PTR FS:[0],ESP 
004E3C07    83EC 68         SUB ESP,68 
004E3C0A    53              PUSH EBX 
004E3C0B    56              PUSH ESI 
004E3C0C    57              PUSH EDI 
004E3C0D    8965 E8         MOV DWORD PTR SS:[EBP-18],ESP 
004E3C10    33DB            XOR EBX,EBX 
004E3C12    895D FC         MOV DWORD PTR SS:[EBP-4],EBX 
004E3C15    6A 02           PUSH 2 
004E3C17    FF15 78245300   CALL DWORD PTR DS:[532478]               ; MSVCRT.__set_app_type 
3、打开LORDPE,发现VSCLIENT。EXE已经存在,纠正IMANGESIZE(发现好多跟没纠正一样,好象没变啊,不知道这步为什么,高手解释下),然后完全脱壳,生成DUMP。EXE。 
4、然后打开ImportREC,选择VSCLIENT进程,由于OEP处为004E3BEA,则修改OEP为000E3BEA,(程序入口点好象都是400000吧,高手可以解释下,我接触破解没一个星期。。想找个师傅带我:( )然后IAT自动搜索。 
RAV和大小好象可以不改,然后我2种都试了,说下改的吧。 
刚OD的程序继续单步进入F7,遇到CALL就进,直到找到kernel32.*****,解释说明为这个的一大串东西,然后找到他的开头, 
004E3D94  - FF25 6C245300   JMP DWORD PTR DS:[53246C]                ; MSVCRT.__p__commode 
004E3D9A  - FF25 70245300   JMP DWORD PTR DS:[532470]                ; MSVCRT.__p__fmode 
004E3DA0  - FF25 78245300   JMP DWORD PTR DS:[532478]                ; MSVCRT.__set_app_type 
004E3DA6  - FF25 74245300   JMP DWORD PTR DS:[532474]                ; MSVCRT._controlfp 
004E3DAC  - FF25 84195300   JMP DWORD PTR DS:[531984]                ; kernel32.GetVersionExA 
 
记下53246C这个值,找到他的最下面 
004E4528  - FF25 A42A5300   JMP DWORD PTR DS:[532AA4]                ; c8SDK.c8SDK_ShowRotatorWindow 
004E452E  - FF25 B02A5300   JMP DWORD PTR DS:[532AB0]                ; c8SDK.c8SDK_Close 
004E4534  - FF25 00285300   JMP DWORD PTR DS:[532800]                ; VSFace.?LoadVSFaceBig@@YAPAVCBitmap@@PBD@Z 
004E453A  - FF25 FC275300   JMP DWORD PTR DS:[5327FC]                ; VSFace.?LoadVSFace@@YAPAVCBitmap@@PBD@Z 
004E4540  - FF25 F8275300   JMP DWORD PTR DS:[5327F8]                ; VSFace.?LoadVSManagerFace@@YAPAVCBitmap@@PBD@Z 
 
记下5327F8这个值,这个具体的范围我也不知道对不对,望高手指教, 
然后输入RAV值13246C,大小5327F8-53246C=38C,(这个算的大小好象不准,我用他们说的1000得到的输入表会更多,谁能解释下为什么) 
然后选择获得输入表,然后修理DUMP,选取刚才的DUMP。EXE,然后修理成功,得到了最后的VS。EXE。 
然后我运行就出现了上面说的问题,程序不运行,OD重新载入很多异常发生,最后异常退出,在线等待高手解答!!!!呵呵~~ 
用PEID查壳显示无壳,但用OD载入,他说入口点超出代码范围,可能是个自解压或自修改文件,好象还是没有脱完壳啊。。不懂。。 
 
[ 本帖最后由 duwangduwa 于 2008-1-5 17:38 编辑 ] |   
 
 
 
 |