Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Computer ID und Verarbeitung (https://www.delphipraxis.net/158101-computer-id-und-verarbeitung.html)

DelphiSecurity 5. Feb 2011 14:34

Computer ID und Verarbeitung
 
Hallo,

im Moment stehe ich vor einem Problem: :wall:

1.
Ich möchte gerne eine Computer ID auslesen. Keine Seriennummer von einer Festplatte.
In der Form: ####-####-####-#### (in der Art :wink:)
Wie zum Beispiel bei den MAGIX (R) Produkten

2.
Ich möchte noch im Zusammenhang mit eins zum Beispiel einen Bestimmnten Teil auslesen.
2541-5623-8868-6854 einzeln auslesen und Spiechern (= Speichern kann ich). Sollte auch mit Buchstaben gehen.

DANKE

himitsu 5. Feb 2011 14:41

AW: Computer ID und Verarbeitung
 
Zitat:

Zitat von DelphiSecurity (Beitrag 1079709)
Ich möchte gerne eine Computer ID auslesen.

Sowas gibt es nicht.

Zitat:

Zitat von DelphiSecurity (Beitrag 1079709)
Keine Seriennummer von einer Festplatte.

Doch, sowas wirst du machen müssen.

Man nimmt sich einige Eigenschaften ... Festplatten-Seriennummer, CPU-IDs, RAM-Größe, Betriebssystem/Benutzer-IDs usw.
Berechnet daraus eine "eigene ID" und schon hat man sowas.

Es sollte aber fehlertollerant sein, also möglichst viele/eindeutige Infos und falls sich ein/zwei ändern (z.B. RAM aufgerüstet oder neue Festplatte), dann sollte sowas "kleines" ignoriert werden können.


PS: Dazu gibt es schon mehrere Themen in der DP und dort wurden auch fertige Komponenten erwähnt, falls man es nicht selber machen will.

DelphiSecurity 5. Feb 2011 15:04

AW: Computer ID und Verarbeitung
 
OK, Danke.
Für eine Antwort auf 2 wäre ich noch Dankbar

Assarbad 5. Feb 2011 15:22

AW: Computer ID und Verarbeitung
 
Zitat:

Zitat von himitsu (Beitrag 1079711)
Zitat:

Zitat von DelphiSecurity (Beitrag 1079709)
Ich möchte gerne eine Computer ID auslesen.

Sowas gibt es nicht.

Doch, gibt es.
  1. die SID des Systems (komplett in Software, unterscheidet sich aber von System zu System (*)), seit NT4 - nicht jedoch in Windows 9x/ME
  2. DMI

(*) wenn jetzt einer mit Klonen kommt, dann verweise ich direkt an Russinovich und die Gründe das Tool "newsid" einzustellen. Bis XP inklusive (ich selber habe es nur bis XP SP1 getestet) hat das Tool aber zuverlässig funktioniert. Nur bringt das so ziemlich garnix, weil es bspw. in einem Domänenumfeld die Server durcheinander bringt.

himitsu 5. Feb 2011 16:32

AW: Computer ID und Verarbeitung
 
Njoar ... doch, denn auch die ID ist ja irgendwie berechnet? :angle2:

Nja, man könnte ja auch erstmal fragen wozu diese "ID" benötigt wird,
bzw. wie sicher/aufwändig die Seriennummernberechnung/-behandlung SystemID-Berechnung sein muß?
OK, Wobei man doch auch einfach die System- oder User-SID nehmen könnte, welche oftmals ebenfalls recht "eindeutig" wäre, wie Olli erwähnte, auch wenn sie nur die aktuelle Windowinstallation oder den Benutzer kennzeichnet.

Wie gesagt, es gibt schon ein paar fertige Module, welche man nur noch in sein Programm einbauen muß und sich dann selber um fast nix mehr kümmern muß.

Eine ID des Systems, auf welchem das Programm grade läuft, braucht man ja "nur", um das System möglichst sicher identifizieren zu können, aber wozu man sowas braucht, wäre schon praktisch zu wissen, um wirklich helfen zu können.

Hier im Forum suchenSerial Hier im Forum suchenSeriennummer Hier im Forum suchenSeriennummer berechnen ...

Net7 5. Feb 2011 17:22

AW: Computer ID und Verarbeitung
 
Also ich würde so vorgehen,


zu Frage 1: Die Systemsid ermitteln
Delphi-Quellcode:
function ConvertSidToStringSid(SID: PSID; var StringSid: LPSTR): Boolean; stdcall;
external 'advapi32.dll' name 'ConvertSidToStringSidA';

 function GetAccountSid(const Server, User: WideString; var Sid: PSID): DWORD;
var
  dwDomainSize, dwSidSize: DWord;
  R: LongBool;
  wDomain: WideString;
  Use: DWord;
begin
  Result := 0;
  SetLastError(0);
  dwSidSize := 0;
  dwDomainSize := 0;
  R := LookupAccountNameW(PWideChar(Server), PWideChar(User), nil, dwSidSize, nil, dwDomainSize, Use);
  if (not R) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then
    begin
      SetLength(wDomain, dwDomainSize);
      Sid := GetMemory(dwSidSize);
      R := LookupAccountNameW(PWideChar(Server), PWideChar(User), Sid, dwSidSize, PWideChar(wDomain), dwDomainSize, Use);
      if not R then
        begin
          FreeMemory(Sid);
          Sid := nil;
        end;
    end
  else
    Result := GetLastError;
end;

function GetSystemSID: string;
var
  SID: PSID;
  strSID: PChar;
  CName: array[0..255] of Char;
  nSize: Cardinal;
begin
  Result := '';
  GetComputerName(CName, nSize);
  if GetAccountSid('', CName, SID) = 0 then begin
      ConvertSidToStringSid(SID, strSID);
      Result := strSid;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines.Add('System SID:'+GetSystemSID);

end;
Zu Frage 2:

Eine Möglichkeit wäre einen CRC32 ( in uses crc32 aufnehmen ) aus dieser Sid zu erstellen zb.
Delphi-Quellcode:
function CheckSum(Sid: string): string;
var
  CRC32: DWORD;
  STemp: string;
  SS: string;
begin
  STemp := '';
  ss := '';
  ss := Sid;

  CRC32 := $FFFFFFFF;
  if LENGTH(ss) > 0 
    then CalcCRC32(Addr(ss[1]), LENGTH(ss), CRC32);

  STemp := IntToHex(CRC32, 8);
  Result := STemp;

end;
Und daraus kannst du deine Seriennummer erstellen und mit Bindestrichen versehen.

Assarbad 5. Feb 2011 17:31

AW: Computer ID und Verarbeitung
 
Zitat:

Zitat von Net7 (Beitrag 1079741)
Eine Möglichkeit wäre einen CRC32 ( in uses crc32 aufnehmen ) aus dieser Sid zu erstellen zb.
Delphi-Quellcode:
function CheckSum(Sid: string): string;
var
  CRC32: DWORD;
  STemp: string;
  SS: string;
begin
  STemp := '';
  ss := '';
  ss := Sid;

  CRC32 := $FFFFFFFF;
  if LENGTH(ss) > 0 
    then CalcCRC32(Addr(ss[1]), LENGTH(ss), CRC32);

  STemp := IntToHex(CRC32, 8);
  Result := STemp;

end;
Und daraus kannst du deine Seriennummer erstellen und mit Bindestrichen versehen.

Ich stimme allem anderen zu, aber das ist eine schlechte Empfehlung. Eine CRC (bzw. Checksumme) ist kein Hash. Hier ist eindeutig ein Hash angesagt, vorzugsweise mit "geheimem" Salz ("Salted Hash").

Net7 5. Feb 2011 17:37

AW: Computer ID und Verarbeitung
 
Nun das man versalzen sollte ist mir schon klar, crc32 finde ich jedoch zu Anschauungszwecken unkomplizierter. :wink:

Assarbad 5. Feb 2011 18:16

AW: Computer ID und Verarbeitung
 
Zitat:

Zitat von Net7 (Beitrag 1079744)
[...] crc32 finde ich jedoch zu Anschauungszwecken unkomplizierter. :wink:

Point taken.

Ich wollte nur den Unterschied zwischen Fehlerfindung und Identifizierung klarmachen.

himitsu 5. Feb 2011 18:54

AW: Computer ID und Verarbeitung
 
Nur daß CRC32 die "lange" SID auf schlappe 32 Bit reduziert. Wenn, dann doch lieber 'ne größere Hash-Funktion verwenden.
MD5 und SHA1 sind da schon ein paar Bits größer.
http://www.delphipraxis.net/151812-mini-sha1.html

Und vor dem Hashen der eigentlichen Daten noch ein bissl SALZ mit einrechnen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz