通过机器码获得注册码的完整方案转贴过来留着看看样本.docx

上传人:b****3 文档编号:1189808 上传时间:2022-10-18 格式:DOCX 页数:11 大小:21.96KB
下载 相关 举报
通过机器码获得注册码的完整方案转贴过来留着看看样本.docx_第1页
第1页 / 共11页
通过机器码获得注册码的完整方案转贴过来留着看看样本.docx_第2页
第2页 / 共11页
通过机器码获得注册码的完整方案转贴过来留着看看样本.docx_第3页
第3页 / 共11页
通过机器码获得注册码的完整方案转贴过来留着看看样本.docx_第4页
第4页 / 共11页
通过机器码获得注册码的完整方案转贴过来留着看看样本.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

通过机器码获得注册码的完整方案转贴过来留着看看样本.docx

《通过机器码获得注册码的完整方案转贴过来留着看看样本.docx》由会员分享,可在线阅读,更多相关《通过机器码获得注册码的完整方案转贴过来留着看看样本.docx(11页珍藏版)》请在冰豆网上搜索。

通过机器码获得注册码的完整方案转贴过来留着看看样本.docx

通过机器码获得注册码的完整方案转贴过来留着看看样本

经过机器码获得注册码的完整方案(转贴过来,留着看看)

想加密自己的软件,看过一些软件的作法,思路如下:

1、用户安装后,得出本机的机器码(硬盘的序列号,不想用网卡,因为很多机器没有网

卡)。

生成机器码代码

2、用户将该机器码EMAIL给我,我用该机器码生成一个注册码,发送给用户。

注册码生成

代码

3、用户在程序中输入该注册码,程序逆算该注册码,与机器码核对,查看是否相符。

注册

码逆算、核对代码,

4、如果用户安装后没有得到注册码,在N天后部分功能不可用。

不要太容易被改(虽然说

安装后也只有少部份功能能用)。

时限功能代码,

zw84611(-12-223:

8)

functionGetHDNumber(Drv:

String):

DWORD;//得到硬盘序列号

var

VolumeSerialNumber:

DWORD;

MaximumComponentLength:

DWORD;

FileSystemFlags:

DWORD;

begin

ifDrv[Length(Drv)]=':

'thenDrv:

=Drv+'\';

GetVolumeInformation(pChar(Drv),

nil,

0,

@VolumeSerialNumber,

MaximumComponentLength,

FileSystemFlags,

nil,

0);

Result:

=(VolumeSerialNumber);

end;

functionSerial(Num:

DWORD):

string;//这个号码是用户给你生成注册码的,它经过对硬盘序列号编码而来。

varsNum:

string;inChar:

array[1..4]ofchar;

begin

Num:

=Numxor;

sNum:

=inttostr(Num);

inChar[1]:

=char(((integer(sNum[1])+integer(sNum[2]))mod5)+integer('a'));

inChar[2]:

=char(((integer(sNum[3])+integer(sNum[4]))mod5)+integer('a'));

inChar[3]:

=char(((integer(sNum[5])+integer(sNum[6]))mod5)+integer('a'));

inChar[4]:

=char(((integer(sNum[7])+integer(sNum[8])+integer(sNum[9]))mod5)+integer('a'));

insert(inChar[1],sNum,1);

insert(inChar[4],sNum,3);

insert(inChar[2],sNum,5);

insert(inChar[3],sNum,9);

Result:

=sNum;

end;

functionencode(License:

string):

string;

varstr,sNum:

string;number:

dword;byte,byte1:

array[1..4]ofdword;

inChar:

array[1..3]ofchar;

begin

str:

=license;

delete(str,1,1);

delete(str,2,1);

delete(str,3,1);

delete(str,6,1);

number:

=strtoint64(str);

number:

=notnumber;

number:

=numberxor$;

byte[1]:

=(numberand$0ff000000)shr24;

byte[2]:

=(numberand$0ff0000)shr16;

byte[3]:

=(numberand$0ff00)shr8;

byte[4]:

=(numberand$0ff);

byte1[1]:

=((byte[1]and$0c0)+(byte[2]and$0c0)shr2)+((byte[3]and$0c0)shr4)+((byte[4]and$0c0)shr6);

byte1[2]:

=((byte[1]and$30)shl2)+(byte[2]and$30)+((byte[3]and$30)shr2)+((byte[4]and$30)shr4);

byte1[3]:

=((byte[1]and$0c)shl4)+((byte[2]and$0c)shl2)+(byte[3]and$0c)+((byte[4]and$0c)shr2);

byte1[4]:

=((byte[1]and$03)shl6)+((byte[2]and$03)shl4)+((byte[3]and$03)shl2)+(byte[4]and$03);

