首页
论坛
课程
招聘
[原创]环球卫星网络电视 V9.1 简单算法分析 + VB注册机
2005-6-23 22:46 14743

[原创]环球卫星网络电视 V9.1 简单算法分析 + VB注册机

2005-6-23 22:46
14743
【破文标题】:环球卫星网络电视 V9.1 简单算法分析 + VB注册机

【破文作者】:KuNgBiM[DFCG]

【作者邮箱】:gb_1227@163.com

【软件名称】:环球电影电视剧 1.13

【软件大小】:2210 KB

【软件类别】:国产软件 / 共享版 / 网络电视

【整理时间】:2005-06-22

【下载地址】:http://www4.skycn.com/soft/19480.html

【软件简介】:可以收看国内外上百个精彩电视频道(包括中央电视台所有频道、内地省市优秀电视台;港澳台地区:凤凰中文、凤凰资讯、阳光卫视、星空卫视、华娱卫视、美亚电影、卫视电影、台湾华视、东森新闻、中天新闻等知名电视频道;体育频道:UBC直播、ESPN、卫视体育、CCTV-5和地方有名体育频道,可以收看各赛事直播;国外频道: ABC、BBC、CNN、法国时尚 、沙特阿拉伯电视台、阿拉伯电视台等著名电视台);免月租,免解码器,免安装费,永久使用。

【保护方式】:注册码+功能限制

【编译语言】:Borland Delphi 6.0 - 7.0

【调试环境】:WinXP、PEiD、W32Dasm、Ollydbg

【破解日期】:2005-06-23

【破解目的】:研究算法分析

【作者声明】:初学Crack,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

―――――――――――――――――――――――――――――――――
【破解过程】:

侦测:用PEiD查壳,无壳,Borland Delphi 6.0 - 7.0 编译。

试探:运行主程序注册,输入试炼码,确认!程序提示:" 注册码无效。"

初步下药:使出法宝,用W32Dasm进行静态反汇编,查找" 注册码无效。"字符串,结果找到004CC880处,确定断点应下在004CC84B处。

对症下药:Ollydbg载入主程序,来到 004CC84B 处下断,F9运行,输入试炼信息:

***** 试炼信息 ******

机器码:BD258095
注册码:78787878

*********************

点击确定后OD断下:(这里我采用的是W32Dasm的反汇编信息,比较干净清楚!)

:004CC84B 8D55F0                  lea edx, dword ptr [ebp-10]
:004CC84E 8B45FC                  mov eax, dword ptr [ebp-04]
:004CC851 8B8000030000            mov eax, dword ptr [eax+00000300]
:004CC857 E8BC67F7FF              call 00443018                         //取试炼码
:004CC85C 837DF000                cmp dword ptr [ebp-10], 00000000      //比较注册码是否为0
:004CC860 741E                    je 004CC880                           //等于0则跳死
:004CC862 8D55EC                  lea edx, dword ptr [ebp-14]
:004CC865 8B45FC                  mov eax, dword ptr [ebp-04]           //向eax赋值1885C3C
:004CC868 8B8000030000            mov eax, dword ptr [eax+00000300]     //向eax赋值1887690
:004CC86E E8A567F7FF              call 00443018
:004CC873 8B45EC                  mov eax, dword ptr [ebp-14]           //试炼码赋值给eax
:004CC876 E8657BF3FF              call 004043E0
:004CC87B 83F808                  cmp eax, 00000008                     //试炼码长度是否为8
:004CC87E 7E30                    jle 004CC8B0                          //大于小于则不跳,继续走向下面的“深渊”!

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004CC860(C)
|

* Possible StringData Ref from Code Obj ->" 注册码无效。"
                                  |
