-
-
[原创]环球卫星网络电视 V9.1 简单算法分析 + VB注册机
-
2005-6-23 22:46
15375
-
[原创]环球卫星网络电视 V9.1 简单算法分析 + VB注册机
【破文标题】:环球卫星网络电视 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
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界