好友
阅读权限10
听众
最后登录1970-1-1
|
孤漂江湖狼
发表于 2008-12-25 11:56
本帖最后由 孤漂江湖狼 于 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 [ebx+11F0] ; 出现假码
0041EB2E . 83C9 FF or ecx, FFFFFFFF
0041EB31 . 8BFA mov edi, edx
0041EB33 . 33C0 xor eax, eax
0041EB35 . F2:AE repne scas byte ptr es:[edi]
0041EB37 . F7D1 not ecx
0041EB39 . 2BF9 sub edi, ecx
0041EB3B . 8D6C24 24 lea ebp, dword ptr [esp+24]
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:[edi], dword p>;
0041EB4A . 8BC8 mov ecx, eax
0041EB4C . 83E1 03 and ecx, 3
0041EB4F . F3:A4 rep movs byte ptr es:[edi], byte ptr>
0041EB51 . 837A F8 10 cmp dword ptr [edx-8], 10 ; 假码位数与16比较
0041EB55 . 74 1A je short 0041EB71 ; 不跳则执行程序退出
代码
0041EB57 . 8B4B 60 mov ecx, dword ptr [ebx+60]
0041EB5A . 41 inc ecx
0041EB5B . 8BC1 mov eax, ecx
0041EB5D . 894B 60 mov dword ptr [ebx+60], 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 [esp+14]
0041EB75 . 6A 04 push 4
0041EB77 . 8D5424 28 lea edx, dword ptr [esp+28]
0041EB7B . 51 push ecx
0041EB7C . 52 push edx
0041EB7D . FF15 6CE24D00 call dword ptr [4DE26C] ;
0041EB83 . 83C4 0C add esp, 0C
0041EB86 . B9 02000000 mov ecx, 2
0041EB8B . 8D7C24 14 lea edi, dword ptr [esp+14]
0041EB8F . 8D73 64 lea esi, dword ptr [ebx+64]
0041EB92 . 33C0 xor eax, eax
0041EB94 . F3:A7 repe cmps dword ptr es:[edi], dword p>
0041EB96 . 74 1A je short 0041EBB2 ; 关键跳转一,改为jmp
0041EB98 . 8B4B 60 mov ecx, dword ptr [ebx+60]
0041EB9B . 41 inc ecx
0041EB9C . 8BC1 mov eax, ecx
0041EB9E . 894B 60 mov dword ptr [ebx+60], 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 [esp+24]
0041EBB6 . 6A 04 push 4
0041EBB8 . 51 push ecx
0041EBB9 . FF15 68E24D00 call dword ptr [4DE268] ;
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 [ebx+60]
0041EBD6 . 41 inc ecx
0041EBD7 . 8BC1 mov eax, ecx
0041EBD9 . 894B 60 mov dword ptr [ebx+60], 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 [esp+10]
0041EBF1 . E8 DA030300 call 0044EFD0
0041EBF6 . 8D7C24 24 lea edi, dword ptr [esp+24]
0041EBFA . 83C9 FF or ecx, FFFFFFFF
0041EBFD . 33C0 xor eax, eax
0041EBFF . C78424 2C0100>mov dword ptr [esp+12C], 0
0041EC0A . F2:AE repne scas byte ptr es:[edi]
0041EC0C . F7D1 not ecx
0041EC0E . 2BF9 sub edi, ecx
0041EC10 . 8D4424 24 lea eax, dword ptr [esp+24]
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:[edi], 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:[edi], byte ptr>
0041EC34 . 68 D0584A00 push 004A58D0 ;
0041EC39 . 8D4C24 20 lea ecx, dword ptr [esp+20]
0041EC3D . C705 10DE4D00>mov dword ptr [4DDE10], 7B
0041EC47 . E8 C4030300 call 0044F010
0041EC4C . 8B4B 20 mov ecx, dword ptr [ebx+20]
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 [ebp+279C]
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 [ebp+279C]
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 [esp+20], 0
00421A66 . FFD7 call edi
00421A68 . 8B4C24 10 mov ecx, dword ptr [esp+10]
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 [esp+24]
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 [esp+24]
00421CD6 . 8935 10DE4D00 mov dword ptr [4DDE10], esi
00421CDC . E8 4FD40200 call 0044F130 ; 取假码
往后分析没有定位到算法部分,也没找到关键地方。
就采用另一种方法定位,我们在字符串信息里可以找到:“宽网mp3转换录音器 共享版 v3.80 未注册”。
定位到如下代码:
00413630 . FF15 F8C84800 call dword ptr [<&USER32.GetWindowRec>;
00413636 . A1 10DE4D00 mov eax, dword ptr [4DDE10]
0041363B . C705 F80C4C00>mov dword ptr [4C0CF8], 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 [ebp]
004356ED . 8BCD mov ecx, ebp
004356EF . FF90 CC000000 call dword ptr [eax+CC]
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 [esi+1500]
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 [4DDE10], 7B
00435AFE . /74 38 je short 00435B38
最后一行的跳转代码可以跳过提示的对话框,但是没找到修改一处代码就可以使16处都跳过,只好一一修改了,还请高手在此指点指点。就分析到这里吧,因为不懂算法,就没分析算法。有不对的地方多多指教
另外在冰糖葫芦论坛看到lmg7005大牛发了完美破解的图片,不知道是采用的什么方法,我破解的怎么有的地方程序错误,还希望指点指点。希望有人写个算法分析学习学习。
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢! |
免费评分
-
查看全部评分
|