:004CC880 B878CB4C00              mov eax, 004CCB78
:004CC885 E85E23F6FF              call 0042EBE8
:004CC88A 8B45FC                  mov eax, dword ptr [ebp-04]
:004CC88D 8B8000030000            mov eax, dword ptr [eax+00000300]
:004CC893 33D2                    xor edx, edx
:004CC895 E8AE67F7FF              call 00443048
:004CC89A 8B45FC                  mov eax, dword ptr [ebp-04]
:004CC89D 8B8000030000            mov eax, dword ptr [eax+00000300]
:004CC8A3 8B10                    mov edx, dword ptr [eax]
:004CC8A5 FF92C4000000            call dword ptr [edx+000000C4]
:004CC8AB E923020000              jmp 004CCAD3

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004CC87E(C)
|
:004CC8B0 8D45E4                  lea eax, dword ptr [ebp-1C]           //注册码位数等于8
:004CC8B3 50                      push eax
:004CC8B4 8D55E0                  lea edx, dword ptr [ebp-20]
:004CC8B7 8B45FC                  mov eax, dword ptr [ebp-04]
:004CC8BA 8B8008030000            mov eax, dword ptr [eax+00000308]
:004CC8C0 E85367F7FF              call 00443018                         //取机器码
:004CC8C5 8B45E0                  mov eax, dword ptr [ebp-20]           //机器码入eax(ASCII "BD258095")
:004CC8C8 B906000000              mov ecx, 00000006                     //分配eax大小为6位
:004CC8CD BA01000000              mov edx, 00000001
:004CC8D2 E8697DF3FF              call 00404640                         //取机器码前6位
:004CC8D7 8B4DE4                  mov ecx, dword ptr [ebp-1C]           //机器码前6位入ecx(ASCII "BD2580")
:004CC8DA 8D45E8                  lea eax, dword ptr [ebp-18]
:004CC8DD BA90CB4C00              mov edx, 004CCB90                     //规定edx为16进制数(ASCII "0x")
:004CC8E2 E8457BF3FF              call 0040442C
:004CC8E7 8B45E8                  mov eax, dword ptr [ebp-18]           //机器码前6位变为16进制数(ASCII "0xBD2580")
:004CC8EA E879C5F3FF              call 00408E68
:004CC8EF 8BF0                    mov esi, eax                          //将机器码前6位的字符串转换成16进制后存放在esi中
:004CC8F1 33C0                    xor eax, eax                          //异或清空
:004CC8F3 55                      push ebp
:004CC8F4 688ACA4C00              push 004CCA8A
:004CC8F9 64FF30                  push dword ptr fs:[eax]
:004CC8FC 648920                  mov dword ptr fs:[eax], esp
:004CC8FF 8D55DC                  lea edx, dword ptr [ebp-24]
:004CC902 8B45FC                  mov eax, dword ptr [ebp-04]
:004CC905 8B8000030000            mov eax, dword ptr [eax+00000300]
:004CC90B E80867F7FF              call 00443018
:004CC910 8B45DC                  mov eax, dword ptr [ebp-24]           //假码赋值给EAX (ASCII "78787878")
:004CC913 E850C5F3FF              call 00408E68                         //将假码转为16进制
:004CC918 8BD8                    mov ebx, eax                          //假码赋值给ebx (eax=04B23526,ebx=01887D84)
:004CC91A 8BC3                    mov eax, ebx                          //ebx又赋值给eax(ebx=04B23526  eax=04B23526)
:004CC91C 2BC6                    sub eax, esi                          //eax=eax-esi   (esi=00BD2580,eax=04B23526)
:004CC91E 3B0550144E00            cmp eax, dword ptr [004E1450]         //比较eax与004E1450中的值是否相等(常量值=C0F1E)
:004CC924 7459                    je 004CC97F                           //EAX值若不等于C0F1E,就继续走向下面的“深渊”!
                                                                        //(C0F1E十进制数就是790302,/* 好象是作者生日*/)

* Possible StringData Ref from Code Obj ->" 你输入的注册码 "
                                  |
