{ Public declarations }
end;
function GetHardDiskSerieNumber(): integer;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
function GetHardDiskSerieNumber: integer;
var
sysinfo:tsysteminfo;
lpRootPathName : PChar; // address of root directory of the file system
lpVolumeNameBuffer : PChar; // address of name of the volume
nVolumeNameSize : DWORD; // length of lpVolumeNameBuffer
lpVolumeSerialNumber : DWORD; // address of volume serial number
lpMaximumComponentLength : DWORD; // address of system's maximum filename length
lpFileSystemFlags : DWORD; // address of file system flags
lpFileSystemNameBuffer : PChar; // address of name of file system
nFileSystemNameSize : DWORD; // length of lpFileSystemNameBuffer
begin
lpRootPathName:=pchar('c:\');
windows.GetSystemInfo(sysinfo);
GetMem( lpVolumeNameBuffer, MAX_PATH + 1 );
GetMem( lpFileSystemNameBuffer, MAX_PATH + 1 );
nVolumeNameSize := MAX_PATH + 1;
nFileSystemNameSize := MAX_PATH + 1;
Windows.GetVolumeInformation( lpRootPathName,
lpVolumeNameBuffer,
nVolumeNameSize,
@lpVolumeSerialNumber,
lpMaximumComponentLength,
lpFileSystemFlags,
lpFileSystemNameBuffer,
nFileSystemNameSize );
Result := lpVolumeSerialNumber;
end;
procedure TForm1.aboutClick(Sender: TObject);
begin
form2.show;
end;
procedure TForm1.exitprogramClick(Sender: TObject);
begin
form1.Close;
end;
procedure TForm1.regClick(Sender: TObject);
label
isregcode,quitloop;
var
v1,v2,v3,v4,v5,v6,v7,v8:integer;
hdid:longword;
hdln:integer;
idstr:string;
i,j,k:integer;
regcode:array[1..20] of char ;
cmod:integer;
cdiv:integer;
lidbit,idbit:integer;
idbitstr:string;
newidbit:integer;
regcodebit:integer;
reg:TRegistry;
begin
hdid:=GetHardDiskSerieNumber;
hdln:=length(inttostr(hdid) );
idstr:=inttostr(hdid); ;
v1:=7;
v2:=1;
v3:=3;
v4:=0;
for i:=1 to 20 do
begin
v3:=((v3+1) mod ((6 mod hdln)+1))+1;
v4:=v4+v1;
v1:=(v1+$18b) mod $0A;
idbitstr:='';
for j:=1 to v3 do
begin
v4:=((v4+v2) mod hdln)+1;
v2:=(v2+1) mod 6;
idbitstr:=idbitstr+idstr[v4];
end;
newidbit:=strtoint(idbitstr);
v5:=$85;
v6:=$6f;
v7:=$42;
v8:=$a6;
for k:=1 to 6 do
begin
regcodebit:=((newidbit mod (v5+1))+(newidbit mod (v6+1))+(newidbit mod (v7+1))) mod (v8+1);
v5:=v5+2;
v6:=v6-7;
v7:=v7+5;
v8:=v8-3;
if (regcodebit>=48) and (regcodebit<=57) then goto isregcode;
if (regcodebit>=65) and (regcodebit<=90) then goto isregcode;
if (regcodebit>=97) and (regcodebit<=122) then goto isregcode;
end;
if regcodebit<61 then
begin
regcode[i]:=chr((regcodebit mod 10)+48);
goto quitloop;
end;
if regcodebit>93 then
begin
regcode[i]:=chr((regcodebit mod 26)+97);
goto quitloop;
end;
if (regcodebit<=93) then
begin
regcode[i]:=chr((regcodebit mod 26)+65);
goto quitloop;
end;
isregcode:
regcode[i]:=chr(regcodebit);
quitloop:
end;
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.