Entwickler-Ecke
Windows API - Windows (Hardware-ID) Hardware hash auslesen
immortuus - Mi 13.06.07 09:39
Titel: Windows (Hardware-ID) Hardware hash auslesen
Ich habe das Problem das ich eine HardwareID benötige. Diese muss pro PC Eindeutig sein.
Am liebsten würde ich die Microsoft HardwareID verwenden, da hab ich mich dann ein wenig schlau gemacht. Die MS Aktivierung besteht aus zwei Teilen wer es nachlesen möchte (
http://download.microsoft.com/download/4/4/e/44ef403e-f59b-48b1-a104-38aa73a83f0e/reportdt.pdf ) im Abschnitt INSTALLATIONS-ID steht alles.
Ich hab mich natürlich schon nach anderen Dingen umgeschaut wie z.B. die MAC Adresse oder die Seriennummer der HDD, ich hätte aber gerne die MS HardwareID.
Überall findet man die info das die MS Aktivierung aus zwei Teilen besteht nämlich aus der ProduktID (CD Key) und der HardwareID.
Aber nirgends steht wie ich die HardwareID auslesen kann.
Hat einer von euch eine Idee wie das geht?
immortuus - Mi 13.06.07 09:57
Was haltet ihr von der WMI Kalsse: Win32_LUID
ist die dafür geeignet?
mexx2k - Sa 01.09.07 08:41
benötige auch diese ID, welche auch immer das ist.
Es gibt sicher eine ID die auf jedem PC anders ist.
Erste Frage: Wie heisst diese ID.
Zweite Frage: Wie lese ich diese aus?
Danke
mexx2k - Sa 01.09.07 09:09
Das was ich bisher rausgefunden habe ist folgendes:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| implementation
{$R *.nfm}
procedure form.FormCreate(Sender: TObject); begin lbShowPCName.Caption := GetEnvironmentVariable('ComputerName');
end;
end. |
^^
Ein paar Profis von euch können sicher ein zwei Fragen davon beantworten ;)
Bitte auch den Post darüber beachten
Timosch - Sa 01.09.07 12:11
Also der Computername ist ganz sicher nicht eindeutig...
Die MAC der Netzwerkkarte sollte theoretisch eindeutig sein, was aber auch nicht immer so ist.
Die Produkt-ID vom Windows (HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ProductID) wäre auch eine Möglichkeit, die sollte eigentlich pro Windows-Installation identisch sein. Das ist aber NICHT der CD-Key. Die würde ich nehmen, das reicht doch eigentlich schon. Wozu brauchst du denn dann noch diese Hardware-ID.
mexx2k - Sa 01.09.07 12:53
Ûnd wie lese ich diese aus?
Timosch - Sa 01.09.07 13:01
mexx2k hat folgendes geschrieben: |
Ûnd wie lese ich diese aus? |
Timosch hat folgendes geschrieben: |
Die Produkt-ID vom Windows (HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ProductID) |
mexx2k - Sa 01.09.07 13:25
achso, wird dann also nicht in irgendeiner umgebungsvariable gespeichert?
Timosch - Sa 01.09.07 14:18
Wie man der Ausgabe des SET-Befehls (alternativ Systemsteuerung->System->Erweitert->Umgebungsvariablen, aber set ist schneller...) entnehmen kann, nein.
mexx2k - Sa 01.09.07 15:06
Ich würd sagen für die DAU´s und newbies unter uns wäre es nett wenn einer von euch Profis ein;zwei ZeilenDelphi-Code Poste kann, wie man diese umgebungsvariable in eine normale Stringvariable bekommt ;)
Timosch - Sa 01.09.07 15:20
mexx2k hat folgendes geschrieben: |
Ich würd sagen für die DAU´s und newbies unter uns wäre es nett wenn einer von euch Profis ein;zwei ZeilenDelphi-Code Poste kann, wie man diese umgebungsvariable in eine normale Stringvariable bekommt ;) |
Wie ich schon sagte: Es ist keine Umgebungsvariable. Die Product-ID steht in HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ProductID. Und wie man Registry-Einträge ausliest, kann man der Delphi-Hilfe entnehmen. (TRegistry...)
mexx2k - Mo 03.09.07 10:09
Also nochmal für alle, die eine eindeutige ID bzw. einen eindeutigen Code eines Computers benötigen.
Ich denke einer der eindeutigsten Sachen ist die FestplattenID, welche sich natürlich nur ändert, wenn man eine andere Festplatte benutzt.
So kann man diese Auslesen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.FormCreate(Sender: TObject); var pRootPathName: Array[0..MAX_PATH] of Char; pVolumeNameBuffer: Array[0..MAX_PATH] of Char; iVolumeSerialNumber: Cardinal;
iMaximumComponentLength: DWORD; iFileSystemFlags: DWORD;
cc : Cardinal;
begin
cc := 0; pRootPathName := 'X:\'; GetVolumeInformation( pRootPathName,pVolumeNameBuffer,Sizeof(pVolumeNameBuffer)-1,@iVolumeSerialNumber,iMaximumComponentLength,iFileSystemFlags,nil,0 ); cc := iVolumeSerialNumber; ShowMessage(Format('%.8x', [cc])); end; |
Bei der Bestimmung, welche Festplatte hergenommen werden soll, hab ich noch einen kleinen Tipp:
Ich persönlich würde auslesen, auf welcher Festplatte das Betriebssystem(Windows) installiert ist. Und so wird das gemacht:
Delphi-Quelltext
1:
| sString := GetEnvironmentVariable('systemdrive'); |
Narses - Mo 03.09.07 10:44
Moin!
mexx2k hat folgendes geschrieben: |
Also nochmal für alle, die eine eindeutige ID bzw. einen eindeutigen Code eines Computers benötigen.
Ich denke einer der eindeutigsten Sachen ist die FestplattenID |
:|
Wie
Timosch bereits sagte, lies die ProductID aus der Registry und bilde von dem kompletten Binärblock z.B. einen MD5-Hash (kannst auch vorer noch die SystemDrive-Serial und den Hostnamen drauftun, wenn du magst). DAS würde ich dann als halbwegs brauchbaren Hardware-Hash bezeichnen. :idea:
cu
Narses
mexx2k - Mo 03.09.07 10:48
naja, nur wenn du formatierst und ein anderes betriebssystem nimmst, bzw. nur eine andere lizenz, dann ändert sich ja auch diese Produktid.
Narses - Mo 03.09.07 10:51
Timosch hat folgendes geschrieben: |
Die Produkt-ID vom Windows (HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ProductID) wäre auch eine Möglichkeit, die sollte eigentlich pro Windows-Installation identisch sein. Das ist aber NICHT der CD-Key. |
Delete - Mo 03.09.07 10:52
mexx2k hat folgendes geschrieben: |
Ich denke einer der eindeutigsten Sachen ist die FestplattenID, welche sich natürlich nur ändert, wenn man eine andere Festplatte benutzt. |
Eindeutig vielleicht, aber nicht sehr beständig. Einmal formatiert und du hast eine neue.
BenBE - Mo 03.09.07 13:42
@Luckie: Nicht nur das: Da ich regelmäßig meine Laufwerke clone und inzwischen auch weiß, wie man eine Systempartition in einem NEUEN Rechner zum Laufen bekommt, könnte ich das Programm problemlos auf einen anderen Rechner ziehen (sofern die HW halbwegs kompatibel ist.
Ferner ist zu Beachten, dass Festplatten-ID <> VolumeID ist. Du liest die VolumeID aus, die mit jedem halbwegs brauchbaren Hexeditor in <1 Minute geändert ist. Die Festplatten-ID ist die Hardware-Seriennummer (IMHO) und da sieht es schon komplizierter aus.
Hier im DF gibt es GENUG Diskussionen, zum Thema Hardware-IDs, wo nahezu ALLE zur Aussage bringen, dass eine HW-ID nicht wirklich eindeutig ist ODER zu enormen Nachteilen beim Kunde führt, so dass es den Aufwand nicht lohnt. Warum sind hier dennoch IMMER WIEDER Leute der Meinung, Zeit auf eine Funktion verschwenden zu müssen, die eh nichts bringt, außer Nachteile, anstatt diese Zeit in ordentliche Funktionen zu investieren, damit man den Anreiz für eine legale Version erhöht?
Kroko - Mo 03.09.07 15:41
@BenBE: :zustimm:
mexx2k - Mo 03.09.07 16:29
Naja Zeit verschwenden ist vielleicht nicht der richtige Ausdruck für meine Bemühungen.
Ich beschäftige mich erst seit ein paar Tagen mit dem Thema "eindeutige ID" und wusste halt z.b. nicht, dass sich diese ID beim formatieren ändert. Ausserdem, glaube ich nicht, dass Hausfrauencomputerbesitzer sich mit Hexeditoren etc. auskennen ;)
Aber darum gehts ja nicht.
Bin halt noch nicht allzu frisch auf diesem Gebiet.
Delphiturbo - Do 01.11.07 02:55
Narses hat folgendes geschrieben: |
Moin!
mexx2k hat folgendes geschrieben: | Also nochmal für alle, die eine eindeutige ID bzw. einen eindeutigen Code eines Computers benötigen.
Ich denke einer der eindeutigsten Sachen ist die FestplattenID |
:|
Wie Timosch bereits sagte, lies die ProductID aus der Registry und bilde von dem kompletten Binärblock z.B. einen MD5-Hash (kannst auch vorer noch die SystemDrive-Serial und den Hostnamen drauftun, wenn du magst). DAS würde ich dann als halbwegs brauchbaren Hardware-Hash bezeichnen. :idea:
cu
Narses |
Wie kann ich MD5 verwenden um meine Anwendung mit Username (ID) + Passwort schutzen?
Wo kann ich die Komponenten downloaden?
hier in der Autor Seite ist die Installation nicht erklärt :
http://www.cityinthesky.co.uk/cryptography.html
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!