Delphi-PRAXiS

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.

DelphiSecurity 7. Feb 2011 16:50

AW: Computer ID und Verarbeitung
 
Danke das mit der System ID hab ich jetzt, könnte mir jemand das mit den Parametern erklären??

rollstuhlfahrer 7. Feb 2011 17:20

AW: Computer ID und Verarbeitung
 
Um welche Parameter geht es denn genau?

Benhard

mkinzler 8. Feb 2011 06:55

AW: Computer ID und Verarbeitung
 
http://richen-software.com/en/produc...terid-sdk.html

Assarbad 8. Feb 2011 10:45

AW: Computer ID und Verarbeitung
 
Zitat:

Zitat von mkinzler (Beitrag 1080243)

Verdienst du mit, oder weswegen die Empfehlung? :zwinker:

Aus Sicht eines Reversers kann ich nur davon abraten. An die Prototypen ranzukommen ist selbst ohne Doku Pillepalle (und hier haben wir eine Doku) und dann brauch ich nur noch die korrekten Daten über ne plazierte DLL nach Bedarf abgreifen oder eben liefern.
Da die Identifikation von Rechnern meist im Zusammenhang mit irgendeinem Kopierschutz in jedwelcher Form steht, ist der zentrale Mechanismus damit schonmal seeeeehr angreifbar.

Wenn es aber im Programm eingebettet ist, muß ich mir als Reverser mindestens noch die Mühe machen den Mechanismus aufzuspüren :stupid:

Hinweis noch: wenn die DLL wenigstens signiert wäre, könnte der Aufrufer nachprüfen, ob es die echte DLL ist oder eine plazierte (oder modifizierte).

mkinzler 8. Feb 2011 10:55

AW: Computer ID und Verarbeitung
 
Nein, bin nur darauf gestossen.

Aber ist schon komsich, dass man sich in der letzten Zeit für jeden Beitrag rechtfertigen muss

DeddyH 8. Feb 2011 11:02

AW: Computer ID und Verarbeitung
 
[OT]
Zitat:

Zitat von mkinzler (Beitrag 1080293)
Aber ist schon komsich, dass man sich in der letzten Zeit für jeden Beitrag rechtfertigen muss

Wie kommst Du darauf? Rechtfertige Dich gefälligst :mrgreen: [/OT]

Assarbad 8. Feb 2011 12:03

AW: Computer ID und Verarbeitung
 
Zitat:

Zitat von mkinzler (Beitrag 1080293)
Aber ist schon komsich, dass man sich in der letzten Zeit für jeden Beitrag rechtfertigen muss

:roll: Is gut, ich unterlasse dann in Zukunft lustig gemeinte (Smiley) Antworten zu deinen Beiträgen. Sollte man als Mod nicht ne dickere Haut haben, zumal wenn es offensichtlich (siehe Smiley) lustig gemeint ist?

DelphiSecurity 8. Feb 2011 16:05

AW: Computer ID und Verarbeitung
 
Das mit Parametern ist jetzt in einem neuen Thema!

Danke für alles! :wink: :wink:

Delphi-Quellcode:
// Link kommt

DelphiSecurity 8. Feb 2011 16:34

AW: Computer ID und Verarbeitung
 
Parameter: Parameter verwenden bei VLC und CMD


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr.

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