通过机器码获得注册码的完整方案转贴过来留着看看样本Word文档格式.docx
- 文档编号:14108585
- 上传时间:2022-10-18
- 格式:DOCX
- 页数:11
- 大小:21.96KB
通过机器码获得注册码的完整方案转贴过来留着看看样本Word文档格式.docx
《通过机器码获得注册码的完整方案转贴过来留着看看样本Word文档格式.docx》由会员分享,可在线阅读,更多相关《通过机器码获得注册码的完整方案转贴过来留着看看样本Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
8)
functionGetHDNumber(Drv:
String):
DWORD;
//得到硬盘序列号
var
VolumeSerialNumber:
MaximumComponentLength:
FileSystemFlags:
begin
ifDrv[Length(Drv)]='
:
'
thenDrv:
=Drv+'
\'
;
GetVolumeInformation(pChar(Drv),
nil,
0,
@VolumeSerialNumber,
MaximumComponentLength,
FileSystemFlags,
0);
Result:
=(VolumeSerialNumber);
end;
functionSerial(Num:
DWORD):
string;
//这个号码是用户给你生成注册码的,它经过对硬盘序列号编码而来。
varsNum:
inChar:
array[1..4]ofchar;
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('
inChar[3]:
=char(((integer(sNum[5])+integer(sNum[6]))mod5)+integer('
inChar[4]:
=char(((integer(sNum[7])+integer(sNum[8])+integer(sNum[9]))mod5)+integer('
insert(inChar[1],sNum,1);
insert(inChar[4],sNum,3);
insert(inChar[2],sNum,5);
insert(inChar[3],sNum,9);
=sNum;
functionencode(License:
string):
varstr,sNum:
number:
dword;
byte,byte1:
array[1..4]ofdword;
inChar:
array[1..3]ofchar;
str:
=license;
delete(str,1,1);
delete(str,2,1);
delete(str,3,1);
delete(str,6,1);
number:
=strtoint64(str);
=notnumber;
=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);
=((byte1[1])shl24)+((byte1[2])shl16)
+((byte1[3])shl8)+(byte1[4]);
=((numberand$0ff000000)shr24);
//右移24位
=((numberand$0ff0000)shr16);
=((numberand$0ff00)shr8);
=(((byte[1]and$f0))shr4)+(((byte[1]and$0f))shl4);
=(((byte[2]and$f0))shr4)+(((byte[2]and$0f))shl4);
=(((byte[3]and$f0))shr4)+(((byte[3]and$0f))shl4);
=(((byte[4]and$f0))shr4)+(((byte[4]and$0f))shl4);
=((byte[2])shl24)+((byte[1])shl16)
+((byte[4])shl8)+(byte[3]);
=inttostr(Number);
result:
functiondecode(code:
varstr:
=code;
delete(str,4,1);
delete(str,7,1);
=strtoint64(str);
////0123--&
gt;
1032
=(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
值?
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得到注册
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通过 机器码 获得 注册码 完整 方案 过来 看看 样本