资源描述:
《通过机器码得注册码的完整方案(转贴过来,留着看看).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、通过机器码获得注册码的完整方案(转贴过来,留着看看)想加密自己的软件,看过一些软件的作法,思路如下:1、用户安装后,得出本机的机器码(硬盘的序列号,不想用网卡,因为很多机器没有网卡)。生成机器码代码2、用户将该机器码EMAIL给我,我用该机器码生成一个注册码,发送给用户。注册码生成代码3、用户在程序中输入该注册码,程序逆算该注册码,与机器码核对,查看是否相符。注册码逆算、核对代码,4、如果用户安装后没有得到注册码,在N天后部分功能不可用。不要太容易被改(虽然说安装后也只有少部份功能能用)。时限功能代码,zw84611(2002
2、-12-223:8)functionGetHDNumber(Drv:String):DWORD;//得到硬盘序列号varVolumeSerialNumber:DWORD;MaximumComponentLength:DWORD;FileSystemFlags:DWORD;beginifDrv[Length(Drv)]=':'thenDrv:=Drv+'';GetVolumeInformation(pChar(Drv),nil,0,@VolumeSerialNumber,MaximumComponentLength,FileS
3、ystemFlags,nil,0);Result:=(VolumeSerialNumber);end;functionSerial(Num:DWORD):string;//这个号码是用户给你生成注册码的,它通过对硬盘序列号编码而来。varsNum:string;inChar:array[1..4]ofchar;beginNum:=Numxor8009211011;sNum:=inttostr(Num);inChar[1]:=char(((integer(sNum[1])+integer(sNum[2]))mod5)+integ
4、er('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)
5、;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;beginstr:=license;delete(str,1,1);delete(str,2,1
6、);delete(str,3,1);delete(str,6,1);number:=strtoint64(str);number:=notnumber;number:=numberxor$1973122980;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
7、]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]an
8、d$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