Показать сообщение отдельно
  #7  
Старый 27.06.2010, 17:31
Marx Marx вне форума
Прохожий
 
Регистрация: 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;
использовать так
Код:
BiosInfo('NT'))
для Win9x
Код:
BiosInfo('98'))
складывал этот в string строку и извлекал из этого MD5 Hash. Подделать такое проблематично
Код:
HardwareID := MD5(ProductID + GetHardID + BiosInfo('NT'));

Спасибо за код, но у меня несколько вопросов:
  1. Разве читать инфу из реестра это есть хорошо? Она же может быть легко изменена...
  2. GetVolumeInformation - получает серийный номер логического диска, насколько я знаю, он не обладает свойством уникальности, в отличие от номера физического диска
  3. про MD5 Hash еще не разбирал, но разве хеширование (иногда) не дает одинаковые результаты при разных входных сообщениях? Т.е. не будут ли два разных компа с одинаковыми HardwareID (а тем более если отрезать от полученного хеща половину или брать через букву)?


Ответить с цитированием