孤漂江湖狼 发表于 2008-12-25 11:56

宽带MP3录音转换录音器之爆破分析

本帖最后由 孤漂江湖狼 于 2010-1-26 07:27 编辑

【破文标题】宽带MP3录音转换录音器之爆破分析
【破文作者】孤漂江湖狼
【破解工具】OD,DUP2
【破解平台】WinXP
【软件名称】宽带MP3录音转换录音器
【原版下载】http://www.mpegnet.cn/download/changemp3.rar
【软件简介】
宽网MP3转换录音器是武汉宽网开发且用于MP3制作的工具软件,该产品实现不限时实时MP3录音,FLV、
AMR、WAV、CD、WMA、ASF、WMV、MP4、M4A、AAC转换MP3,CD、WMA、MP3转换WAV,WAV录音,MP3裁减、
分割以及合并等功能,同时提供快速转换、边播边转等三种转换功能。
------------------------------------------------------------------------
【破解过程】
一、 程序为无壳VC编写。输入注册码点击注册软件无反应,但当第三次点击时软件会退出,可以通过
下EXIEPROCESS函数断点来定位验证代码,也可以通过查找关键信息来定位,在字符串中,我们可以找到
这样的信息:“产品注册授权成功,谢谢使用”。
   我们可以定位的以下代码:
0041EB23   .E8 407C0600   call    <jmp.&MFC42.#6334_CWnd::UpdateDa>
0041EB28   .8B93 F0110000 mov   edx, dword ptr       ;出现假码
0041EB2E   .83C9 FF       or      ecx, FFFFFFFF
0041EB31   .8BFA          mov   edi, edx
0041EB33   .33C0          xor   eax, eax
0041EB35   .F2:AE         repne   scas byte ptr es:
0041EB37   .F7D1          not   ecx
0041EB39   .2BF9          sub   edi, ecx
0041EB3B   .8D6C24 24   lea   ebp, dword ptr
0041EB3F   .8BC1          mov   eax, ecx
0041EB41   .8BF7          mov   esi, edi
0041EB43   .8BFD          mov   edi, ebp
0041EB45   .C1E9 02       shr   ecx, 2
0041EB48   .F3:A5         rep   movs dword ptr es:, dword p>;
0041EB4A   .8BC8          mov   ecx, eax
0041EB4C   .83E1 03       and   ecx, 3
0041EB4F   .F3:A4         rep   movs byte ptr es:, byte ptr>
0041EB51   .837A F8 10    cmp   dword ptr , 10            ;假码位数与16比较
0041EB55   .74 1A         je      short 0041EB71                   ;不跳则执行程序退出

