飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2690|回复: 0

【WAKU申请加入破文1】P2P TV Recorder注册算法分析

[复制链接]

该用户从未签到

发表于 2006-8-25 16:21:29 | 显示全部楼层 |阅读模式
【破文标题】【WAKU申请加入破文1】P2P TV Recorder注册算法分析
【破文作者】WAKU
【作者邮箱】[email protected]
【作者主页】
破解工具】PEID OD
【破解平台】XP SP2
【软件名称】P2P TV Recorder
【软件大小】
【原版下载http://www.pprecorder.com/cn/download.htm
【保护方式】Aspack壳
【软件简介】一个可以录制网络电视的软件,功能强大,使用方便
------------------------------------------------------------------------
      最近有点懒,玩游戏过多,开学了得收收心,拿个软件研究一下:)随手拿来一期大众软件,看到介绍的这个软件,正好有时候也能用就下来试试.
      软件运行就会弹出注册提示,要求输入用户名,邮箱和注册码,随便填了一个点确定....嗯没反应.用PEID查一下,ASPACK的壳,找一个AspackDie脱掉.再查,是用Delphi写的,那好用Dede来分析一下,点Procedures在ClassName中看到左面有TRegistraWin,这个就对应着注册窗口.双击右面的ButtonOKClick就可跳到点确定后的代码段了.关于如何用Dede找到关键点请参照CCDebuger大大的动画:
     http://bbs.pediy.com/showthread.php?s=&threadid=19907
      把关键地址记下是004EE4D0,用OD载入Ctrl+G输入004EE4D0,确定后下断,F9运行,用CTRL+F9跳过异常(有可能OD会崩溃,多试几次).出现注册窗口,随便输入点确定,果然断下来了,高兴:)开始分析吧:
      
  004EE4D0   .  55            push    ebp                                ;这就是Dede找到的关键点
  004EE4D1   .  8BEC          mov     ebp, esp
  004EE4D3   .  B9 09000000   mov     ecx, 9
  004EE4D8   >  6A 00         push    0
  004EE4DA   .  6A 00         push    0
  004EE4DC   .  49            dec     ecx
  004EE4DD   .^ 75 F9         jnz     short 004EE4D8
  004EE4DF   .  51            push    ecx
  004EE4E0   .  8945 FC       mov     [ebp-4], eax
  004EE4E3   .  33C0          xor     eax, eax
  004EE4E5   .  55            push    ebp
  004EE4E6   .  68 16E84E00   push    004EE816
  004EE4EB   .  64:FF30       push    dword ptr fs:[eax]
  004EE4EE   .  64:8920       mov     fs:[eax], esp
  004EE4F1   .  8D55 F4       lea     edx, [ebp-C]
  004EE4F4   .  8B45 FC       mov     eax, [ebp-4]
  004EE4F7   .  8B80 08030000 mov     eax, [eax+308]
  004EE4FD   .  E8 16C0F6FF   call    0045A518
  004EE502   .  8B45 F4       mov     eax, [ebp-C]                     ;  EAX出现注册码
  004EE505   .  50            push    eax
  004EE506   .  8D55 E8       lea     edx, [ebp-18]
  004EE509   .  8B45 FC       mov     eax, [ebp-4]
  004EE50C   .  8B80 F8020000 mov     eax, [eax+2F8]
  004EE512   .  E8 01C0F6FF   call    0045A518
  004EE517   .  8B45 E8       mov     eax, [ebp-18]                    ;  EAX出现用户名
  004EE51A   .  8D55 EC       lea     edx, [ebp-14]
  004EE51D   .  E8 72ACF1FF   call    00409194
  004EE522   .  FF75 EC       push    dword ptr [ebp-14]
  004EE525   .  68 2CE84E00   push    004EE82C
  004EE52A   .  8D55 E0       lea     edx, [ebp-20]
  004EE52D   .  8B45 FC       mov     eax, [ebp-4]
  004EE530   .  8B80 00030000 mov     eax, [eax+300]
  004EE536   .  E8 DDBFF6FF   call    0045A518
  004EE53B   .  8B45 E0       mov     eax, [ebp-20]                    ;  EAX出现邮箱
  004EE53E   .  8D55 E4       lea     edx, [ebp-1C]
  004EE541   .  E8 4EACF1FF   call    00409194                         ;  跟进后看了几眼估计是验证邮箱合法
  004EE546   .  FF75 E4       push    dword ptr [ebp-1C]
  004EE549   .  8D45 F0       lea     eax, [ebp-10]
  004EE54C   .  BA 03000000   mov     edx, 3
  004EE551   .  E8 4A67F1FF   call    00404CA0
  004EE556   .  8B45 F0       mov     eax, [ebp-10]
  004EE559   .  5A            pop     edx
  004EE55A   .  E8 9DD70200   call    0051BCFC                         ;  验证函数
  004EE55F   .  84C0          test    al, al
  004EE561      0F84 22020000 je      004EE789                         ;  跳了就完了
  
          上面有很多CALL,我大部分都跟进去了,凭我超强的第六感...感觉和验证没什么关系,就不管了.最后三句的CALL、TEST和JE构成了"生或死,这是一个经典的验证".还等啥啊,跟进CALL看看:
         
  0051BCFC   $  55            push    ebp
  0051BCFD   .  8BEC          mov     ebp, esp
  0051BCFF   .  B9 0A000000   mov     ecx, 0A
  0051BD04   >  6A 00         push    0
  0051BD06   .  6A 00         push    0
  0051BD08   .  49            dec     ecx
  0051BD09   .^ 75 F9         jnz     short 0051BD04
  0051BD0B   .  51            push    ecx
  0051BD0C   .  53            push    ebx
  0051BD0D   .  56            push    esi
  0051BD0E   .  57            push    edi
  0051BD0F   .  8955 FC       mov     [ebp-4], edx                     ;  [ebp-4]放注册码
  0051BD12   .  8B45 FC       mov     eax, [ebp-4]
  0051BD15   .  E8 AE90EEFF   call    00404DC8
  0051BD1A   .  33C0          xor     eax, eax
  0051BD1C   .  55            push    ebp
  0051BD1D   .  68 D3BF5100   push    0051BFD3
  0051BD22   .  64:FF30       push    dword ptr fs:[eax]
  0051BD25   .  64:8920       mov     fs:[eax], esp
  0051BD28   .  33C0          xor     eax, eax
  0051BD2A   .  55            push    ebp
  0051BD2B   .  68 9FBF5100   push    0051BF9F
  0051BD30   .  64:FF30       push    dword ptr fs:[eax]
  0051BD33   .  64:8920       mov     fs:[eax], esp
  0051BD36   .  33C0          xor     eax, eax
  0051BD38   .  55            push    ebp
  0051BD39   .  68 7ABF5100   push    0051BF7A
  0051BD3E   .  64:FF30       push    dword ptr fs:[eax]
  0051BD41   .  64:8920       mov     fs:[eax], esp
  0051BD44   .  8D45 F4       lea     eax, [ebp-C]
  0051BD47   .  50            push    eax
  0051BD48   .  B9 02000000   mov     ecx, 2
  0051BD4D   .  BA 01000000   mov     edx, 1
  0051BD52   .  8B45 FC       mov     eax, [ebp-4]                    
  0051BD55   .  E8 DE90EEFF   call    00404E38
  0051BD5A   .  8B45 F4       mov     eax, [ebp-C]                     ;  注册码前两位
  0051BD5D   .  BA ECBF5100   mov     edx, 0051BFEC                    ;  ASCII "10"
  0051BD62   .  E8 BD8FEEFF   call    00404D24                               ;  注册码前两位和10比较
  0051BD67   .  0F85 BA000000 jnz     0051BE27                         ;  不是10则跳
  
         
  0051BE27   > \8D45 CC       lea     eax, [ebp-34]                    ;  不是10开头跳到这
  0051BE2A   .  50            push    eax
  0051BE2B   .  B9 01000000   mov     ecx, 1
  0051BE30   .  BA 01000000   mov     edx, 1
  0051BE35   .  8B45 FC       mov     eax, [ebp-4]
  0051BE38   .  E8 FB8FEEFF   call    00404E38
  0051BE3D   .  8B45 CC       mov     eax, [ebp-34]                    ;  注册码第一位
  0051BE40   .  BA 10C05100   mov     edx, 0051C010                    ;  EDX总是指向4
  0051BE45   .  E8 DA8EEEFF   call    <比较EAX和EDX指向的内容>
  0051BE4A   .  0F85 94000000 jnz     0051BEE4                         ;  注册码不是4开头则跳
  
          51BE45 CALL的标签是我跟进后分析得到的,当知道某一CALL的具体作用时,可用SHIFT+;输入标签,这样代码就很容易读懂了.具体方法请参http://bbs.pediy.com/showthread.php?s=&threadid=30743
          上面的CALL比较注册码是不是以4开头.用OD往下看看,发现有P2PTVRecorder和P2PTVRecorderSiteLicense两个字符串,而这两个字符串所在的代码段大同小异.最后的跳转正好跳过P2PTVRecorder的部分,看来注册码以4开头是团队版,而不是4开头则就是个人版的.咱来看看团队版吧:
         
  0051BE50   .  8D45 C8       lea     eax, [ebp-38]
  0051BE53   .  50            push    eax
  0051BE54   .  B9 01000000   mov     ecx, 1
  0051BE59   .  BA 01000000   mov     edx, 1
  0051BE5E   .  8B45 FC       mov     eax, [ebp-4]                     ;  EAX出现注册码
  0051BE61   .  E8 D28FEEFF   call    00404E38
  0051BE66   .  8B45 C8       mov     eax, [ebp-38]
  0051BE69   .  E8 46D7EEFF   call    004095B4
  0051BE6E   .  8BD8          mov     ebx, eax
  0051BE70   .  8D45 F8       lea     eax, [ebp-8]
  0051BE73   .  50            push    eax
  0051BE74   .  8BCB          mov     ecx, ebx
  0051BE76   .  BA 02000000   mov     edx, 2
  0051BE7B   .  8B45 FC       mov     eax, [ebp-4]
  0051BE7E   .  E8 B58FEEFF   call    00404E38                         ;  取注册码第二位开始,长度由第一位表示的子串到EBP-8
  0051BE83   .  8D45 C0       lea     eax, [ebp-40]
  0051BE86   .  B9 1CC05100   mov     ecx, 0051C01C                    ;  ASCII "P2PTVRecorderSiteLicense"
  0051BE8B   .  8B55 F8       mov     edx, [ebp-8]
  0051BE8E   .  E8 998DEEFF   call    00404C2C                         ;  合并子串和P2PTVRecorderSiteLicense
  0051BE93   .  8B45 C0       mov     eax, [ebp-40]
  0051BE96   .  8D55 D8       lea     edx, [ebp-28]
  0051BE99   .  E8 3222FDFF   call    004EE0D0                               ;  这个CALL很关键
  0051BE9E   .  8D45 D8       lea     eax, [ebp-28]
  0051BEA1   .  8D55 C4       lea     edx, [ebp-3C]
  0051BEA4   .  E8 9B22FDFF   call    004EE144                         ;  数据转移
  0051BEA9   .  8B45 C4       mov     eax, [ebp-3C]
  0051BEAC   .  50            push    eax
  0051BEAD   .  8D45 BC       lea     eax, [ebp-44]
  0051BEB0   .  50            push    eax
  0051BEB1   .  8B45 FC       mov     eax, [ebp-4]
  0051BEB4   .  E8 278DEEFF   call    00404BE0                         ;  获得注册码的长度
  0051BEB9   .  8BC8          mov     ecx, eax
  0051BEBB   .  8D43 01       lea     eax, [ebx+1]
  0051BEBE   .  2BC8          sub     ecx, eax
  0051BEC0   .  8D53 02       lea     edx, [ebx+2]
  0051BEC3   .  8B45 FC       mov     eax, [ebp-4]
  0051BEC6   .  E8 6D8FEEFF   call    00404E38
  0051BECB   .  8B55 BC       mov     edx, [ebp-44]
  0051BECE   .  58            pop     eax
  0051BECF   .  E8 508EEEFF   call    <比较EAX和EDX指向的内容>
  0051BED4   .  75 07         jnz     short 0051BEDD                        ; 跳了就完了
  
          上面的CALL有的需要跟进去看看,有的从返回结果和内存变化大体能猜出来是干什么用的,比如那个取子串和合并的CALL.51BEA4的CALL很复杂,CALL里还有很多CALL,我们一层层跟进,最后发现CALL到了这里:
         
  004EDFA8  /$  C700 01234567 mov     dword ptr [eax], 67452301
  004EDFAE  |.  C740 04 89ABC>mov     dword ptr [eax+4], EFCDAB89
  004EDFB5  |.  C740 08 FEDCB>mov     dword ptr [eax+8], 98BADCFE
  004EDFBC  |.  C740 0C 76543>mov     dword ptr [eax+C], 10325476
  004EDFC3  |.  33D2          xor     edx, edx
  004EDFC5  |.  8950 10       mov     [eax+10], edx
  004EDFC8  |.  33D2          xor     edx, edx
  004EDFCA  |.  8950 14       mov     [eax+14], edx
  004EDFCD  |.  83C0 18       add     eax, 18
  004EDFD0  |.  BA 40000000   mov     edx, 40
  004EDFD5  |.  E8 469DF1FF   call    00407D20
  004EDFDA  \.  C3            retn
  
          很熟悉的常数吧,再结合上面合并的字符串最后终于弄清了注册算法:
          设注册码前N位为a1,a2...an,从a2到an正好为a1个数(比如43210,3555,288都符合),取a2...an子串和P2PTVRecorderSiteLicense合并为新串,然后用MD5算出来的HASH值为注册码的后32位(小写).如43210,取3210和P2PTVRecorderSiteLicense合并为3210P2PTVRecorderSiteLicense,经过MD5计算为444bf3ff802599a2148aab0652f0e9af,则注册码即为43210444bf3ff802599a2148aab0652f0e9af.
          而个人版的注册码不能是4开头,合并的时候是与P2PTVRecorder合并,其他一样
          31239f2354ac66278536dbdbb642dfbc4fa0就是一个个人版的注册码.
         
         
          完.
------------------------------------------------------------------------
  1)对于Delphi写的程序用Dede先分析一下
  2)算法再复杂也是人写的,数据再多也只是在内存和寄存器中,所以耐着性子仔细分析肯定会有结果
  3)成功需要胆大心细,再加上一点运气
------------------------------------------------------------------------
【版权声明】本文原创于PYG论坛,转载请注明作者并保持文章的完整, 谢谢!
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表