首页
社区
课程
招聘
Vbox_462之Authorware 7.0脱壳+修复
发表于: 2004-5-15 12:46 8604

Vbox_462之Authorware 7.0脱壳+修复

2004-5-15 12:46
8604

Vbox_462之Authorware 7.0脱壳+修复

【破解作者】 clide2000 [DFCG][OCN]  2003.5.13
【使用工具】 Ollydbg1.10汉化版
【破解平台】 win2003
【软件名称】 Authorware 7.0
【软件简介】 这个就不用说了吧,地球人都知道了。看了一篇关于"Unpacking Adobe Pagemaker V7 "(Vbox_462)的文章,
             其作者是hobferret。又因为手里正好有Authorware 7.0,也是用Vbox_462保护的,所以才有了此文。
            (关于"Unpacking Adobe Pagemaker V7 with Olydebug“"的原文可以去"www.exetools.com"的论坛查找)
【软件大小】 52M
【加壳方式】 Vbox_462
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】

Unpacking
在调试设置(按ALT-O)中,异常只忽略前三项(只前三项打勾),跟踪设置中选中执行到RET以后步过RET命令.
OK,载入Authorware 7.0,如果出现在"入口点预警"提示,按确定.正常载入后程序停在以下地方:
008B3230 >  48                  dec eax
008B3231    75 00               jnz short Authorwa.008B3233
008B3233    03C5                add eax, ebp
008B3235    8BC5                mov eax, ebp
008B3237    33C0                xor eax, eax
008B3239    85C0                test eax, eax
008B323B    F7D0                not eax
008B323D    86E0                xchg al, ah
008B323F    75 00               jnz short Authorwa.008B3241
008B3241    2BC4                sub eax, esp
008B3243    33C5                xor eax, ebp
008B3245    48                  dec eax
008B3246    85C0                test eax, eax
008B3248    86E0                xchg al, ah
008B324A    75 00               jnz short Authorwa.008B324C
008B324C    48                  dec eax
008B324D    40                  inc eax
008B324E    03C4                add eax, esp

F9直接运行,遇到异常直接按Shift+F9跳过(我只遇到两次),直到出现试用窗口,然后按下Try按钮,再次中断在异常处,这次异常内容如下:
0176F10D    FFFF                ???                                                    ; 未知命令
0176F10F    FFFF                ???                                                    ; 未知命令
0176F111    FFFF                ???                                                    ; 未知命令
0176F113    FFFF                ???                                                    ; 未知命令
0176F115    FFFF                ???                                                    ; 未知命令
0176F117    FF5E 33             call far fword ptr ds:[esi+33]                         ; 远距呼叫
0176F11A    4D                  dec ebp
0176F11B    75 3B               jnz short 0176F158
0176F11D    9D                  popfd
0176F11E    99                  cdq
0176F11F    A5                  movs dword ptr es:[edi], dword ptr ds:[esi]
0176F120    85CC                test esp, ecx
0176F122    A7                  cmps dword ptr ds:[esi], dword ptr es:[edi]
0176F123    52                  push edx
0176F124    6381 4BD13D6D       arpl word ptr ds:[ecx+6D3DD14B], ax

还是Shift+F9跳过,之后会中断在
017B2756    FFFF                ???                                                    ; 未知命令
017B2758    FFFF                ???                                                    ; 未知命令
017B275A    FFFF                ???                                                    ; 未知命令
017B275C    FFFF                ???                                                    ; 未知命令
017B275E    FFFF                ???                                                    ; 未知命令
017B2760    5E                  pop esi
017B2761    334D 75             xor ecx, dword ptr ss:[ebp+75]
017B2764    3B9D 99A585CC       cmp ebx, dword ptr ss:[ebp+CC85A599]
017B276A    A7                  cmps dword ptr ds:[esi], dword ptr es:[edi]
017B276B    52                  push edx
017B276C    6381 4BD13D6D       arpl word ptr ds:[ecx+6D3DD14B], ax
017B2772    F2:                 prefix repne:                                          ; 多余的前缀
017B2773    8BC2                mov eax, edx
017B2775    5F                  pop edi
017B2776    5E                  pop esi
017B2777    5D                  pop ebp
017B2778    C3                  retn