:004CC926 689CCB4C00              push 004CCB9C
:004CC92B 8D55D4                  lea edx, dword ptr [ebp-2C]
:004CC92E 8B45FC                  mov eax, dword ptr [ebp-04]
:004CC931 8B8000030000            mov eax, dword ptr [eax+00000300]
:004CC937 E8DC66F7FF              call 00443018
:004CC93C FF75D4                  push [ebp-2C]

* Possible StringData Ref from Code Obj ->" 不正确。"
                                  |
:004CC93F 68B8CB4C00              push 004CCBB8
:004CC944 8D45D8                  lea eax, dword ptr [ebp-28]
:004CC947 BA03000000              mov edx, 00000003
:004CC94C E84F7BF3FF              call 004044A0
:004CC951 8B45D8                  mov eax, dword ptr [ebp-28]
:004CC954 E88F22F6FF              call 0042EBE8
:004CC959 8B45FC                  mov eax, dword ptr [ebp-04]
:004CC95C 8B8000030000            mov eax, dword ptr [eax+00000300]
:004CC962 33D2                    xor edx, edx
:004CC964 E8DF66F7FF              call 00443048
:004CC969 8B45FC                  mov eax, dword ptr [ebp-04]
:004CC96C 8B8000030000            mov eax, dword ptr [eax+00000300]
:004CC972 8B10                    mov edx, dword ptr [eax]
:004CC974 FF92C4000000            call dword ptr [edx+000000C4]
:004CC97A E901010000              jmp 004CCA80
.........
-------------------------------------------------------------------------------------------------------------------------
【算法总结】

注册验证非常简单:

注册码 = 十进制(机器码前6位+ C0F1E)

=======================
【VB6算法注册机源码】

Private Sub Text1_Change()
Dim jqm, z, a, b, m As String
x = Text1.Text
If x = "" Then           '未输入的机器码则不计算
Else
If Len(x) = 8 Then       '输入的机器码等于8位后才开始计算
a = "C0F1E"
z = Mid(x, 1, 6)
m = Format("&h" + z)
b = Format("&h" + a)
zcm = Val(m) + Val(b)
Text2.Text = zcm
End If
End If
End Sub

=======================

注册信息:

机器码:BD258095
注册码:13186206

--------------------------------------------------------------------------

(本文完)

版权所有(C)2005 KuNgBiM[DFCG]         Copyright (C) 2005 KuNgBiM[DFCG]

--------------------------------------------------------------------------
          Cracked BY KuNgBiM[DFCG]

                2005-06-23

                21:34:18 PM

[招生]科锐逆向工程师培训46期预科班将于 2023年02月09日 正式开班

收藏
点赞0
打赏
分享
最新回复 (17)
雪    币: 210
活跃值: 活跃值 (56)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ww990 活跃值 1 2005-6-24 07:38
2
0
要求加精
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
炸弹宝宝 活跃值 2005-6-24 08:38
3
0
赞成2楼意见,KuNgBiM兄的破文如此规范,看雪论坛的精华帖,或可据此制定其中一项标准了,就叫做破文格式化标准,呵呵。
    KuNgBiM兄的文章,不单看着舒服,也确实既有学习价值,参考价值,又有实用价值。还有一点,你的文章出炉速度够快,我才没来几天,已然看到你的两篇大做,如果不是你手底下有个破解班子,那你可太勤奋了,看来你志向不小,呵呵
    可笑我,文章还未看,先来一通溢美之词,呵呵,但愿不是言过其实
雪    币: 151
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:1010 )
在线值:
发帖
回帖
粉丝
liyangsj 活跃值 25 2005-6-24 11:37
4
0
支持!!!
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
k99992002 活跃值 2005-6-24 13:19
5
0
支持下!
雪    币: 200
活跃值: 活跃值 (197)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
KuNgBiM 活跃值 66 2005-6-24 16:10
6
0
最初由 炸弹宝宝 发布
赞成2楼意见,KuNgBiM兄的破文如此规范,看雪论坛的精华帖,或可据此制定其中一项标准了,就叫做破文格式化标准,呵呵。
KuNgBiM兄的文章,不单看着舒服,也确实既有学习价值,参考价值,又有实用价值。还有一点,你的文章出炉速度够快,我才没来几天,已然看到你的两篇大做,如果不是你手底下有个破解班子,那你可太勤奋了,看来你志向不小,呵呵
可笑我,文章还未看,先来一通溢美之词,呵呵,但愿不是言过其实


