duwangduwa 发表于 2008-1-5 14:44:19

脱UPX壳后程序运行无反映, OD跟踪程序异常退出,求助!

这是我第一次发贴,请多指教=。=
最近刚刚接触脱壳,学习了几天,决定拿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:
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:
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 00000000MOV EAX,DWORD PTR FS:
004E3BFF    50            PUSH EAX
004E3C00    64:8925 0000000>MOV DWORD PTR FS:,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:,ESP
004E3C10    33DB            XOR EBX,EBX
004E3C12    895D FC         MOV DWORD PTR SS:,EBX
004E3C15    6A 02         PUSH 2
004E3C17    FF15 78245300   CALL DWORD PTR DS:               ; 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:                ; MSVCRT.__p__commode
004E3D9A- FF25 70245300   JMP DWORD PTR DS:                ; MSVCRT.__p__fmode
004E3DA0- FF25 78245300   JMP DWORD PTR DS:                ; MSVCRT.__set_app_type
004E3DA6- FF25 74245300   JMP DWORD PTR DS:                ; MSVCRT._controlfp
004E3DAC- FF25 84195300   JMP DWORD PTR DS:                ; kernel32.GetVersionExA

记下53246C这个值,找到他的最下面
004E4528- FF25 A42A5300   JMP DWORD PTR DS:                ; c8SDK.c8SDK_ShowRotatorWindow
004E452E- FF25 B02A5300   JMP DWORD PTR DS:                ; c8SDK.c8SDK_Close
004E4534- FF25 00285300   JMP DWORD PTR DS:                ; VSFace.?LoadVSFaceBig@@YAPAVCBitmap@@PBD@Z
004E453A- FF25 FC275300   JMP DWORD PTR DS:                ; VSFace.?LoadVSFace@@YAPAVCBitmap@@PBD@Z
004E4540- FF25 F8275300   JMP DWORD PTR DS:                ; 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 编辑 ]

vecri 发表于 2008-1-5 15:37:24

VC++程序都是以PUSH EBP
            MOVEBP, ESP
开始的,, 在VC里直接看工程的汇编代码就明白了~~

月之精灵 发表于 2008-1-5 15:40:47

自校验吧,兄弟,跟下看

duwangduwa 发表于 2008-1-5 15:43:49

自效验???能不能具体说下,我新手不是很明白=。=

vecri 发表于 2008-1-5 16:08:45

看了下程序,应该是自校验的问题, 不过我也没有跟明白(初学脱壳),
在initterm里出现异常..感觉这个函数是VC自己调用的啊。.~
希望高手来解答

月之精灵 发表于 2008-1-5 16:51:47

有问题。。。。。

[ 本帖最后由 月之精灵 于 2008-1-5 22:30 编辑 ]

duwangduwa 发表于 2008-1-5 17:33:18

我跟踪了004D096C 这个地址,不是 JNZ dumped_.004D1188这段代码。
是不是上面我找的OEP不是真正的OEP,因为我在那下断点,OD警告说你在代码部分外下断点。后面我按照这个OEP脱壳的话,是错误的,因为脱了壳后OD载入,直接就说入口点超出代码范围,可能是个自解压或自修改文件。精灵帮分析下

[ 本帖最后由 duwangduwa 于 2008-1-5 17:38 编辑 ]

月之精灵 发表于 2008-1-5 18:12:21

为免误人,删了,因为程序运行有问题。对不起各位了,
请不要下载附件,因为程序运行会出现问题

[ 本帖最后由 月之精灵 于 2008-1-5 22:32 编辑 ]

duwangduwa 发表于 2008-1-5 18:31:44

我看了,你给的OEP为004E3B7A >55            PUSH EBP

而我得到的是004E3BEA    55            PUSH EBP
我找了004E3B7A,得到的数据为004E3B7A    F0:2353 00      LOCK AND EDX,DWORD PTR DS:          ; 不允许锁定前缀

这是为什么。。

vecri 发表于 2008-1-5 20:28:35

我得到的OEP也是004E3B7A >55            PUSH EBP
你得到的那个错了。
页: [1] 2
查看完整版本: 脱UPX壳后程序运行无反映, OD跟踪程序异常退出,求助!