【破解日期】 2006年5月17日
【破解作者】 houhq
【使用工具】 DeDe,OD
【破解平台】 Windows XP
【软件名称】 P2P TV 记录器 1.53(26-1-2006)
【下载地址】 http://www.pprecorder.com/cn/download.htm
【软件简介】 P2P TV 记录器是目前唯一能记录PPLive, PPStream, Coolstreaming, SopCast等各种P2P网络电视的工具, 能方便地保存各种P2P网络电视到你的硬盘,实现离线观看网络电视.该工具也提供监视磁盘使用情况,保护你的硬盘.
【加壳方式】 ASPack 2.12
【破解声明】
这是本人第一次独立破解,送给更菜的菜鸟:).其中采用了MD5算法,记得前几天玩个CrackMe进还不知道MD5为何物,跟进去差点吐血而亡。没想到写这篇文档,花的时间比破解的时间还要长,希望能得到大家的支持。只为学习交流,对由此产生的任何后果不负责。
一点问题:
System.@LStrCopy;等注释,都是参照DeDe里的反编译内容手动加到OD里的,不知道还有没有更帅点的办法:)
--------------------------------------------------------------------------------
【破解内容】
--------------------------------------------------------------------------------
1).先用工具脱壳,运行软件,弹出注册窗口,随便输入用户名、电子邮件、注册码,点击“确定”没反应。
2).用DeDe反编译,在Procedures中的类TregistraWin中有如下一行
ButtOkClick 004EE4B8 0012
知道点“确定”后执行004EE4B8处代码,在此处下断。
3)
004EE4B8 . 55 push ebp
004EE4B9 . 8BEC mov ebp, esp
004EE4BB . B9 09000000 mov ecx, 9
004EE4C0 > 6A 00 push 0
004EE4C2 . 6A 00 push 0
004EE4C4 . 49 dec ecx
004EE4C5 .^ 75 F9 jnz short 004EE4C0
004EE4C7 . 51 push ecx
004EE4C8 . 8945 FC mov [ebp-4], eax
004EE4CB . 33C0 xor eax, eax
004EE4CD . 55 push ebp
004EE4CE . 68 C4E74E00 push 004EE7C4
004EE4D3 . 64:FF30 push dword ptr fs:[eax]
004EE4D6 . 64:8920 mov fs:[eax], esp
004EE4D9 . 8D55 F4 lea edx, [ebp-C]
004EE4DC . 8B45 FC mov eax, [ebp-4]
004EE4DF . 8B80 08030000 mov eax, [eax+308]
004EE4E5 . E8 2EC0F6FF call 0045A518
004EE4EA . 8B45 F4 mov eax, [ebp-C] ; 取得注册码
004EE4ED . 50 push eax
004EE4EE . 8D55 E8 lea edx, [ebp-18]
004EE4F1 . 8B45 FC mov eax, [ebp-4]
004EE4F4 . 8B80 F8020000 mov eax, [eax+2F8]
004EE4FA . E8 19C0F6FF call 0045A518
004EE4FF . 8B45 E8 mov eax, [ebp-18]
004EE502 . 8D55 EC lea edx, [ebp-14]
004EE505 . E8 8AACF1FF call 00409194
004EE50A . FF75 EC push dword ptr [ebp-14] ; 取得用户名
004EE50D . 68 DCE74E00 push 004EE7DC
004EE512 . 8D55 E0 lea edx, [ebp-20]
004EE515 . 8B45 FC mov eax, [ebp-4]
004EE518 . 8B80 00030000 mov eax, [eax+300]
004EE51E . E8 F5BFF6FF call 0045A518
004EE523 . 8B45 E0 mov eax, [ebp-20] ; 取得电子邮件
004EE526 . 8D55 E4 lea edx, [ebp-1C]
004EE529 . E8 66ACF1FF call 00409194
004EE52E . FF75 E4 push dword ptr [ebp-1C]
004EE531 . 8D45 F0 lea eax, [ebp-10]
004EE534 . BA 03000000 mov edx, 3
004EE539 . E8 6267F1FF call 00404CA0
004EE53E . 8B45 F0 mov eax, [ebp-10] ; 转成(用户名:电子邮件)形式
004EE541 . 5A pop edx
004EE542 . E8 098E0200 call 00517350 ; 算法关键调用
004EE547 . 84C0 test al, al
“call 00517350”为算法关键,之后就判断al,如不为0,则注册成功,进行写注册表。跟进00517350
4)
00517350 $ 55 push ebp
00517351 . 8BEC mov ebp, esp
00517353 . B9 0A000000 mov ecx, 0A
00517358 > 6A 00 push 0
0051735A . 6A 00 push 0
0051735C . 49 dec ecx
0051735D .^ 75 F9 jnz short 00517358
0051735F . 51 push ecx
00517360 . 53 push ebx
00517361 . 56 push esi
00517362 . 57 push edi
00517363 . 8955 FC mov [ebp-4], edx
00517366 . 8B45 FC mov eax, [ebp-4]
00517369 . E8 5ADAEEFF call 00404DC8 ; System.@LStrAddRef
0051736E . 33C0 xor eax, eax
00517370 . 55 push ebp
00517371 . 68 27765100 push 00517627
00517376 . 64:FF30 push dword ptr fs:[eax]
00517379 . 64:8920 mov fs:[eax], esp
0051737C . 33C0 xor eax, eax
0051737E . 55 push ebp
0051737F . 68 F3755100 push 005175F3
00517384 . 64:FF30 push dword ptr fs:[eax]
00517387 . 64:8920 mov fs:[eax], esp
0051738A . 33C0 xor eax, eax
0051738C . 55 push ebp
0051738D . 68 CE755100 push 005175CE
00517392 . 64:FF30 push dword ptr fs:[eax]
00517395 . 64:8920 mov fs:[eax], esp
00517398 . 8D45 F4 lea eax, [ebp-C]
0051739B . 50 push eax
0051739C . B9 02000000 mov ecx, 2
005173A1 . BA 01000000 mov edx, 1
005173A6 . 8B45 FC mov eax, [ebp-4]
005173A9 . E8 8ADAEEFF call 00404E38 ; System.@LStrCopy;()
005173AE . 8B45 F4 mov eax, [ebp-C] ; 取注册码前两位
005173B1 . BA 40765100 mov edx, 00517640 ; ASCII "10"
005173B6 . E8 69D9EEFF call 00404D24 ; System.@LStrCmp;
005173BB . 0F85 BA000000 jnz 0051747B ; 注册码前两位与10比较
005173C1 . 8D45 F0 lea eax, [ebp-10]
005173C4 . 50 push eax
005173C5 . B9 01000000 mov ecx, 1
005173CA . BA 03000000 mov edx, 3
005173CF . 8B45 FC mov eax, [ebp-4]
005173D2 . E8 61DAEEFF call 00404E38 ; System.@LStrCopy;
005173D7 . 8B45 F0 mov eax, [ebp-10]
005173DA . E8 D521EFFF call 004095B4 ; SysUtils.StrToInt
005173DF . 8BD8 mov ebx, eax ; 取注册码第三位并转成整数,设为m
005173E1 . 8D45 F8 lea eax, [ebp-8]
005173E4 . 50 push eax
005173E5 . 8BCB mov ecx, ebx
005173E7 . BA 04000000 mov edx, 4
005173EC . 8B45 FC mov eax, [ebp-4] ; System.@LStrCopy;
005173EF . E8 44DAEEFF call 00404E38 ; 从注册码第三位后取m个数,设为xxx
005173F4 . 8D45 EC lea eax, [ebp-14]
005173F7 . 50 push eax
005173F8 . 8D7B 03 lea edi, [ebx+3]
005173FB . 47 inc edi ; edi = m + 4
005173FC . 8BD7 mov edx, edi
005173FE . B9 01000000 mov ecx, 1
00517403 . 8B45 FC mov eax, [ebp-4]
00517406 . E8 2DDAEEFF call 00404E38 ; System.@LStrCopy;
0051740B . 8B45 EC mov eax, [ebp-14]
0051740E . E8 A121EFFF call 004095B4 ; StrToInt(AnsiString):Integer;
00517413 . 8BF0 mov esi, eax ; 注册码第m+4位的值,设为n,esi = n
00517415 . 8D45 D4 lea eax, [ebp-2C]
00517418 . B9 4C765100 mov ecx, 0051764C ; ASCII "P2PTVRecorder"
0051741D . 8B55 F8 mov edx, [ebp-8]
00517420 . E8 07D8EEFF call 00404C2C ; System.@LStrCat3;
00517425 . 8B45 D4 mov eax, [ebp-2C] ; 组成“xxxP2PTVRecorder”形式
00517428 . 8D55 D8 lea edx, [ebp-28]
0051742B . E8 886CFDFF call 004EE0B8 ; MD5算法
00517430 . 8D45 D8 lea eax, [ebp-28]
00517433 . 8D55 E8 lea edx, [ebp-18]
00517436 . E8 F16CFDFF call 004EE12C ; MD5算法
0051743B . 8B45 E8 mov eax, [ebp-18] ; “xxxP2PTVRecorder”经MD5后的值,设为AAA
0051743E . 50 push eax
0051743F . 8D45 D0 lea eax, [ebp-30]
00517442 . 50 push eax
00517443 . 8B45 FC mov eax, [ebp-4]
00517446 . E8 95D7EEFF call 00404BE0 ; 注册码长度
0051744B . 8BC8 mov ecx, eax
0051744D . 8D43 03 lea eax, [ebx+3]
00517450 . 03C6 add eax, esi
00517452 . 40 inc eax
00517453 . 2BC8 sub ecx, eax
00517455 . 8BD7 mov edx, edi
00517457 . 03D6 add edx, esi
00517459 . 42 inc edx ; edx = esi+edi+1 = m+n+5
0051745A . 8B45 FC mov eax, [ebp-4] ; System.@LStrCopy;
0051745D . E8 D6D9EEFF call 00404E38
00517462 . 8B55 D0 mov edx, [ebp-30] ; 取注册码m+n+5位后的所有字符,设为BBB
00517465 . 58 pop eax
00517466 . E8 B9D8EEFF call 00404D24 ; System.@LStrCmp;
0051746B . 75 07 jnz short 00517474 ; AAA与BBB相比较
0051746D . B3 01 mov bl, 1
0051746F . E9 50010000 jmp 005175C4
00517474 > 33DB xor ebx, ebx
00517476 . E9 49010000 jmp 005175C4
以上为注册码为"10"开头的情况(Single License),如注册码101234560eba356b54c59193734b34c2a5d1584f
先取第三位1记为m,即m=1,取第三位后m个数,得到"2",与P2PTVRecorder连接成2P2PTVRecorder,算2P2PTVRecorder的MD5值为0eba356b54c59193734b34c2a5d1584f,记为AAA,取第m+4(=5)位数3,记为n,取m+n+4(=8)位后所有字串记为BBB,AAA与BBB相等,注册码正确。
还有以"4"开头的(Site License),既非"10"也非"4"开头(Single License)两种情况,方法类似,不再赘述,供大家练习。
提供这两种情况下的注册码,注册机就懒得写了。
412347a6a77a9b0bdfd995837ce1a2a2e7769
5123454ddb2042a6f7abb9ffc01081f4cb756b
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!