代码
0041EB57   .8B4B 60       mov   ecx, dword ptr
0041EB5A   .41            inc   ecx
0041EB5B   .8BC1          mov   eax, ecx
0041EB5D   .894B 60       mov   dword ptr , ecx
0041EB60   .83F8 03       cmp   eax, 3
0041EB63   .0F8C 22010000 jl      0041EC8B
0041EB69   .6A 00         push    0                              ;
0041EB6B   .FF15 A8C74800 call    dword ptr [<&MSVCRT.exit>]       ; 进程退出CALL
0041EB71   >8D4C24 14   lea   ecx, dword ptr
0041EB75   .6A 04         push    4
0041EB77   .8D5424 28   lea   edx, dword ptr
0041EB7B   .51            push    ecx
0041EB7C   .52            push    edx
0041EB7D   .FF15 6CE24D00 call    dword ptr                ;
0041EB83   .83C4 0C       add   esp, 0C
0041EB86   .B9 02000000   mov   ecx, 2
0041EB8B   .8D7C24 14   lea   edi, dword ptr
0041EB8F   .8D73 64       lea   esi, dword ptr
0041EB92   .33C0          xor   eax, eax
0041EB94   .F3:A7         repe    cmps dword ptr es:, dword p>
0041EB96   .74 1A         je      short 0041EBB2                   ;关键跳转一,改为jmp
0041EB98   .8B4B 60       mov   ecx, dword ptr
0041EB9B   .41            inc   ecx
0041EB9C   .8BC1          mov   eax, ecx
0041EB9E   .894B 60       mov   dword ptr , ecx
0041EBA1   .83F8 03       cmp   eax, 3
0041EBA4   .0F8C E1000000 jl      0041EC8B
0041EBAA   .6A 00         push    0                              ;
0041EBAC   .FF15 A8C74800 call    dword ptr [<&MSVCRT.exit>]       ; \进程退出CALL
0041EBB2   >8D4C24 24   lea   ecx, dword ptr
0041EBB6   .6A 04         push    4
0041EBB8   .51            push    ecx
0041EBB9   .FF15 68E24D00 call    dword ptr                ;
0041EBBF   .83C4 08       add   esp, 8
0041EBC2   .3D 80000000   cmp   eax, 80
0041EBC7   .7C 05         jl      short 0041EBCE
0041EBC9   .2D 80000000   sub   eax, 80
0041EBCE   >83F8 04       cmp   eax, 4
0041EBD1   .74 1A         je      short 0041EBED                   ;关键跳转二,改为jmp
0041EBD3   .8B4B 60       mov   ecx, dword ptr
0041EBD6   .41            inc   ecx
0041EBD7   .8BC1          mov   eax, ecx
0041EBD9   .894B 60       mov   dword ptr , ecx
0041EBDC   .83F8 03       cmp   eax, 3
0041EBDF   .0F8C A6000000 jl      0041EC8B
0041EBE5   .6A 00         push    0                              ;
0041EBE7   .FF15 A8C74800 call    dword ptr [<&MSVCRT.exit>]       ; \进程退出CALL
0041EBED   >8D4C24 10   lea   ecx, dword ptr
0041EBF1   .E8 DA030300   call    0044EFD0
0041EBF6   .8D7C24 24   lea   edi, dword ptr
0041EBFA   .83C9 FF       or      ecx, FFFFFFFF
0041EBFD   .33C0          xor   eax, eax
0041EBFF   .C78424 2C0100>mov   dword ptr , 0
0041EC0A   .F2:AE         repne   scas byte ptr es:
0041EC0C   .F7D1          not   ecx
0041EC0E   .2BF9          sub   edi, ecx
0041EC10   .8D4424 24   lea   eax, dword ptr
0041EC14   .8BD1          mov   edx, ecx
0041EC16   .8BF7          mov   esi, edi
0041EC18   .BF 10F64C00   mov   edi, 004CF610
0041EC1D   .50            push    eax
0041EC1E   .C1E9 02       shr   ecx, 2
0041EC21   .F3:A5         rep   movs dword ptr es:, dword p>
0041EC23   .8BCA          mov   ecx, edx
0041EC25   .68 38634A00   push    004A6338                         ;whmpegnet.ini
0041EC2A   .83E1 03       and   ecx, 3
0041EC2D   .68 2C634A00   push    004A632C                         ;注册授权号
0041EC32   .F3:A4         rep   movs byte ptr es:, byte ptr>
0041EC34   .68 D0584A00   push    004A58D0                         ;
0041EC39   .8D4C24 20   lea   ecx, dword ptr
0041EC3D   .C705 10DE4D00>mov   dword ptr , 7B
0041EC47   .E8 C4030300   call    0044F010
0041EC4C   .8B4B 20       mov   ecx, dword ptr
0041EC4F   .6A 01         push    1                              ;
0041EC51   .6A 00         push    0                              ;
0041EC53   .51            push    ecx                              ;
0041EC54   .FF15 14C94800 call    dword ptr [<&USER32.InvalidateRe>;
0041EC5A   .6A 00         push    0
0041EC5C   .68 485E4A00   push    004A5E48                         ;产品注册
0041EC61   .68 10634A00   push    004A6310                         ;产品注册授权成功,

谢谢使用

我们可以看到注册码存放在whmpegnet.ini。
二、接下来我们要定位重启验证的代码,下bp GetPrivateProfileStringA函数断点,经过代码返回,单

步跟踪,来到以下代码:
00421A39   . /7F 13         jg      short 00421A4E
00421A3B   . |8B95 9C270000 mov   edx, dword ptr
00421A41   . |6A 00         push    0
00421A43   . |50            push    eax
00421A44   . |68 4E010000   push    14E
00421A49   . |52            push    edx
00421A4A   . |FFD7          call    edi
00421A4C   . |EB 37         jmp   short 00421A85
00421A4E   > \8B85 9C270000 mov   eax, dword ptr
00421A54   .6A 00         push    0
00421A56   .6A 00         push    0
00421A58   .68 4E010000   push    14E
00421A5D   .50            push    eax
00421A5E   .C74424 20 000>mov   dword ptr , 0
00421A66   .FFD7          call    edi
00421A68   .8B4C24 10   mov   ecx, dword ptr
00421A6C   .51            push    ecx
00421A6D   .68 38634A00   push    004A6338                         ;whmpegnet.ini
00421A72   .68 D0584A00   push    004A58D0                         ;宽网mp3转换录音器
00421A77   .68 446C4A00   push    004A6C44                         ;
00421A7C   .8D4C24 24   lea   ecx, dword ptr
00421A80   .E8 4BD70200   call    0044F1D0                         ;去硬件码

   继续单步,来到这里:
00421CC3   .68 38634A00   push    004A6338                         ;whmpegnet.ini
00421CC8   .68 2C634A00   push    004A632C                         ;注册授权号
00421CCD   .68 D0584A00   push    004A58D0                         ;宽网mp3转换录音器
00421CD2   .8D4C24 24   lea   ecx, dword ptr
00421CD6   .8935 10DE4D00 mov   dword ptr , esi
00421CDC   .E8 4FD40200   call    0044F130                         ;取假码
往后分析没有定位到算法部分,也没找到关键地方。
就采用另一种方法定位,我们在字符串信息里可以找到:“宽网mp3转换录音器 共享版 v3.80 未注册”。
定位到如下代码:
00413630   .FF15 F8C84800 call    dword ptr [<&USER32.GetWindowRec>;
00413636   .A1 10DE4D00   mov   eax, dword ptr
0041363B   .C705 F80C4C00>mov   dword ptr , 1
00413645   .83F8 7B       cmp   eax, 7B
00413648      75 07         jnz   short 00413651                      关键跳转,修改为je
0041364A   .68 74584A00   push    004A5874
0041364F   .EB 05         jmp   short 00413656
00413651   >68 4C584A00   push    004A584C                         ;宽网mp3转换录音器 共享版 v3.80 未注册
00413656   >8BCE          mov   ecx, esi
00413658   .E8 3B340700   call    <jmp.&MFC42.#6199_CWnd::SetWindo>
修改跳转后,程序名称现实注册成功。但是仅仅修改这个还是不行。程序存在功能限制。
三、功能限制的去除:
当你使用一些功能时,程序会退出,我们下EXITPROCESS断点,使用MP3录音功能,会点下来,堆栈回

溯到以下代码:
004356E1   > \E8 CAD2FDFF   call    004129B0                              关键验证CALL
004356E6   .84C0          test    al, al
004356E8   .75 13         jnz   short 004356FD                         跳过退出程序CALL
004356EA   .8B45 00       mov   eax, dword ptr
004356ED   .8BCD          mov   ecx, ebp
004356EF   .FF90 CC000000 call    dword ptr
004356F5   .6A 00         push    0                                    ; /status = 0
004356F7   .FF15 A8C74800 call    dword ptr [<&MSVCRT.exit>]             ; \exit
我们进入上面的验证CALL,发现16处地方调用此CALL,猜测至少有16处功能验证,我们把开始的代码:
004129B0      6A FF         push    -1
004129B2      68 AB914800   push    004891AB                              
改为:mov   al, 1
   retn

这样就可以跳过退出程序的CALL了。
但是程序还是有验证,使用某一功能超过十秒将会出现对话框,提示“共享软件,功能限制,请与武

汉宽网联系注册使用”,查找字符串信息发现16处这种信息,与上面16处调用程序退出CALL相符。但是

通过对照发现在程序调用对话框前都有类似这样的代码:
00435AE1   .E8 B20F0500   call    <jmp.&MFC42.#6199_CWnd::SetWindo>;
00435AE6   .8B8E 00150000 mov   ecx, dword ptr
00435AEC   .6A 01         push    1                              ; /Erase = TRUE
00435AEE   .6A 00         push    0                              ; |pRect = NULL
00435AF0   .51            push    ecx                              ; |hWnd
00435AF1   .FF15 14C94800 call    dword ptr [<&USER32.InvalidateRe>; \InvalidateRect
00435AF7   .833D 10DE4D00>cmp   dword ptr , 7B
00435AFE   . /74 38         je      short 00435B38
最后一行的跳转代码可以跳过提示的对话框,但是没找到修改一处代码就可以使16处都跳过,只好一一修改了,还请高手在此指点指点。就分析到这里吧,因为不懂算法,就没分析算法。有不对的地方多多指教
另外在冰糖葫芦论坛看到lmg7005大牛发了完美破解的图片,不知道是采用的什么方法,我破解的怎么有的地方程序错误,还希望指点指点。希望有人写个算法分析学习学习。
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!

wgz001 发表于 2008-12-25 12:57

多谢了   期待更深入的分析学习 :lol

DUP2干什么用的哦

[ 本帖最后由 wgz001 于 2008-12-25 13:00 编辑 ]

binke 发表于 2008-12-25 13:01

回复 2# wgz001 的帖子

制作Patch或者Loader 的工具
界面精美.:lol

Squn 发表于 2008-12-25 13:19

原帖由 wgz001 于 2008-12-25 12:57 发表 http://www.52pojie.cn/images/common/back.gif
多谢了   期待更深入的分析学习 :lol

DUP2干什么用的哦

做补丁的工具。

常用来做loader。

wgz001 发表于 2008-12-25 14:22

多谢了   就是没看到楼主用用   :lol
所以 ....................

[ 本帖最后由 wgz001 于 2008-12-25 14:24 编辑 ]

孤漂江湖狼 发表于 2008-12-25 22:07

在破文里没详细写,利用这个软件的二进制代码模糊搜索来查找功能相近得到代码

半瓶水 发表于 2008-12-26 19:42

赞楼主。待兴致来时也下来研究研究。

天天快乐 发表于 2010-8-30 20:17

看不懂哦 嘻嘻
页: [1]
查看完整版本: 宽带MP3录音转换录音器之爆破分析