MP4-RM转换专家豪华版2009算法不完全分析
【破文标题】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:,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:
00406377 .8B40 F8 mov eax,dword ptr ds:
0040637A .83F8 13 cmp eax,13 ;注册名=19位
0040637D .0F85 92010000 jnz MP4_Conv.00406515 ;不是19位则跳死
00406383 .8B4E 5C mov ecx,dword ptr ds: ;读入假码
00406386 .8379 F8 13 cmp dword ptr ds:,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:
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:
004063A7 .C74424 6C 00000000 mov dword ptr ss:,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:
004063BF .8AD8 mov bl,al
004063C1 .896C24 6C mov dword ptr ss:,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:
004063EB .64:890D 00000000 mov dword ptr fs:,ecx
004063F2 .83C4 60 add esp,60
004063F5 .C3 retn
004063F6 >8D4C24 28 lea ecx,dword ptr ss:
004063FA .E8 F14B0000 call MP4_Conv.0040AFF0
004063FF .8D4424 3C lea eax,dword ptr ss:
00406403 .C74424 68 01000000 mov dword ptr ss:,1
0040640B .50 push eax
0040640C .E8 6F4A0000 call MP4_Conv.0040AE80
00406411 .8B46 60 mov eax,dword ptr ds: ;注册名->eax
00406414 .83C4 04 add esp,4
00406417 .8D4C24 48 lea ecx,dword ptr ss:
0040641B .50 push eax
0040641C .E8 EF900000 call MP4_Conv.0040F510
00406421 .8B46 5C mov eax,dword ptr ds: ;假码->eax
00406424 .8D4C24 54 lea ecx,dword ptr ss:
00406428 .50 push eax
00406429 .E8 E2900000 call MP4_Conv.0040F510 ;检测注册名假码是同一个call
0040642E .8D4C24 28 lea ecx,dword ptr ss:
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:
找到关键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:,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:
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: ;|
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: ;固定字符串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: ;注册名->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:,byte ptr ds: ;比较前三位
0040B3F0 |.5F pop edi
0040B3F1 |.5E pop esi
0040B3F2 |.75 66 jnz short MP4_Conv.0040B45A ;不等则跳
0040B3F4 |.8D4C24 08 lea ecx,dword ptr ss:
0040B3F8 |.E8 33400000 call MP4_Conv.0040F430
0040B3FD |.8D4C24 08 lea ecx,dword ptr ss:
0040B401 |.C74424 1C 00000000 mov dword ptr ss:,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:
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:
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:
0040B20D |.50 push eax
0040B20E |.64:8925 00000000 mov dword ptr fs:,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:
0040B223 |.E8 886C0000 call MP4_Conv.00411EB0
0040B228 |.6A 00 push 0
0040B22A |.8D4C24 40 lea ecx,dword ptr ss:
0040B22E |.C78424 B8000000 00>mov dword ptr ss:,0
0040B239 |.E8 42760000 call MP4_Conv.00412880 ;MD5初始常数
0040B23E |.8B7E 24 mov edi,dword ptr ds: ;注册名->edi
0040B241 |.8D4E 20 lea ecx,dword ptr ds:
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: ; |
0040B255 |.E8 76760000 call MP4_Conv.004128D0 ; \MP4_Conv.004128D0
0040B25A |.8D4C24 3C lea ecx,dword ptr ss: ;F(注册名)->ascii入栈
0040B25E |.E8 2D770000 call MP4_Conv.00412990 ;求MD5
0040B263 |.8B08 mov ecx,dword ptr ds: ;Md5码第一段
0040B265 |.894C24 1C mov dword ptr ss:,ecx ;搬运
0040B269 |.8B50 04 mov edx,dword ptr ds:
0040B26C |.895424 20 mov dword ptr ss:,edx
0040B270 |.8B48 08 mov ecx,dword ptr ds:
0040B273 |.894C24 24 mov dword ptr ss:,ecx
0040B277 |.8D4C24 3C lea ecx,dword ptr ss:
0040B27B |.8B50 0C mov edx,dword ptr ds:
0040B27E |.8B46 04 mov eax,dword ptr ds: ;4次
0040B281 |.50 push eax ;设置第二次计算常数初始值固定值000820BF
0040B282 |.895424 2C mov dword ptr ss:,edx
0040B286 |.E8 F5750000 call MP4_Conv.00412880 ;///设置第3次计算所用常数
0040B28B |.33C0 xor eax,eax
0040B28D |>8B4C04 1C /mov ecx,dword ptr ss:
0040B291 |.83C0 04 |add eax,4
0040B294 |.F7D1 |not ecx
0040B296 |.894C04 08 |mov dword ptr ss:,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:
0040B2A5 |>33D2 /xor edx,edx
0040B2A7 |.33C0 |xor eax,eax
0040B2A9 |.8A5434 0C |mov dl,byte ptr ss: ;取反后第一组第一位
0040B2AD |.8A07 |mov al,byte ptr ds: ;取反前第4组第4位
0040B2AF |.0FAFD0 |imul edx,eax ;逆序相乘
0040B2B2 |.8D4C24 08 |lea ecx,dword ptr ss:
0040B2B6 |.6A 04 |push 4 ; /Arg2 = 00000004
0040B2B8 |.51 |push ecx ; |Arg1
0040B2B9 |.8D4C24 44 |lea ecx,dword ptr ss: ; |
0040B2BD |.895424 10 |mov dword ptr ss:,edx ; |
0040B2C1 |.E8 0A760000 |call MP4_Conv.004128D0 ; \此call把乘积作为字符串第二次MD5计算,计算所得四组数字作为常数做第三次Md5计算
0040B2C6 |.8A5424 08 |mov dl,byte ptr ss:
0040B2CA |.46 |inc esi
0040B2CB |.8817 |mov byte ptr ds:,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:
0040B2D7 |.E8 B4760000 call MP4_Conv.00412990 ;第三次Md5计算
0040B2DC |.8B08 mov ecx,dword ptr ds: ;第一段
0040B2DE |.894C24 2C mov dword ptr ss:,ecx ;搬运
0040B2E2 |.8B50 04 mov edx,dword ptr ds:
0040B2E5 |.895424 30 mov dword ptr ss:,edx
0040B2E9 |.8B48 08 mov ecx,dword ptr ds:
0040B2EC |.894C24 34 mov dword ptr ss:,ecx
0040B2F0 |.8B50 0C mov edx,dword ptr ds:
0040B2F3 |.33C0 xor eax,eax
0040B2F5 |.895424 38 mov dword ptr ss:,edx ;搬运完毕
0040B2F9 |>8B4C04 2C mov ecx,dword ptr ss: ;第三次 MD5 第一段设为Rb-1
0040B2FD |.8B7404 1C mov esi,dword ptr ss: ;变幻后的注册名MD5第一段,设为Ra-1
0040B301 |.33CE xor ecx,esi ;Ra-1 xor Rb-1设为Rc-1
0040B303 |.894C04 0C mov dword ptr ss:,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: ;Rc-3
0040B313 |.8B4424 18 mov eax,dword ptr ss: ;Rc-4
0040B317 |.0FAF4C24 10 imul ecx,dword ptr ss: ;Rc-3*Rc-2
0040B31C |.0FAF4424 0C imul eax,dword ptr ss: ;Rc-4*Rc-1
0040B321 |.894C24 10 mov dword ptr ss:,ecx ;Rc-3*Rc-2放入Rc-2
0040B325 |.8B5424 12 mov edx,dword ptr ss:
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:
0040B33D |.894424 10 mov dword ptr ss:,eax ;Rc-4*Rc-1放入Rc-1
0040B341 |.51 push ecx ;Rc-2前半段入栈
0040B342 |.8B4C24 16 mov ecx,dword ptr ss:
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,R4,R4,R4。R4*R4&R4*R4得到R5
把R5分为四段,中间加"-"即为注册码
附注:第二次第三次MD5计算某没有演算,因此只是追踪过程中的推测,所以也无从写注册机.
其实还是爆破比较合适,广告窗口,看了就烦!注册完了还有注册按钮!无聊!
删除软件目录中的ur.rtbt即可重新注册。
一组可用的注册码:
P2_Zaas_PYG_2009/10
D4D2-9D11-1BDE-06CF
------------------------------------------------------------------------
【版权声明】
无有
[ 本帖最后由 zaas 于 2009-10-9 19:30 编辑 ] 我记得好像有网验的/:017 不过很简单哦 /:L明天我找找看。。嘿嘿嘿嘿 新手,有点看不懂 好文章,分析得比较详细/鼓掌~~! 国产机来电归属地文件 学习一下。 先学习一下为考试奠定基础。 爆破 找注册码 简单软件应该都可以,初学者,
难就是做个注册机,这个好象得学会编程吧 这个软件很好,给我同学看下,他在用/:014
页:
[1]
2