飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 7840|回复: 14

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

[复制链接]

该用户从未签到

发表于 2008-1-5 14:44:19 | 显示全部楼层 |阅读模式
这是我第一次发贴,请多指教=。=
最近刚刚接触脱壳,学习了几天,决定拿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 编辑 ]
PYG19周年生日快乐!

该用户从未签到

发表于 2008-1-5 15:37:24 | 显示全部楼层
VC++程序都是以PUSH EBP
              MOV  EBP, ESP
开始的,, 在VC里直接看工程的汇编代码就明白了~~
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-3 23:07
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2008-1-5 15:40:47 | 显示全部楼层
    自校验吧,兄弟,跟下看
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2008-1-5 15:43:49 | 显示全部楼层
    自效验???能不能具体说下,我新手不是很明白=。=
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-1-5 16:08:45 | 显示全部楼层
    看了下程序,应该是自校验的问题, 不过我也没有跟明白(初学脱壳),
    在initterm里出现异常..感觉这个函数是VC自己调用的啊。.~
    希望高手来解答
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-3 23:07
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2008-1-5 16:51:47 | 显示全部楼层
    有问题。。。。。

    [ 本帖最后由 月之精灵 于 2008-1-5 22:30 编辑 ]
    PYG19周年生日快乐!

    该用户从未签到

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

    [ 本帖最后由 duwangduwa 于 2008-1-5 17:38 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-3 23:07
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2008-1-5 18:12:21 | 显示全部楼层
    为免误人,删了,因为程序运行有问题。对不起各位了,
    请不要下载附件,因为程序运行会出现问题

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

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 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:[EBX]          ; 不允许锁定前缀

    这是为什么。。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-1-5 20:28:35 | 显示全部楼层
    我得到的OEP也是004E3B7A >  55              PUSH EBP
    你得到的那个错了。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表