- 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 编辑 ] |
|