宽带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大牛发了完美破解的图片,不知道是采用的什么方法,我破解的怎么有的地方程序错误,还希望指点指点。希望有人写个算法分析学习学习。
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢! 多谢了 期待更深入的分析学习 :lol
DUP2干什么用的哦
[ 本帖最后由 wgz001 于 2008-12-25 13:00 编辑 ]
回复 2# wgz001 的帖子
制作Patch或者Loader 的工具界面精美.:lol 原帖由 wgz001 于 2008-12-25 12:57 发表 http://www.52pojie.cn/images/common/back.gif
多谢了 期待更深入的分析学习 :lol
DUP2干什么用的哦
做补丁的工具。
常用来做loader。 多谢了 就是没看到楼主用用 :lol
所以 ....................
[ 本帖最后由 wgz001 于 2008-12-25 14:24 编辑 ] 在破文里没详细写,利用这个软件的二进制代码模糊搜索来查找功能相近得到代码 赞楼主。待兴致来时也下来研究研究。 看不懂哦 嘻嘻
页:
[1]