• 标 题:菜鸟脱文 ASProtect 1.23 RC4 —— DVDFab v1.52,高手免进了
  • 作 者:temerata
  • 时 间:2004年2月25日 08:59
  • 链 接:http://bbs.pediy.com

【破解作者】 temerata
【作者邮箱】 temerata@sohu.com
【使用工具】 OllyDbg、LordPE、ImportREC、PEditor、Hex Workshop
【破解平台】 Win2KSP4
【软件名称】 DVDFab v1.52
【下载地址】 原版下载
【软件简介】 一款可以帮助你轻松制作完美品质的DVD影碟备份的光盘复制工具!
            -无损复制DVD电影
            -可复制NTSC或PAL制式DVD
            -可只复制电影部分,不包括不需要的音频和字幕
            -可刻录到DVD-R/RW和DVD+R/RW
            -移除所有的DVD保护方式
            -备份多个光盘
            -恢复损坏的盘片中的数据
            -重写和核心引擎以支持几乎所有的DVD
【软件大小】 855 KB
【加壳方式】 ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov
【破解声明】 最近非常郁闷!没有什么长进……,但愿这篇东东对和我一样的菜鸟有些用处吧……
--------------------------------------------------------------------------------
【破解内容】

1、寻找SDK地址并Dump取文件:

打开OllyDbg,忽略内存以外的所有异常,载入DVDFab.exe,然后用IsDebugPresent插件隐藏自身:

00401000 >  68 01604D00     push DVDFab.004D6001                     ; 载入后停在这里
00401005    E8 01000000     call DVDFab.0040100B
0040100A    C3              retn

一切安排妥当,按F9运行,出现内存,按Shift+F9跳过。按了21次Shift+F9之后(即在堆栈窗口看到机器特征码的时候):

……
0012FF5C   00E16BE8  ASCII "6RttNACAQn0="
……

按Alt+M窗口打开内存镜像窗口,在Code段下内存访问断点:

地址       大小       Owner      区段       包含                         类型   访问      初始访问  映射为
……
00400000   00001000   DVDFab                PE header                    Imag   R         RWE
00401000   0004D000   DVDFab                code                         Imag   R         RWE//在这一行点右键设置内存访问断点
……

设置完毕回到CPU窗口,再按1次Shift+F9会断下来:

00418E35    8B4424 04       mov eax,dword ptr ss:[esp+4]             ; 断在这里
00418E39    A3 9CB64700     mov dword ptr ds:[47B69C],eax            ; 注意0047B69C,它将指向字符串"6RttNACAQn0="的存放地址
00418E3E    C3              retn

再按几下F9出现异常,无法用Shift+F9跳过,所以按Ctrl+F2重新开始。这次按22次再打开内存镜像窗口,下与刚才同样的断点。按Shift+F9被断下来:

00418DF6    8B4424 04       mov eax,dword ptr ss:[esp+4]
00418DFA    A3 90B64700     mov dword ptr ds:[47B690],eax            ; 这个地址与刚才那个地址相邻,它需要指向名字的存放地址
00418DFF    C2 0400         retn 4

这之后没有什么有用信息,直接来到这里:

00E039EC    3100            xor dword ptr ds:[eax],eax               ; 停在这里,一般来说是壳的最后一次异常。在这里用LordPE将文件dump出来(注意先清除内存断点)
……
00E03A29    C3              retn                                     ; 在这里设断,然后Shift+F9停在这里
00E03A2A    5F              pop edi                                  ; 00E04BD9
00E03A2B    5E              pop esi                                  ; 00E04BD9
00E03A2C    5B              pop ebx                                  ; 00E04BD9
00E03A2D    8BE5            mov esp,ebp
00E03A2F    5D              pop ebp                                  ; 00E04BD9
00E03A30    C3              retn

2、寻找Stolen Code和OEP:

接下来要用F7步跟找Stolen Code,注意用F4跳出循环。我跟到的Stolen Code如下:

00E17C92    55              push ebp*
00E17C93    65:EB 02        jmp short 00E17C98

00E17C98    8F4424 00       pop dword ptr ss:[esp]                   ; DVDFab.0044A5E6
00E17C9C    8BEC            mov ebp,esp*
00E17C9E    6A FF           push -1*
00E17CA0    68 D0304500     push 4530D0*
00E17CA5    68 E6A54400     push 44A5E6*                             ; jmp to MSVCRT._except_handler3
00E17CAA    64:A1 00000000  mov eax,dword ptr fs:[0]*
00E17CB0    66:8105 BA7CE10>add word ptr ds:[E17CBA],0BB36
00E17CB9    2E:EB 02        jmp short 00E17CBE

00E17CD9    50              push eax*
00E17CDA    65:EB 02        jmp short 00E17CDF

00E17CDF    8F4424 00       pop dword ptr ss:[esp]
00E17CE3    64:8925 0000000>mov dword ptr fs:[0],esp*
00E17CEA    83EC 68         sub esp,68*
00E17CED    66:8105 F77CE10>add word ptr ds:[E17CF7],0BB36
00E17CF6    2E:EB 02        jmp short 00E17CFB

00E17D16    53              push ebx*
00E17D17    65:EB 02        jmp short 00E17D1C

00E17D49    56              push esi*
00E17D4A    65:EB 02        jmp short 00E17D4F

00E17D7C    57              push edi*
00E17D7D    65:EB 02        jmp short 00E17D82

00E17D82    8F4424 00       pop dword ptr ss:[esp]
00E17D86    8965 E8         mov dword ptr ss:[ebp-18],esp*
00E17D89    33DB            xor ebx,ebx*
00E17D8B    895D FC         mov dword ptr ss:[ebp-4],ebx*
00E17D8E    6A 02           push 2*
00E17D90    F3:             prefix rep:

过了这些Stolen Code很快便来到伪OEP处:

0044A619    FF15 7CE64400   call dword ptr ds:[44E67C]               ; MSVCRT.__set_app_type

3、修复:

这时打开ImportREC,选中进程,OEP处填入0004A619,点击IAT AutoSearch,然后点Get Imports。
看到有许多无效的,点Show Invalid全部选中,然后右键==>Trace Level1(Disasm)修复大部分,剩下的修复如下:

rva:0004E150 mod:kernel32.dll ord:0158 name:GetProcAddress
rva:0004E178 mod:kernel32.dll ord:010E name:GetCurrentProcess
rva:0004E18C mod:kernel32.dll ord:0193 name:GetVersion
rva:0004E198 mod:kernel32.dll ord:01F7 name:LockResource
rva:0004E1F8 mod:kernel32.dll ord:013F name:GetModuleHandleA

如此修复之后,Fix Dump得到dumped_.exe,用OllyDbg载入,补上Stolen Code,另存为dumped_1.exe,用PEditor将Entry Point改为0004A5EC。
如此之后,程序已经可以运行(没有暗桩)。

4、破解:

用Hex Workshop打开dumped_1.exe来到偏移为0047B690处:6138DF00 0E000000 0E000000 2455E100
它下面是一大块空地。选0047B700处填上temerata[DFCG],并将上面这个6138DF00修改为00B74700,将文件另存为Unpacked.exe,破解完毕。
这个软件从来没有用过,如果存在错漏,敬请指教!