按Alt+M,在Authorwa的.text段上下内存访问断点.方法在00401000一行上,右击->设置内存访问断点。
关闭内存窗口,Shift+F9运行,程序又中断在:
07028153    F3:A5               rep movs dword ptr es:[edi], dword ptr ds:[esi]
07028155    FF2495 68820207     jmp dword ptr ds:[edx*4+7028268]
0702815C    8BC7                mov eax, edi
0702815E    BA 03000000         mov edx, 3
07028163    83E9 04             sub ecx, 4
07028166    72 0C               jb short vboxta.07028174
07028168    83E0 03             and eax, 3
0702816B    03C8                add ecx, eax
0702816D    FF2485 80810207     jmp dword ptr ds:[eax*4+7028180]
07028174    FF248D 78820207     jmp dword ptr ds:[ecx*4+7028278]
0702817B    90                  nop
0702817C    FF248D FC810207     jmp dword ptr ds:[ecx*4+70281FC]
07028183    90                  nop
07028184    90                  nop
07028185    8102 07BC8102       add dword ptr ds:[edx], 281BC07
0702818B    07                  pop es                                                 ; 修正的段位寄存器
0702818C  ^ E0 81               loopdne short vboxta.0702810F
0702818E    0207                add al, byte ptr ds:[edi]
07028190    23D1                and edx, ecx

右键->断点->清除内存断点.然后按Crtl+F9,直到出现返回到call edi,     然后在call edi上下硬件执行断点,F9运行
013F04A8    53                  push ebx
013F04A9    FFD7                call edi              ;即右击此行->断点->硬件执行
013F04AB    8945 10             mov dword ptr ss:[ebp+10], eax         ;返回在这里
013F04AE    5B                  pop ebx
013F04AF    8B5D 08             mov ebx, dword ptr ss:[ebp+8]
013F04B2    57                  push edi

若出现"您的程序已经被挂起并且不能运行.请恢复主要的线程",提示,直接确定.在弹出的新窗口中,右击,选择恢复命令
即可再次中断在 013F04A9    FFD7                call edi         这一行,此时用F7进入.来到:
014A0000    0BC5                or eax, ebp
014A0002    8BC5                mov eax, ebp
014A0004    F7D0                not eax
014A0006    2BC4                sub eax, esp
014A0008    90                  nop
014A0009    33C5                xor eax, ebp
014A000B    0BC4                or eax, esp
014A000D    EB 00               jmp short 014A000F
014A000F    0BC0                or eax, eax
014A0011    EB 00               jmp short 014A0013
014A0013    2BC5                sub eax, ebp
014A0015    74 00               je short 014A0017
014A0017    74 00               je short 014A0019
014A0019    90                  nop
014A001A    2BC5                sub eax, ebp

此时一直用F7跟踪,直到出现jmp ebx:
014A09A8    8B5D F0             mov ebx, dword ptr ss:[ebp-10]
014A09AB    EB 02               jmp short 014A09AF
014A09AD    CD 20               int 20
014A09AF  - FFE3                jmp ebx                  ; Authorwa.006336A0    注意这里,就要跳到OEP去了,在此行按F7来到
014A09B1    EB 01               jmp short 014A09B4
014A09B3  ^ EB 8B               jmp short 014A0940
014A09B5    55                  push ebp
014A09B6    F8                  clc

