【破文标题】FastTV网络电视钻石版注册码追踪
【破文作者】云飘飘(梦湾)
【作者邮箱】
【作者主页】
【破解工具】PEiD OD DeDe
【破解平台】Win2000
【软件名称】FastTV网络电视[贵宾钻石版] 1.3.3.7
【软件大小】595 KB
【原版下载】http://86516.onlinedown.net/soft/44309.htm
【保护方式】一机一码 重启验证
【软件简介】 “FastTV网络电视”是目前最优良的一款播放全球卫星电视,热播电视剧,精典电影的共享软件。  CCTV-5,卫视体育,Goal-TV,NBA直播,足球直播,泰星UBC,各地市体育台等,电影台,电视剧频道,卫星电视节目,包括国内(中央,地方各省市卫星电视节目等),港澳台(凤凰卫视,华娱卫视,星空卫视,阳光卫视,[V]音乐台等),国外(CNN, NHK ABC,BBC,ESPN,TVB,韩国等)系列节目,一套“FastTV网络电视”尽可打尽!
------------------------------------------------------------------------
【破解过程】最近出了趟远门,好久没来冒泡,今天来凑凑热闹!哈哈......
 
在出这趟远门之前,我就下了个FastTV网络电视想破掉,可惜总是有心无力!今天干脆下了个最新版本(07年8月30日更新),
居然瞎猫撞上死老鼠了,于是有了下文!
 
安装软件后,用PEiD查壳,是这个弱壳ASPack 2.12 -> Alexey Solodovnikov!用ESP定律即可轻松搞定!
 
脱壳后再查,Borland Delphi 6.0 - 7.0。试一下注册,随便填,竟然没反应!有点麻烦......
 
用OD载入,在注册错误或成功处下断点,郁闷得很,断不下来!
 
想起了DeDe,专门对付Delphi及BC++的。用这个工具打开程序,在窗体栏中发现Tfm_reg,点点它,右侧窗口有:

代码:

    object Bt_ok: TSpeedButton
      Left = 344
      Top = 112
      Width = 81
      Height = 22
      Cursor = crHandPoint
      Hint = 验证注册码是否有效
      Caption = 注册认证
      Glyph.Data = {
        DE010000424DDE01000000000000760000002800000024000000120000000100
        0400000000006801000000000000000000001000000000000000000000000000
        80000080000000808000800000008000800080800000C0C0C000808080000000
        FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
        3333333333333333333333330000333333333333333333333333F33333333333
        00003333344333333333333333388F3333333333000033334224333333333333
        338338F3333333330000333422224333333333333833338F3333333300003342
        222224333333333383333338F3333333000034222A22224333333338F338F333
        8F33333300003222A3A2224333333338F3838F338F33333300003A2A333A2224
        33333338F83338F338F33333000033A33333A222433333338333338F338F3333
        0000333333333A222433333333333338F338F33300003333333333A222433333
        333333338F338F33000033333333333A222433333333333338F338F300003333
        33333333A222433333333333338F338F00003333333333333A22433333333333
        3338F38F000033333333333333A223333333333333338F830000333333333333
        333A333333333333333338330000333333333333333333333333333333333333
        0000}
      NumGlyphs = 2
      ParentShowHint = False
      ShowHint = True
      OnClick = Bt_okClick
    end

 
这无疑是【注册认证】按钮的相关信息。再查看【过程】 【事件】,在Bt_okClick的右边找到其RVA值为00510D40。
 
好了,到OD中在00510D40行下断点,运行程序(注意别忘了隐藏OD,这个程序好像反OD调试)后,来到注册窗口,输入用户名及注册码(最好做个记录),点击【注册认证】,程序断下来了。
 
只要断下来就行!程序怎么运算我们用不着太关心,先放一放吧......
 
采用超级字符串搜索,会有【标准版】、【vip版】、【钻石版】,找到相应的汇编代码行,然后顺藤摸瓜往上找找,都可以来到这个地方:
代码:

0050A935  |.  E8 A69DEFFF   call    004046E0
0050A93A  |.  83E8 0A       sub     eax, 0A                          ;  Switch (cases A..10)  注册类型分支
0050A93D  |.  74 62         je      short 0050A9A1                   ;  [标准版]  10
0050A93F  |.  83E8 02       sub     eax, 2
0050A942  |.  74 17         je      short 0050A95B                   ;  试用  12
0050A944  |.  83E8 02       sub     eax, 2
0050A947  |.  0F84 18010000 je      0050AA65                         ;  [vip版]  14
0050A94D  |.  83E8 02       sub     eax, 2
0050A950  |.  0F84 D3010000 je      0050AB29                         ;  [钻石版]  16
0050A956  |.  E9 A5030000   jmp     0050AD00                         ;  试用  其它数值

先仔细看看程序,顺藤摸瓜,各个跳转各有用途。在程序中,我已经加上了注释。这几种版本,当然数【钻石版】最讨人喜欢了!
 
