■■■■ Delphi注册机 ■■■
uses Math, md5; // MD5网上很多,自己的搜索下载吧。
//获得硬盘序列号的无字符值
function GetDiskSN: string;
var
RootPath: array[0..20] of Char;
VolName: array[0..255] of Char;
SerialNumber: DWORD;
MaxCLength: DWORD;
FileSysFlag: DWORD;
FileSysName: array[0..255] of Char;
begin
RootPath := 'C:\';
GetVolumeInformation(RootPath, VolName, 255, @SerialNumber, MaxCLength,
FileSysFlag, FileSysName, 255);
Result := inttostr(SerialNumber);
end;
//通过奇偶ASCII值相加后得出最后两位值,合成一串新字符串
function EvenOddASCII(Str: string): string;
var
i, a: integer;
s: string;
begin
Result := '';
a := 0;
for i := 1 to Length(Str) do begin
if i mod 2 = 1 then //奇数
a := a + strtoint(Str[i])
else //偶数
a := a + strtoint(Str[i]) * 3;
end;
s := inttostr(a);
Result := Str + Copy(s, Length(s) - 1, 2);
end;
function HexToInt(HexStr: string): Int64; // 参考网友的版本
var
RetVar: Int64;
i: Byte;
begin {Hex2Int function}
HexStr := UpperCase(HexStr);
if HexStr[Length(HexStr)] = 'H' then
Delete(HexStr, Length(HexStr), 1);
RetVar := 0;
for i := 1 to Length(HexStr) do begin
RetVar := RetVar shl 4;
if HexStr[i] in ['0'..'9'] then
RetVar := RetVar + (Byte(HexStr[i]) - 48)
else if HexStr[i] in ['A'..'F'] then
RetVar := RetVar + (Byte(HexStr[i]) - 55)
else begin
RetVar := 0;
break;
end;
end;
Result := RetVar;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Str1, SN,s: string;
intSN, MD5Code, HexStr, RegCode: string;
begin
//随机生成13位数字型字符串,第8位必须为8
Randomize;
Str1 := inttostr(RandomRange(1000, 9999)) +
inttostr(RandomRange(100, 999)) + '8' +
inttostr(RandomRange(10000, 99999));
SN := EvenOddASCII(Str1); //形成有效的序列号;
Edit1.Text := SN;
//合成新的字符intSN
intSN := 'MorningstarSPK' + SN + EvenOddASCII('1' + GetDiskSN);
//进行标准MD5加密
MD5Code := MD5Print(MD5String(intSN));
//取第1,2,5,6,9,10,17,18位字符组合成一个十六进制数字
HexStr := MD5Code[1] + MD5Code[2] + MD5Code[5] + MD5Code[6] +
MD5Code[9] + MD5Code[10] + MD5Code[17] + MD5Code[18];
//转化为十进制
RegCode := inttostr(HexToInt(HexStr));
//如果长度不够10位则前面补0,这种做法比较逊,找不到好的函数啊,大侠们提示一下。
s := '0000000000';
CopyMemory(@s[11 - length(RegCode)],@RegCode[1],length(RegCode));
RegCode := s;
Edit2.Text := RegCode;
end;
[课程]FART 脱壳王!加量不加价!FART作者讲授!