number:

=((byte1[1])shl24)+((byte1[2])shl16)

+((byte1[3])shl8)+(byte1[4]);

byte[1]:

=((numberand$0ff000000)shr24);//右移24位

byte[2]:

=((numberand$0ff0000)shr16);

byte[3]:

=((numberand$0ff00)shr8);

byte[4]:

=(numberand$0ff);

byte[1]:

=(((byte[1]and$f0))shr4)+(((byte[1]and$0f))shl4);

byte[2]:

=(((byte[2]and$f0))shr4)+(((byte[2]and$0f))shl4);

byte[3]:

=(((byte[3]and$f0))shr4)+(((byte[3]and$0f))shl4);

byte[4]:

=(((byte[4]and$f0))shr4)+(((byte[4]and$0f))shl4);

number:

=((byte[2])shl24)+((byte[1])shl16)

+((byte[4])shl8)+(byte[3]);

sNum:

=inttostr(Number);

inChar[1]:

=char(((integer(sNum[1])+integer(sNum[2]))mod5)+integer('a'));

inChar[2]:

=char(((integer(sNum[3])+integer(sNum[4]))mod5)+integer('a'));

inChar[3]:

=char(((integer(sNum[5])+integer(sNum[6]))mod5)+integer('a'));

insert(inChar[1],sNum,1);

insert(inChar[2],sNum,5);

insert(inChar[3],sNum,9);

result:

=sNum;

end;

functiondecode(code:

string):

dword;

varstr:

string;number:

dword;byte,byte1:

array[1..4]ofdword;

begin

str:

=code;

delete(str,1,1);

delete(str,4,1);

delete(str,7,1);

number:

=strtoint64(str);

byte[1]:

=(numberand$0ff000000)shr24;

byte[2]:

=(numberand$0ff0000)shr16;

byte[3]:

=(numberand$0ff00)shr8;

byte[4]:

=(numberand$0ff);

////0123-->1032

byte[1]:

=(((byte[1]and$f0))shr4)+(((byte[1]and$0f))shl4);

byte[2]:

=(((byte[2]and$f0))shr4)+(((byte[2]and$0f))shl4);

byte[3]:

=(((byte[3]and$f0))shr4)+(((byte[3]and$0f))shl4);

byte[4]:

=(((byte[4]and$f0))shr4)+(((byte[4]and$0f))shl4);

number:

=((byte[2])shl24)+((byte[1])shl16)

+((byte[4])shl8)+(byte[3]);

byte[1]:

=((numberand$0ff000000)shr24);//右移24位

byte[2]:

=((numberand$0ff0000)shr16);

byte[3]:

=((numberand$0ff00)shr8);

byte[4]:

=(numberand$0ff);

byte1[1]:

=(byte[1]and$0c0)+((byte[2]and$0c0)shr2)+((byte[3]and$0c

oceanwave(-12-37:

28)

谢先!

试试看,能够后马上开贴给分。

妙兔无花(-12-37:

41)

sxd781017(-12-37:

50)

good!

oceanwave(-12-38:

1)

tozw84611:

试了你的代码后,有几个问题请教:

1、用GetHDNumber取得硬盘序列号后,用Serial生成注册码。

那encode和decode如何用呢?

2、如何将serial逆算成为硬盘序列号与原序列号相核对?

3、Serial函数中第一行的应该就是一个加密转换的常量吧?

还有inChar的Index

值?

oceanwave(-12-38:

35)

看了一篇这方面的文章,是VC++的,不过思路一样

youth[dfw](-12-38:

37)

1、利用RSA算法

2、在功能函数中进行校验

3、多处进行校验

4、利用线程、消息、延时

5、监测软件关键点,防止强行跳过

、、、

飘摇客(-12-49:

25)

可行,使用GUID,放在注册表中,同时把这个GUID发回给你,你能够使用这个进行注册码和注册码验证。

获得GUID,

usesactivex;

var

guid:

TGUID;

CoCreateGUID(guid);

ShowMessage(GuidToString(guid));

yczjs(-12-410:

19)

用SoftSentry加密软件搞定

Delphi园地

飘摇客(-12-413:

40)

其实任何的加密基本上都能被破解,这里给你一个思路。

1、用户第一次运行软件后,生成一个GUID,保存在注册表中,另外存储在文件中或者写入系统已有的文件尾部。

此为机器码,让用户发回,如果用户在注册表中删除了,就从文件中读取GUID,然后写入注册表。

当然

应该还需用户发回用户的相关信息,保证在重新安装机器时能向你索回注册码;

2、根据此GUID写一个验证序列号的过程(软件中);

3、写一个注册机,根据用户邮寄回的GUID得到注册

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1