- UID
- 59317
注册时间2009-1-28
阅读权限40
最后登录1970-1-1
独步武林
TA的每日心情 | 无聊 2024-1-15 22:57 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
|
【破文标题】MP4-RM转换专家豪华版2009算法不完全分析
【破文作者】Zaas
【作者邮箱】[email protected]
【作者主页】
【破解工具】OD,MD5计算器
【破解平台】XP SP3
【软件名称】MP4-RM转换专家豪华版2009
【软件大小】12.3 MB
【原版下载】
【保护方式】注册码
【软件简介】
《MP4/RM全能视频转换专家豪华版2008》 是一款多格式转换软件。操作界面简单,用户第一次使用便可根据实际情况,顺利操作。
它可以把几乎所有流行的视频格式
如RM/RMVB/VOB/AVI/MPEG/DAT/VCD/SVCD/DVD/ASF/WMV/MPG 等视频文件转换为普通MP4机、MP4手机、PSP机、iPod或DVD影碟机等硬件支持的AVI、MP4、PMP、3GP格式。
PSP(PMP) :转换后的文件适合PSP机播放;
IPOD(MP4):转换后的文件适合APPLE iPod播放;
手机(MP4、3GP):转换后的文件适合各种支持MP4、3GP的手机播放;
AVI :转换后的文件适合各种支持DivX/XivD/MJpeg1/MJpeg2/H264编码的MP4机、手机、PDA播放
【破解声明】
------------------------------------------------------------------------
【破解过程】前几天见有人贴了这个软件的爆破过程,说对它的算法弄不懂。某对算法的知识仅仅来自于看的几篇破文,实践经验只有一次。某虽不才,但想试试看自己有没有这个能耐。(压根儿没想到这么复杂!!)
倒腾了一天,感慨良多。
第一,软件设计的怎样我没试过,但内置广告一箩筐。在软件的加密上不可谓不用心,一次有一次的变幻,加密,追到我兴趣全无,草草收场。
第二,花了那么多心思在加密上可最终注册码还是在堆栈中直接出现,前面那么多注册码的变幻措施又有什么意义。等于你把门锁的非常牢靠,可家当却放在门外。。。
对Md5不熟悉甚至可以说陌生,所以算法分析走马观花,只能算“不完全分析”,分析也许完全谬误,会让人误入歧途。初学的凑合着看看吧。
首先老一套,找字符串。来到
00406356 . 6A FF push -1
00406358 . 68 C86A4300 push MP4_Conv.00436AC8
0040635D . 50 push eax
0040635E . 64:8925 00000000 mov dword ptr fs:[0],esp
00406365 . 83EC 54 sub esp,54
00406368 . 55 push ebp
00406369 . 56 push esi
0040636A . 57 push edi
0040636B . 8BF1 mov esi,ecx
0040636D . 6A 01 push 1
0040636F . E8 CB610200 call MP4_Conv.0042C53F ; 读注册名、假码
00406374 . 8B46 60 mov eax,dword ptr ds:[esi+60]
00406377 . 8B40 F8 mov eax,dword ptr ds:[eax-8]
0040637A . 83F8 13 cmp eax,13 ; 注册名=19位
0040637D . 0F85 92010000 jnz MP4_Conv.00406515 ; 不是19位则跳死
00406383 . 8B4E 5C mov ecx,dword ptr ds:[esi+5C] ; 读入假码
00406386 . 8379 F8 13 cmp dword ptr ds:[ecx-8],13 ; 不是19位则跳死
0040638A . 0F85 85010000 jnz MP4_Conv.00406515
00406390 . 53 push ebx
00406391 . 68 D4754400 push MP4_Conv.004475D4 ; ASCII "\ur.rtbt"
00406396 . 8D5424 14 lea edx,dword ptr ss:[esp+14]
0040639A . 68 24E74400 push MP4_Conv.0044E724
0040639F . 52 push edx ; 看看有没有ur.rtbt这个文件
004063A0 . E8 47300200 call MP4_Conv.004293EC
004063A5 . 8B00 mov eax,dword ptr ds:[eax]
004063A7 . C74424 6C 00000000 mov dword ptr ss:[esp+6C],0
004063AF . 50 push eax
004063B0 . E8 6BB50000 call MP4_Conv.00411920
004063B5 . 83CD FF or ebp,FFFFFFFF
004063B8 . 83C4 04 add esp,4
004063BB . 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
004063BF . 8AD8 mov bl,al
004063C1 . 896C24 6C mov dword ptr ss:[esp+6C],ebp
004063C5 . E8 8D2D0200 call MP4_Conv.00429157 ; 你已经注册过了
004063CA . 84DB test bl,bl
004063CC . 5B pop ebx
004063CD . 74 27 je short MP4_Conv.004063F6
004063CF . 6A 00 push 0 ; /Arg3 = 00000000
004063D1 . 6A 00 push 0 ; |Arg2 = 00000000
004063D3 . 68 70764400 push MP4_Conv.00447670 ; |注册成功
004063D8 . E8 45A50200 call MP4_Conv.00430922 ; \MP4_Conv.00430922
004063DD . 8BCE mov ecx,esi
004063DF . E8 9C3E0200 call MP4_Conv.0042A280
004063E4 . 5F pop edi
004063E5 . 5E pop esi
004063E6 . 5D pop ebp
004063E7 . 8B4C24 54 mov ecx,dword ptr ss:[esp+54]
004063EB . 64:890D 00000000 mov dword ptr fs:[0],ecx
004063F2 . 83C4 60 add esp,60
004063F5 . C3 retn
004063F6 > 8D4C24 28 lea ecx,dword ptr ss:[esp+28]
004063FA . E8 F14B0000 call MP4_Conv.0040AFF0
004063FF . 8D4424 3C lea eax,dword ptr ss:[esp+3C]
00406403 . C74424 68 01000000 mov dword ptr ss:[esp+68],1
0040640B . 50 push eax
0040640C . E8 6F4A0000 call MP4_Conv.0040AE80
00406411 . 8B46 60 mov eax,dword ptr ds:[esi+60] ; 注册名->eax
00406414 . 83C4 04 add esp,4
00406417 . 8D4C24 48 lea ecx,dword ptr ss:[esp+48]
0040641B . 50 push eax
0040641C . E8 EF900000 call MP4_Conv.0040F510
00406421 . 8B46 5C mov eax,dword ptr ds:[esi+5C] ; 假码->eax
00406424 . 8D4C24 54 lea ecx,dword ptr ss:[esp+54]
00406428 . 50 push eax
00406429 . E8 E2900000 call MP4_Conv.0040F510 ; 检测注册名假码是同一个call
0040642E . 8D4C24 28 lea ecx,dword ptr ss:[esp+28]
00406432 . E8 594F0000 call MP4_Conv.0040B390 ; 关键call
00406437 . 84C0 test al,al
00406439 . 6A 00 push 0 ; /Arg3 = 00000000
0040643B . 6A 00 push 0 ; |Arg2 = 00000000
0040643D . 0F84 A2000000 je MP4_Conv.004064E5 ; |
00406443 . 68 70764400 push MP4_Conv.00447670 ; |注册成功
00406448 . E8 D5A40200 call MP4_Conv.00430922 ; \MP4_Conv.00430922
0040644D . 68 D4754400 push MP4_Conv.004475D4 ; ASCII "\ur.rtbt"
00406452 . 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
找到关键call,只有跟进了。
0040B396 |. 6A FF push -1
0040B398 |. 68 58724300 push MP4_Conv.00437258
0040B39D |. 50 push eax
0040B39E |. 64:8925 00000000 mov dword ptr fs:[0],esp
0040B3A5 |. 83EC 0C sub esp,0C
0040B3A8 |. 53 push ebx
0040B3A9 |. 8BD9 mov ebx,ecx
0040B3AB |. 55 push ebp
0040B3AC |. 8D6B 2C lea ebp,dword ptr ds:[ebx+2C]
0040B3AF |. 8BCD mov ecx,ebp
0040B3B1 |. E8 2A4A0000 call MP4_Conv.0040FDE0 ; 求长度的call
0040B3B6 |. 83F8 13 cmp eax,13 ; \
0040B3B9 |. 0F85 9B000000 jnz MP4_Conv.0040B45A ; |
0040B3BF |. 8D4B 20 lea ecx,dword ptr ds:[ebx+20] ; |
0040B3C2 |. E8 194A0000 call MP4_Conv.0040FDE0 ; 比较长度
0040B3C7 |. 83F8 13 cmp eax,13 ; |
0040B3CA |. 0F85 8A000000 jnz MP4_Conv.0040B45A ; /
0040B3D0 |. 8D4B 14 lea ecx,dword ptr ds:[ebx+14] ; 固定字符串948BE9E4EA29F95CA777FB7E50564FEA
0040B3D3 |. E8 084A0000 call MP4_Conv.0040FDE0 ; 求其长度
0040B3D8 |. 83F8 20 cmp eax,20 ; 32位
0040B3DB |. 75 7D jnz short MP4_Conv.0040B45A
0040B3DD |. 56 push esi
0040B3DE |. 57 push edi
0040B3DF |. 8B7B 24 mov edi,dword ptr ds:[ebx+24] ; 注册名->edx
0040B3E2 |. B9 03000000 mov ecx,3
0040B3E7 |. BE A8784400 mov esi,MP4_Conv.004478A8 ; ASCII "P2_"
0040B3EC |. 33C0 xor eax,eax
0040B3EE |. F3:A6 repe cmps byte ptr es:[edi],byte ptr ds:[esi] ; 比较前三位
0040B3F0 |. 5F pop edi
0040B3F1 |. 5E pop esi
0040B3F2 |. 75 66 jnz short MP4_Conv.0040B45A ; 不等则跳
0040B3F4 |. 8D4C24 08 lea ecx,dword ptr ss:[esp+8]
0040B3F8 |. E8 33400000 call MP4_Conv.0040F430
0040B3FD |. 8D4C24 08 lea ecx,dword ptr ss:[esp+8]
0040B401 |. C74424 1C 00000000 mov dword ptr ss:[esp+1C],0
0040B409 |. 51 push ecx ; /Arg1
0040B40A |. 8BCB mov ecx,ebx ; |
0040B40C |. E8 EFFDFFFF call MP4_Conv.0040B200 ; \关键call
0040B411 |. 8D4C24 08 lea ecx,dword ptr ss:[esp+8]
0040B415 |. E8 C6490000 call MP4_Conv.0040FDE0 ; 求注册码位数
0040B41A |. 85C0 test eax,eax
0040B41C |. 74 16 je short MP4_Conv.0040B434
0040B41E |. 8D5424 08 lea edx,dword ptr ss:[esp+8]
0040B422 |. 55 push ebp
0040B423 |. 52 push edx
0040B424 |. E8 C74B0000 call MP4_Conv.0040FFF0 ; 真假码比较
0040B429 |. 83C4 08 add esp,8
0040B42C |. 84C0 test al,al ; 比较标志位,爆破点
0040B42E |. 74 04 je short MP4_Conv.0040B434
又是关键call,继续进。。。
0040B200 /$ 6A FF push -1
0040B202 |. 68 38724300 push MP4_Conv.00437238 ; SE 句柄安装
0040B207 |. 64:A1 00000000 mov eax,dword ptr fs:[0]
0040B20D |. 50 push eax
0040B20E |. 64:8925 00000000 mov dword ptr fs:[0],esp
0040B215 |. 81EC A4000000 sub esp,0A4
0040B21B |. 56 push esi
0040B21C |. 8BF1 mov esi,ecx
0040B21E |. 57 push edi
0040B21F |. 8D4C24 3C lea ecx,dword ptr ss:[esp+3C]
0040B223 |. E8 886C0000 call MP4_Conv.00411EB0
0040B228 |. 6A 00 push 0
0040B22A |. 8D4C24 40 lea ecx,dword ptr ss:[esp+40]
0040B22E |. C78424 B8000000 00>mov dword ptr ss:[esp+B8],0
0040B239 |. E8 42760000 call MP4_Conv.00412880 ; MD5初始常数
0040B23E |. 8B7E 24 mov edi,dword ptr ds:[esi+24] ; 注册名->edi
0040B241 |. 8D4E 20 lea ecx,dword ptr ds:[esi+20]
0040B244 |. E8 974B0000 call MP4_Conv.0040FDE0 ; 又求一次长度
0040B249 |. 83E8 03 sub eax,3 ; 长度-3
0040B24C |. 83C7 03 add edi,3 ; 去掉前三位P2_
0040B24F |. 50 push eax ; /Arg2
0040B250 |. 57 push edi ; |Arg1
0040B251 |. 8D4C24 44 lea ecx,dword ptr ss:[esp+44] ; |
0040B255 |. E8 76760000 call MP4_Conv.004128D0 ; \MP4_Conv.004128D0
0040B25A |. 8D4C24 3C lea ecx,dword ptr ss:[esp+3C] ; F(注册名)->ascii入栈
0040B25E |. E8 2D770000 call MP4_Conv.00412990 ; 求MD5
0040B263 |. 8B08 mov ecx,dword ptr ds:[eax] ; Md5码第一段
0040B265 |. 894C24 1C mov dword ptr ss:[esp+1C],ecx ; 搬运
0040B269 |. 8B50 04 mov edx,dword ptr ds:[eax+4]
0040B26C |. 895424 20 mov dword ptr ss:[esp+20],edx
0040B270 |. 8B48 08 mov ecx,dword ptr ds:[eax+8]
0040B273 |. 894C24 24 mov dword ptr ss:[esp+24],ecx
0040B277 |. 8D4C24 3C lea ecx,dword ptr ss:[esp+3C]
0040B27B |. 8B50 0C mov edx,dword ptr ds:[eax+C]
0040B27E |. 8B46 04 mov eax,dword ptr ds:[esi+4] ; 4次
0040B281 |. 50 push eax ; 设置第二次计算常数初始值固定值000820BF
0040B282 |. 895424 2C mov dword ptr ss:[esp+2C],edx
0040B286 |. E8 F5750000 call MP4_Conv.00412880 ; ///设置第3次计算所用常数
0040B28B |. 33C0 xor eax,eax
0040B28D |> 8B4C04 1C /mov ecx,dword ptr ss:[esp+eax+1C]
0040B291 |. 83C0 04 |add eax,4
0040B294 |. F7D1 |not ecx
0040B296 |. 894C04 08 |mov dword ptr ss:[esp+eax+8],ecx ; 对MD5值每组取反,转存
0040B29A |. 83F8 10 |cmp eax,10
0040B29D |.^ 7C EE \jl short MP4_Conv.0040B28D
0040B29F |. 33F6 xor esi,esi
0040B2A1 |. 8D7C24 2B lea edi,dword ptr ss:[esp+2B]
0040B2A5 |> 33D2 /xor edx,edx
0040B2A7 |. 33C0 |xor eax,eax
0040B2A9 |. 8A5434 0C |mov dl,byte ptr ss:[esp+esi+C] ; 取反后第一组第一位
0040B2AD |. 8A07 |mov al,byte ptr ds:[edi] ; 取反前第4组第4位
0040B2AF |. 0FAFD0 |imul edx,eax ; 逆序相乘
0040B2B2 |. 8D4C24 08 |lea ecx,dword ptr ss:[esp+8]
0040B2B6 |. 6A 04 |push 4 ; /Arg2 = 00000004
0040B2B8 |. 51 |push ecx ; |Arg1
0040B2B9 |. 8D4C24 44 |lea ecx,dword ptr ss:[esp+44] ; |
0040B2BD |. 895424 10 |mov dword ptr ss:[esp+10],edx ; |
0040B2C1 |. E8 0A760000 |call MP4_Conv.004128D0 ; \此call把乘积作为字符串第二次MD5计算,计算所得四组数字作为常数做第三次Md5计算
0040B2C6 |. 8A5424 08 |mov dl,byte ptr ss:[esp+8]
0040B2CA |. 46 |inc esi
0040B2CB |. 8817 |mov byte ptr ds:[edi],dl ; 低位放入取反前第4组第4位
0040B2CD |. 4F |dec edi
0040B2CE |. 83FE 10 |cmp esi,10
0040B2D1 |.^ 72 D2 \jb short MP4_Conv.0040B2A5
0040B2D3 |. 8D4C24 3C lea ecx,dword ptr ss:[esp+3C]
0040B2D7 |. E8 B4760000 call MP4_Conv.00412990 ; 第三次Md5计算
0040B2DC |. 8B08 mov ecx,dword ptr ds:[eax] ; 第一段
0040B2DE |. 894C24 2C mov dword ptr ss:[esp+2C],ecx ; 搬运
0040B2E2 |. 8B50 04 mov edx,dword ptr ds:[eax+4]
0040B2E5 |. 895424 30 mov dword ptr ss:[esp+30],edx
0040B2E9 |. 8B48 08 mov ecx,dword ptr ds:[eax+8]
0040B2EC |. 894C24 34 mov dword ptr ss:[esp+34],ecx
0040B2F0 |. 8B50 0C mov edx,dword ptr ds:[eax+C]
0040B2F3 |. 33C0 xor eax,eax
0040B2F5 |. 895424 38 mov dword ptr ss:[esp+38],edx ; 搬运完毕
0040B2F9 |> 8B4C04 2C mov ecx,dword ptr ss:[esp+eax+2C] ; 第三次 MD5 第一段设为Rb-1
0040B2FD |. 8B7404 1C mov esi,dword ptr ss:[esp+eax+1C] ; 变幻后的注册名MD5第一段,设为Ra-1
0040B301 |. 33CE xor ecx,esi ; Ra-1 xor Rb-1设为Rc-1
0040B303 |. 894C04 0C mov dword ptr ss:[esp+eax+C],ecx ; 放回
0040B307 |. 83C0 04 add eax,4
0040B30A |. 83F8 10 cmp eax,10
0040B30D |.^ 7C EA jl short MP4_Conv.0040B2F9 ; 依次求2,3,4段
0040B30F |. 8B4C24 14 mov ecx,dword ptr ss:[esp+14] ; Rc-3
0040B313 |. 8B4424 18 mov eax,dword ptr ss:[esp+18] ; Rc-4
0040B317 |. 0FAF4C24 10 imul ecx,dword ptr ss:[esp+10] ; Rc-3*Rc-2
0040B31C |. 0FAF4424 0C imul eax,dword ptr ss:[esp+C] ; Rc-4*Rc-1
0040B321 |. 894C24 10 mov dword ptr ss:[esp+10],ecx ; Rc-3*Rc-2放入Rc-2
0040B325 |. 8B5424 12 mov edx,dword ptr ss:[esp+12]
0040B329 |. 81E2 FFFF0000 and edx,0FFFF ; Rc-2后半段放入edx
0040B32F |. 81E1 FFFF0000 and ecx,0FFFF ; Rc-2前半段放入ecx
0040B335 |. 52 push edx ; Rc-2后半段入栈
0040B336 |. 8B9424 C0000000 mov edx,dword ptr ss:[esp+C0]
0040B33D |. 894424 10 mov dword ptr ss:[esp+10],eax ; Rc-4*Rc-1放入Rc-1
0040B341 |. 51 push ecx ; Rc-2前半段入栈
0040B342 |. 8B4C24 16 mov ecx,dword ptr ss:[esp+16]
0040B346 |. 25 FFFF0000 and eax,0FFFF ; Rc-1前半段放入Eax
0040B34B |. 81E1 FFFF0000 and ecx,0FFFF ; Rc-1后半段放入Ecx
0040B351 |. 51 push ecx ; Rc-1后半段入栈
0040B352 |. 50 push eax ; Rc-1前半段入栈
0040B353 |. 68 94784400 push MP4_Conv.00447894 ; ASCII "%.4X-%.4X-%.4X-%.4X"
0040B358 |. 52 push edx
0040B359 |. E8 C2430000 call MP4_Conv.0040F720 ; 转换成XXXX-XXXX-XXXX-XXXX格式
0040B35E |. 83C4 18 add esp,18 ; 注册码即Rc-1&Rc-2 四个字符一组中间加“-”
------------------------------------------------------------------------
【破解总结】首先看注册名前三位是不是“P2_”
然后计算去掉前三位后的16位注册名的MD5作为R1
接着对R1取反,和原MD5值逆序相乘,乘积做第二次MD5计算,乘积的低位作为注册码的中间过程值R2
把第二次MD5计算所得MD5值分四组作为MD5常数(替换默认常数01234567,89abcdef,fedcba98,76543210)进行变形MD5计算,得到R3
接下来对R3和R2做Xor计算得到R4
把R4分为四段,分别为R4[1],R4[2],R4[3],R4[4]。R4[1]*R4[4]&R4[2]*R4[3]得到R5
把R5分为四段,中间加"-"即为注册码
附注:第二次第三次MD5计算某没有演算,因此只是追踪过程中的推测,所以也无从写注册机.
其实还是爆破比较合适,广告窗口,看了就烦!注册完了还有注册按钮!无聊!
删除软件目录中的ur.rtbt即可重新注册。
一组可用的注册码:
P2_Zaas_PYG_2009/10
D4D2-9D11-1BDE-06CF
------------------------------------------------------------------------
【版权声明】
无有
[ 本帖最后由 zaas 于 2009-10-9 19:30 编辑 ] |
|