AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Generierung einer MachineID: aktualisieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Generierung einer MachineID: aktualisieren?

Ein Thema von Andreas13 · begonnen am 27. Jan 2021 · letzter Beitrag vom 29. Jan 2021
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#1

AW: Generierung einer MachineID: aktualisieren?

  Alt 28. Jan 2021, 09:55
daß, wenn man als 64Bit Anwendung compiliert, bei der Erstellung der InlineAssemblerCode nicht mehr übernommen wird?
Als 64-Bit Anwendung compiliert das gar nicht erst.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#2

AW: Generierung einer MachineID: aktualisieren?

  Alt 28. Jan 2021, 14:22
Das betrifft das Compilat, also was Delphi erstellt.
* Inline-Assembler (asm...end innerhalb von Pascal-Funktionen) gibt es nur in Win32. (dieser Feature wurde in neueren Platformen nicht integriert)
* ein Win32-Programm läuft natürlich in Windows 64 (so lange das Win32-Subsystem nicht rausgeworfen wird, so wie schon das Windows16-Subsystem in Windows64 nun nach vielen 10 Jahren verschwand)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Generierung einer MachineID: aktualisieren?

  Alt 28. Jan 2021, 21:24
Danke für Antworten und Tipps!
Ich habe am alten Programm-Code etliches modifiziert, angepaßt, auskommentiert, hinzugefügt und verbessert (? ), so daß er wenigstens für die 32-Bit Zielplattform kompiliert werden kann.

D.h. es entsteht ein 32-Bit Programm, welches aber auch unter Windows 64 läuft und größtenteils funktioniert. Neu hinzugefügte Routinen sind u.a.: GetTotalPhysMemory und GetWinVer, weil die vorhandenen nicht funktionierten. Auch an den Registry-Aufrufen mußte vieles angepaßt und verbessert werden.
Mein Ziel war, daß die Routinen wenigstens unter Windows 10 korrekte Ergebnisse liefern. Keine Garantie für frühere Windows-Versionen.

NICHT funktionieren trotz aller meiner bescheidenen Bemühungen die Bestimmung von
- HDD Manufactur No
und
- WinproductID

Ich habe viele Kommentare hinzugefügt, so daß eine Weiterpflege möglich ist. Auch wenn die vom Programm generierte MachineID nicht immer sinnvoll ist, läßt sich jedoch aus den vorhandenen und größtenteils nicht benutzten Detailergebnissen ein Fingerprint für eine Hardware leicht erstellen und bei Installationsrutinen verwenden. Vielleicht kann jemand etwas davon benutzen.

Gruß, Andreas
Angehängte Dateien
Dateityp: zip MachinenID - 32Bit.zip (765,6 KB, 5x aufgerufen)
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#4

AW: Generierung einer MachineID: aktualisieren?

  Alt 28. Jan 2021, 22:59
Tipp, ich würde nicht den Hash über alles bilden,
sondern in der ID die Teile trennen.
z.B. bei der MD5-Darstellung die ersten Bytes eine Eigenschaft, die nächsten Bytes das Nächste usw. (wichtige Eigenschaften bekommen mehr Bytes)

Und am Ende eine Check-Funktion, welche z.B. bei 80% Gleichheit immernoch ein nnnnnnjaOK liefert.
Wäre z.B. die FestplattenID noch drin und jemand tauscht/repariert/upgraded die Platte, dann wäre es nicht gleich sofort ein Fail, so Lange die restlichen Eigenschaften übereinstimmen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Generierung einer MachineID: aktualisieren?

  Alt 29. Jan 2021, 07:00
.. über das wmic Programm kannst Du z.B. den Hersteller und den Plattentyp herausfinden.
Code:
wmic diskdrive get Caption
Caption
SAMSUNG MZALQ512HALU-000L2
OS Daten kannst Du so abfragen.
Code:
wmic OS get BuildNumber
BuildNumber
18363

wmic OS get serialNumber
SerialNumber
00913-92704-38983-CAOEM
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#6

AW: Generierung einer MachineID: aktualisieren?

  Alt 29. Jan 2021, 07:43
