
27.06.2010, 17:31
|
Прохожий
|
|
Регистрация: 26.11.2009
Сообщения: 13
Репутация: 10
|
|
Цитата:
Сообщение от Marvel
я как-то делал так: брал Windows Product ID:
Код:
function ProductID: string;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion',false);
Result := Reg.ReadString('ProductId');
Reg.Free;
end;
HardDisk ID:
Код:
function GetHardID:string;
var
SerialNum: dword;
a, b: dword;
Buffer: array [0..255] of char;
begin
if GetVolumeInformation('c:\', Buffer, SizeOf(Buffer), @SerialNum, a, b, nil, 0) then Result := IntToStr(SerialNum);
end;
BiosInfo:
Код:
function BIOSInfo(OS: string):string;
var
p: pointer;
s: string[255];
begin
if OS='NT' then begin with TRegistry.Create do
try RootKey := HKEY_LOCAL_MACHINE;
if OpenKeyReadOnly ('HARDWARE\DESCRIPTION\System') then result := ReadString('SystemBiosDate')
finally
Free;
end;
end
else try
s[0] := #8;
p := Pointer($0FFFF5);
Move(p^,s[1],8);
result := copy(s,1,2) + '/' + copy(s,4,2) + '/' +copy (s,7,2);
except result := 'XX.XX.XXXX';
end;
end;
использовать так для Win9x
складывал этот в string строку и извлекал из этого MD5 Hash. Подделать такое проблематично
Код:
HardwareID := MD5(ProductID + GetHardID + BiosInfo('NT'));
|
Спасибо за код, но у меня несколько вопросов: - Разве читать инфу из реестра это есть хорошо? Она же может быть легко изменена...
- GetVolumeInformation - получает серийный номер логического диска, насколько я знаю, он не обладает свойством уникальности, в отличие от номера физического диска
- про MD5 Hash еще не разбирал, но разве хеширование (иногда) не дает одинаковые результаты при разных входных сообщениях? Т.е. не будут ли два разных компа с одинаковыми HardwareID (а тем более если отрезать от полученного хеща половину или брать через букву)?
|