由上面的jmp ebx会来到(如果来到这里后看到的不是下面的内容,请用右键->分析->分析代码即可:
006336A0    64:A1 00000000      mov eax, dword ptr fs:[0]
006336A6    55                  push ebp                    ;OEP   此处就是程序的OEP了
006336A7    8BEC                mov ebp, esp
006336A9    6A FF               push -1
006336AB    68 783A6400         push Authorwa.00643A78
006336B0    68 94A56300         push Authorwa.0063A594
006336B5    50                  push eax
006336B6    64:8925 00000000    mov dword ptr fs:[0], esp
006336BD    83EC 60             sub esp, 60
006336C0    53                  push ebx
006336C1    56                  push esi
006336C2    57                  push edi
006336C3    8965 E8             mov dword ptr ss:[ebp-18], esp
006336C6    FF15 7C036400       call dword ptr ds:[64037C]            ; kernel32.GetVersion
006336CC    A3 40156500         mov dword ptr ds:[651540], eax

此时用LordPE执行correct ImageSize后dump Full出dump.exe文件.

IAT的修复:
好了,让我们来用ImportREC16修复IAT。运行ImportREC16,选择Authorware 7.exe进程后,在oep填入2336a6(等于6336A6-400000)
按下IAT AotoSearch后,点击Get Imports按钮。然后用Show Invalid检查一下出现的错误的调用。
其它的经过检测除了前两处需手动修复外,其它全部为无效数据,直接Cut掉即可。修复时可以用右键命令中的Disassemble/HexView命令,
查找到真正的调用函数后修复即可。经过查找发现:
   
    24052c处调用的是GetMessageA      
    2406e0处调用的是PeekMessageA

最后修复dump.exe文件。修复之后即可直接运行。好了收工。

--------------------------------------------------------------------------------
【破解总结】

这是我第一次写脱文,所以比较乱,有错误的地方还请大家指正。这篇脱文是在参考Unpacking Adobe Pagemaker V7才有的,所以我在这里也
非常感谢其作者能写出这么好的脱文,我这里差不多只是用中文在描述一遍而已。
最后谢谢你浪费的这么多时间看完了这篇文章。

--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 10
支持
分享
最新回复 (4)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
有些Vbox是不太一样的,比如诺顿工具
2004-5-15 14:56
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
3
最初由 fly 发布
有些Vbox是不太一样的,比如诺顿工具

多谢老大的提醒和看重(没想到居然加精了^_^):p
下面是一点补充:

Authorware7.0下载地址:
http://www.xiaobo.net/softview/softview_1120.html
不好意思,由于我的authorware7.0是很早以前下载的,所以写脱文时已经忘了下载地址了,所以现在又再补上一个.

注意:刚才测试了一下,上面的这个版本与我上面的脱文并非同一个版本,所以有些区别,但相对于之前的那个版本更加简单了些,这个版本,只要在最后一处异常处设置好code段的内存访问断点后,走到第一个retn返回后就到oep了(不用再一直Ctrl+F9找Call edi的调用返回处了).
oep为637066,IAT的修复与上面基本一致,还是只有   GetMessageA 和PeekMessageA是经过变换的,但用上面的方法同样轻松搞定

[ Last edited by clide2000 on 2004-5-17 at 09:11 AM ]
2004-5-17 10:42
0
雪    币: 215
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
其它的经过检测除了前两处需手动修复外,其它全部为无效数据,直接Cut掉即可。

这句我想问一下,怎么知道其他是无效数据啊.
2004-5-17 11:45
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
5
先问句题外话,和fly很熟吗,不然这样可不太好(你现在用的那个头象)。

最初由 thantii 发布
其它的经过检测除了前两处需手动修复外,其它全部为无效数据,直接Cut掉即可。

这句我想问一下,怎么知道其他是无效数据啊.


因为我在OD中对其他的不正常的函数调用下好内存访问断点,但发现刚用OD载入后就是ImportREC16找到的那些数据,并且直到程序正常运行以后,也没有做过修改,所以判断均为无用数据(开始时,也算是测是,结果这样修复可以正常运行,说明我开始的判断是可行的)
2004-5-17 17:02
0
游客
登录 | 注册 方可回帖
返回
//