.. über das wmic Programm kannst Du z.B. den Hersteller und den Plattentyp herausfinden.
Code:
wmic diskdrive get Caption
Caption
SAMSUNG MZALQ512HALU-000L2
Ja, aber das ist ein externes Programm und keine Delphi-Routine...

Tipp, ich würde nicht den Hash über alles bilden,
sondern in der ID die Teile trennen...
Gute Idee Himitsu!
Man könnte noch weiter gehen und den HASH-Wert mehrerer Kennzahlen (z. B. CPUID, CPUModel, CPUSpeed, Biosdate, HDDSerialNo, HDDVSerialno, Tempdir, MemTotalPhisical, Wintype, WinUserName etc.) separat ablegen und jeder Eigenschaft eine gewisse Anzahl von Werte-Punkten („Scores“) zuordnen. Zum erfolgreichen Bestehen der Tests kann man eine untere Grenze festlegen, bei welcher derselbe PC noch mit Sicherheit identifiziert werden kann.
Darüber hinaus könnte man eine Option „Software-Upgrade“ oder „Software reparieren“ etc. ins Anwendungsprogramm einbauen, welches den Fingerprint bei einer vorgegebenen Anzahl von Änderungen der PC-Umgebung (z. B. neue Festplatte, neue CPU, neues BIOS etc.) aktualisiert. Dies kann entweder automatisiert ablaufen oder per Vorschlag an den User.
Gruß, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (29. Jan 2021 um 07:51 Uhr)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#7

AW: Generierung einer MachineID: aktualisieren?

  Alt 29. Jan 2021, 07:49
Hier https://www.delphipraxis.net/172006-...-auslesen.html habe ich etwas gefunden:
Delphi-Quellcode:
Function GetWinProductId: String;
Var
  Reg: TRegistry;

Begin
  Reg:= TRegistry.Create(KEY_READ or $0100);
  Try
    Reg.RootKey:= HKEY_LOCAL_MACHINE;
    // If (Reg.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\', false)) Then
    If (Reg.OpenKeyReadOnly('SOFTWARE\Microsoft\Windows NT\CurrentVersion\')) Then
    Begin
      Try
        If Reg.ValueExists('DigitalProductId') Then
        Begin
          // Result:= Result + #13#10 + 'BuildGUID: ' + Reg.ReadString('BuildGUID');
          // Result:= 'BuildGUID: ' + Reg.ReadString('BuildGUID');
          Result:= Reg.ReadString('ProductId');
        End;
        If Reg.ValueExists('DigitalProductId4') Then
        Begin
          // Result:= Result + #13#10 + 'BuildGUID: ' + Reg.ReadString('BuildGUID');
          //Result:= 'BuildGUID: ' + Reg.ReadString('BuildGUID');
          Result:= Reg.ReadString('ProductId');
        End;
      Finally
        Reg.CloseKey;
      End;{Try}
    End;{If}
  Finally
    Reg.Free;
  End;{Try}
End;{GetWinProductId}
{-------------------}
Das funktioniert auch unter Windows 10.
Gruß, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Generierung einer MachineID: aktualisieren?

  Alt 29. Jan 2021, 08:10
Delphi-Quellcode:
programm
{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants;

function GetWin32_DiskDriveCaption: String;
const
  WbemUser ='';
  WbemPassword ='';
  WbemComputer ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject : OLEVariant;
  oEnum : IEnumvariant;
  iValue : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT Caption FROM Win32_DiskDrive','WQL',wbemFlagForwardOnly);
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    result := String(FWbemObject.Caption);// String
    FWbemObject:=Unassigned;
  end;
end;


begin
 try
    CoInitialize(nil);
    try
      WriteLn(GetWin32_DiskDriveCaption);
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;
end.
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#9

AW: Generierung einer MachineID: aktualisieren?

  Alt 29. Jan 2021, 08:33
Mir sind noch einige Fehler in hwid.pas (MachinenID - 32Bit.zip) aufgefallen: In allen Teilen der Routine GetIdeSerialNumber, die
Reg.OpenKeyReadOnly(..) enthalten, sollten die Registry-Aufrufe in einen weiteren Speicherschutzblock gepackt werden:
Delphi-Quellcode:
Try
  ... // bisheriger Code
Finally
  Reg.CloseKey;
End;
Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:23 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