破解班子??? 这个我到没有,就是有时间罢了,最近学校考完试了,就等放假咯
雪    币: 292
活跃值: 活跃值 (303)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mylee 活跃值 2005-6-24 18:30
7
0
很不错,鼓励一下。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
sunray 活跃值 2005-6-24 22:02
8
0
比较爱看算法分析~~~~
雪    币: 100
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
点解 活跃值 2005-6-25 01:39
9
0
支持一下~@~!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
grx 活跃值 2005-6-26 00:00
10
0
最初由 KuNgBiM 发布
=======================
【VB6算法注册机源码】

Private Sub Text1_Change()
Dim jqm, z, a, b, m As String
x = Text1.Text
If x = "" Then '未输入的机器码则不计算
Else
If Len(x) = 8 Then '输入的机器码等于8位后才开始计算
a = "C0F1E"
z = Mid(x, 1, 6)
m = Format("&h" + z)
b = Format("&h" + a)
zcm = Val(m) + Val(b)
Text2.Text = zcm
End If
End If
End Sub

=======================


拜托了,VB6可不是这样写的。给人一个坏透了的VB6印象。
雪    币: 200
活跃值: 活跃值 (197)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
KuNgBiM 活跃值 66 2005-6-26 18:11
11
0
最初由 grx 发布


拜托了,VB6可不是这样写的。给人一个坏透了的VB6印象。


代码精简了的,新手不易看懂,对于象你这样的鸟人,你爱杂写杂写。。。
雪    币: 433
活跃值: 活跃值 (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lionking 活跃值 2005-6-26 21:44
12
0
慢慢学习了,谢谢楼主。
雪    币: 212
活跃值: 活跃值 (12)
能力值: ( LV13,RANK:320 )
在线值:
发帖
回帖
粉丝
qfejj 活跃值 7 2005-6-27 12:04
13
0
我也不喜欢别人指点有关代码风格的问题。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
adson 活跃值 2005-6-27 12:57
14
0
注释非常详细到位,我等菜鸟之福啊!!!
雪    币: 285
活跃值: 活跃值 (11)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
小娃崽 活跃值 13 2005-6-30 23:59
15
0
我也认为代码不能写在Text1_Change()这个里面,具体我也没实践,感觉不能这样,你每往text里面输入字符,都产生change事件的,
但是这个If Len(x) = 8 Then 不知道起不起作用哈
我去实践一下咯
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
benladen 活跃值 2005-7-1 07:38
16
0
通俗易懂呀
雪    币: 200
活跃值: 活跃值 (197)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
KuNgBiM 活跃值 66 2005-7-1 22:29
17
0
最初由 小娃崽 发布
我也认为代码不能写在Text1_Change()这个里面,具体我也没实践,感觉不能这样,你每往text里面输入字符,都产生change事件的,
但是这个If Len(x) = 8 Then 不知道起不起作用哈
我去实践一下咯


to 小娃崽:

1.“Text1_Change()”我这样写是为了减免麻烦的Command_Chick()事件,达到一输入机器码就产生注册码的目的。

2.“If Len(x) = 8 Then ”是避免用户在输入机器码时,由于位数不合法产生的不正确注册码,这个事件是:当输入的机器码达到8位以后,才引发程序计算事件。
雪    币: 285
活跃值: 活跃值 (11)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
小娃崽 活跃值 13 2005-7-2 13:56
18
0
我已经看到变化了,就是text1里的字符变换了,text2的也跟着变换,我自己美化了一下,效果还不错.
不过那些汇编代码我可是看不懂的,以后应该可以吧
游客
登录 | 注册 方可回帖
返回