好的,我们的目标就是【钻石版】,所以在0050A935这一行下断点,清除前面下的断点(过河拆桥了,^_^)。按一下F9,可可能还需要几次SHIFT+F9的协助,程序会停到这儿,把寄存器窗口的EAX值改成10(也就是十进制的16),单步往下走,好的,程序跳到这里来了:
代码:

0050AB29  |> \68 C0B15100   push    0051B1C0                         ;  Case 10 of switch 0050A93A
0050AB2E  |.  8D45 8C       lea     eax, dword ptr [ebp-74]
0050AB31  |.  50            push    eax
0050AB32  |.  B9 06000000   mov     ecx, 6                           ;  准备了=====^_^精彩好戏要上演了^_^=====
0050AB37  |.  BA 08000000   mov     edx, 8
0050AB3C  |.  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  密钥6e8174946990cb7174366caa8b452649
0050AB3F  |.  E8 FC9DEFFF   call    00404940                         ;  从第8位起连续取6个字符
0050AB44  |.  FF75 8C       push    dword ptr [ebp-74]               ;  46990c
0050AB47  |.  8D45 88       lea     eax, dword ptr [ebp-78]
0050AB4A  |.  50            push    eax
0050AB4B  |.  B9 07000000   mov     ecx, 7
0050AB50  |.  BA 12000000   mov     edx, 12
0050AB55  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0050AB58  |.  E8 E39DEFFF   call    00404940                          ;  从第18位起连续取7个字符
0050AB5D  |.  FF75 88       push    dword ptr [ebp-78]                ;  4366caa
0050AB60  |.  8D45 84       lea     eax, dword ptr [ebp-7C]
0050AB63  |.  50            push    eax
0050AB64  |.  B9 03000000   mov     ecx, 3
0050AB69  |.  BA 03000000   mov     edx, 3
0050AB6E  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0050AB71  |.  E8 CA9DEFFF   call    00404940                          ;  从第13位起连续取3个字符
0050AB76  |.  FF75 84       push    dword ptr [ebp-7C]                ;  817
0050AB79  |.  8D45 80       lea     eax, dword ptr [ebp-80]
0050AB7C  |.  50            push    eax
0050AB7D  |.  B9 03000000   mov     ecx, 3
0050AB82  |.  BA 0D000000   mov     edx, 0D
0050AB87  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0050AB8A  |.  E8 B19DEFFF   call    00404940                          ;  从第13位起连续取3个字符
0050AB8F  |.  FF75 80       push    dword ptr [ebp-80]                ;  cb7
0050AB92  |.  8D85 7CFFFFFF lea     eax, dword ptr [ebp-84]
0050AB98  |.  50            push    eax
0050AB99  |.  B9 05000000   mov     ecx, 5
0050AB9E  |.  BA 16000000   mov     edx, 16
0050ABA3  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0050ABA6  |.  E8 959DEFFF   call    00404940                          ;  从第22位起连续取5个字符
0050ABAB  |.  FFB5 7CFFFFFF push    dword ptr [ebp-84]                ;  caa8b
0050ABB1  |.  8D45 90       lea     eax, dword ptr [ebp-70]
0050ABB4  |.  BA 05000000   mov     edx, 5
0050ABB9  |.  E8 E29BEFFF   call    004047A0                          ;  将以上5部分串接起来
0050ABBE  |.  8B45 90       mov     eax, dword ptr [ebp-70]           ;  46990c4366caa817cb7caa8b
0050ABC1  |.  8D55 94       lea     edx, dword ptr [ebp-6C]
0050ABC4  |.  E8 732FF7FF   call    0047DB3C

 
看到我标的值了吧?!6e8174946990cb7174366caa8b452649,这个是正确注册码的种子,每个机器会不一样的,
取其中的5段,凑起来,就生成了46990c4366caa817cb7caa8b!
 
估计是正确的注册码,复制一下,启动程序(脱过壳的,或者未脱壳的都行),输入用户名(没忘吧)和现在的这串数字,程序没个提示就关了,太不友好了。程序采用的是重启验证。
 
重新启动程序,ok,顶端标题上出现了【钻石版】字样,大功告成了,偷着乐去吧......
------------------------------------------------------------------------
【破解总结】程序停在这里的时候,0050A93D行,一定要让eax变成十六进制的10,否则,就成不了[钻石版]!
第一次用DeDe,居然显其功效了,运气真好!!
其实做注册机也很简单,只要看懂了,就知道从何下手,小CASE而已,呵呵!!!
 
再次强调简要算法:
首先根据机器码和用户名生成注册码密钥; 6e8174946990cb7174366caa8b452649
然后从第 8位起连续取6个字符,                 46990c
  再从第18位起连续取7个字符,                           4366caa
    从第 3位起连续取3个字符,             817
    从第13位起连续取3个字符,                      cb7
    从第22位起连续取5个字符,                               caa8b
最后将以上5部分串接起来。              46990c4366caa817cb7caa8b
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!