Eindeutige CPU-ID über Windows via C++
Gut, hätte ich gerne eine eindeutige CPU-ID, so dass ich bekommen kann eine EINDEUTIGE Identifizierung für jede Maschine.
Ich habe überprüfen __ - cpuid() aus windows.h-Bibliothek, aber das problem ist, dass die ID, die es bekommt, es ist die ID, die alle Arten von CPU, wenn du einen Core I3 Prozessor und ich haben einen I3 core-Prozessor, es wird die gleiche "Unique ID".
Hier ist was ich kam mit, um eine CPU-ID von der __ - cpuid (), die liefert die gleichen Informationen, die auf Prozessoren des gleichen Typs:
std::string GetCPUID(){
int CPUInfo[4] = { -1};
__cpuid(CPUInfo, 0);
if (CPUInfo[0] < 4)
return ""; //Error on retrieving
stringstream st;
for(int i = 0; i <= 3; i++){
st << CPUInfo[i];
}
return st.str();
}
Ich auch geprüft, ein Programm namens "Hardware-ID Extractor" das funktioniert gut, eigentlich gibt eine EINDEUTIGE CPU-ID wie die GUI, wie ich wollte, so dass Sie eine DLL, so können wir extrahieren die CPU-ID, die es generiert , ich habe alles versucht mit die sauberste code mit der DLL, und nach Ihrem Beispiel, aber es scheint, dass es gibt nichts zurück, wenn Sie lief unter Windows 7. eine Menge andere Leute beschweren sich über dies auf Windows 7 über die DLL, auch wenn die GUI auf windows 7 gibt die richtige CPU-ID.
Vertretung meiner Arbeit in der Hardware-ID Extractor,
Hier ist der Ort, wo ich heruntergeladen habe die DLL (Wobei ich wählte die Verbindung von C++ -, VB -, .NETTO): http://www.soft.tahionic.com/download-hdd_id/free-download/free%20download.html
Und hier ist die DLL selbst zum download: http://www.soft.tahionic.com/download-hdd_id/free-download/DLL%20compressed/HardwareIDExtractorC.dll
Dies ist der code, den ich bekam von Hardware-ID-Extraktor (ich verwende Visual Studio 2008):
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
int main (){
char* (__stdcall *GetIDESerialNumber)(BYTE);
HINSTANCE DllInst = NULL;
if (DllInst == NULL) DllInst = LoadLibrary("C:\\HardwareIDExtractorC.dll");
printf( "LoadLibrary error %d\n", GetLastError() );
if (DllInst) {
GetIDESerialNumber = (char* (__stdcall*)(BYTE))GetProcAddress(DllInst, "GetIDESerialNumber");
//Now call the imported function
cout << "SN: " << GetIDESerialNumber(0); //0 = first IDE hard drive in your system
}else{
printf(" - Not Loaded");
}
_getch();
return 0;
}
In das visual studio output es zeigt, dass die DLL ausgeführt wurde, indem Sie sagen:
'Test.exe': Loaded 'C:\HardwareIDExtractorC.dll', Binary was not built with debug information.
Und die Programm-Ausgabe, die ich bekomme, ist: LoadLibrary error 998 - Not loaded
Jemand weiß, was ich tun kann, um eine Eindeutige CPU-ID, wie in der Anwendung der Hardware-ID Extractor? Ich brauche, um eine CPU-ID, weil wenn ich die HDD-Informationen, die Benutzer können Ihre Festplatte formatieren und das Programm aufhört zu arbeiten, wie ich es entwerfen, zu arbeiten, nur, dass die angegebenen computer.
Ich bin mit Windows 7 32 bit Ultimate und Intel Core I3 Prozessor (wenn das hilft sowieso).
Ich hoffe, ich war klar in meiner Frage.
Vielen Dank im Voraus!
cpuid nicht wieder eine eindeutige id für den Prozessor gibt es CPU-Funktionen. Lesen Sie auch dies: en.wikipedia.org/wiki/...
Es warf Fehler "LoadLibrary error 998", wenn ich DllInst = LoadLibrary("C:\\HardwareIDExtractorC.dll"); printf( "LoadLibrary-Fehler %d\n", GetLastError() );
"CPU-ID, weil wenn ich die HDD-Informationen, die Benutzer können Ihre Festplatte formatieren und das Programm aufhört zu arbeiten, wie ich es entwerfen, zu arbeiten, nur, dass die angegebenen computer." Und was ist, wenn Sie aktualisieren Sie Ihre CPU? Was ist, wenn Sie in einer virtuellen Maschine läuft und ändern virtualization-Pakete? Wenn Sie versuchen, zu implementieren, ein DRM-Schema, nicht...Sie werden einfach erstellen Sie ärger für Ihre legitimen Benutzer. defectivebydesign.org
Haben einige Wert-hinzufügen-Funktion (wie software updates), dass jeder, der wirklich kümmert sich um Ihre software wollen. Benötigen Sie die software registriert werden, um updates von Ihrem server. Wenn Sie bemerken, ungeheuerlich Zugriffe auf eingetragene Dienste von zu vielen stellen in Ihrem Protokoll, senden Sie dem Registranten ein stern E-Mail und/oder abschneiden von updates. In anderen Worten: ausschließen von nicht-zahlenden Personen von einigem Wert, die Sie tatsächlich bieten statt der Gestaltung eines vorsätzlich fehlerhaften Produkt.
InformationsquelleAutor Grego | 2012-04-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie sich diese Arbeit machen. Führte Intel einen Prozessor Seriennummer wieder in das Pentium III design, lesbar mit cpuid. Das warf eine riesige stinken, weil Bedenken hinsichtlich der Privatsphäre und Intel war gezwungen, wieder nach unten. Die Funktion habe entfernt in späteren Pentium-III-designs und hat noch nie zurück gelegt.
Sind Sie gehen zu müssen, verwenden Sie eine andere Quelle für ein Fingerabdruck. Nicht nur ein, sammeln einen Haufen und erklärt es für ungültig, wenn mehr als eine geändert. Verwenden Sie die NIC-MAC-Adresse, RAM-Größe, Festplatten volume serial number, Sachen wie, dass. Es gibt schon Tausende von Fragen über, die am SO.
Das Programm macht es einen Schritt zu einer Zeit! Wenn Sie wirklich nicht wollen, um Sie zu bezahlen (was Sie wohl sollte, denn Sie sind offensichtlich tun dies für ein kommerzielles Projekt, sonst was ist der Punkt?), Sie brauchen, um herauszufinden, auf Ihre eigenen, was Sie Taten. Vor allem Sie sollten wahrscheinlich betrachten, nicht die Mühe mit diesem, und nur tun, eine Art online-Registrierung Ding wie viele andere auch tun in diesen Tagen: senden Sie eine Programm Seriennummer an einen zentralen server, der Uhren für Duplikate verwenden, und invalidiert diese bei Bedarf.
John Zwinck danke für die Antwort, ich bin wirklich erwägen den Kauf es, und du weißt, dass ich verwenden, online-Registrierung, aber die online-Anmeldung ist nicht so schwer zu knacken, wenn Sie simuliert einen server und ändern Sie die eingehenden Daten, so dass ich bin das hinzufügen von ein wenig mehr Schwierigkeit, so dass mein Programm nicht die Raubkopien so leicht.
InformationsquelleAutor Hans Passant
Hardware-ID Extractor ist zuverlässig und einfach zu bedienen. Ich habe es.
Da kaufte ich die DLL und der source-code vor langer Zeit wusste ich nicht, hatte um die gekauften upgrades. Ich habe gerade den code von mir.
Ja. Die DLL bietet nicht nur die CPU-ID und die HDD IDE ID, aber viele andere hardware-bezogene Statistiken (IDs). Ich habe versucht, es auf mehrere Prozessoren (sowohl AMD und Intel) und es funktioniert wie ein Charme.
Die Regelung
Den günstigsten der "Schutz" ist die Seriennummer. Dass gerade sucks big time. Eine einzelne geistlose Kunden macht es auf dem Internet verfügbar ist und jeder hat Ihr Programm FÜR KOSTENLOS! Nicht zu erwähnen, dass der 'Hacker' heute nicht die Mühe, brechen Sie Ihre Schutz-software. Sie kaufen Ihre software mit einer gefälschten Kreditkarte und veröffentlichen der Schlüssel auf web-ODER Sie kaufen die software mit einer gültigen Kreditkarte, und dann werden Sie mit dem 30-Tage Geld-zurück-Politik das Geld zurück zu bekommen. Einige mad-software-Händler wie Plimus (ja, bleiben Sie Weg von Plimus) sind für die Durchsetzung dieser auf den software-Anbieter. Klassische Seriennummern sind so tot wie die Dinosaurier.
Die andere Empfehlung, die server-basierten Schutz, ist auch überhaupt nicht gut. Ein wenig schwerer zu betrügen, indem Sie gefälschte Kreditkarte 'Hacker' und auch nicht Auslaufen Tasten alle über das Internet. Aber verlieren Sie mindestens die Hälfte Ihrer Kunden, denn in diesen Tagen, jeder hat eine firewall/antivirus blockieren Sie Ihr Programm aus eine Verbindung zum server.
Und was ist mit denen, die Mobil sind? Oder haben die nur zufällig/selten Zugang zum internet? Ich weiß nicht einmal Wagen, darüber zu sprechen jene, die sich hinter der firewall einer institution/Firma/Organisation. Die meisten dieser Unternehmen sind 'regiert' von mindless Netzwerk-Administratoren, schneiden Sie ALLE Programme außer dem Internet Explorer (auch Firefox) den Zugriff auf das Internet. Ich habe dort gewesen. Ich habe das getan. Glauben Sie mir, ES IST NIGHTMARE! In anderen, ein Programm zu haben mit dem internet verbunden, müssen Sie gehen Sie zu " administration füllen viele Formulare zur Anforderung und schließlich vielleicht, VIELLEICHT, werden Sie lassen Sie das Programm auf das Internet zugreifen. Über einen proxy vielleicht.
Sowieso, es ist ziemlich einfach zu tun, eine verlässliche key-basierte Schutz für Ihr Programm: senden Sie eine Taste, um die Kunden ABER nicht senden einen klassischen Schlüssel, sondern ein hardware-basierten Schlüssel. Auf diese Weise wird der Schlüssel nur in das jeweilige system. Sie können auch eine Ankündigung auf Ihrer Website: "Bitte fühlen Sie sich frei, um diese öffentlichen Schlüssel. Ich weiß nicht give a damn" 🙂
Nur verlassen Sie sich nicht auf eine einzelne hardware-ID (die CPU nur zum Beispiel), aber auf alle von Ihnen. Erlauben der Benutzer zu ändern/aktualisieren Sie alle Ihre hardware-Komponenten mit einer Ausnahme. Also, solange Sie nicht ändern Sie den gesamten computer mit der Lizenz arbeiten wird. Da ein neuer computer ist gekauft, alle 3,4 Jahre (die ich gefunden habe, die Statistiken über das Internet), sollten Sie dem Benutzer erlauben, zu Fragen, für 3 neue Schlüssel (Lizenz-Reaktivierung). Wahrscheinlich werden Sie eine neue version vor der 3,4-Jahre-Intervall abläuft. So, die Kunden müssen kaufen Sie das upgrade und erhalten Sie einen neuen Schlüssel sowieso.
ach ja und ich benutze ein ganz Sicheres system mit public-key und private-key-login jedes mal das Programm ausgeführt, aber immer noch muss ich, dass der CPU-Sache, die Benutzer, die gehen, um meine software verwenden, haben die Maschine, die ich Ihnen sagen, dass die Arbeit, so dass es nicht für normale Benutzer. deshalb ist es in Ordnung, ein wenig komplexer.
Bitte seien Sie gewarnt, dass die CPU-ID, die "Hardware-ID Extractor", gibt Sie NICHTS MEHR als die RAW-Ausgabe von der CPUID-Anweisung (im Grunde genommen der erste code-block in die OP) es ist also NICHT EINDEUTIG für die Prozessoren des gleichen Modells ! Auch, für Sie, um die eigentliche HDD serial-Nummern und nicht nur die Datenträger-ID (die geändert werden können, einfach mit partition-tools), "Hardware-ID-Auszieher" benötigt, um als administrator ausgeführt werden (erhöhte im Fall von Vista+ UAC), dies macht es völlig nutzlos für Programme, in denen Sie nicht tun können, dass jeder launch (die meisten von Ihnen).
Bei Rajkosto - Es ist wirklich gut, es gibt die echte Seriennummer wie die volume-ID ist nicht dauerhaft. Die volume-Id jedes mal ändert, wenn Sie das volume formatieren. Also, noch einmal: das ist eigentlich ganz gut. Auch, müssen Sie nicht führen Sie das Programm JEDES MAL mit erhöhten rechten. Es ist genug, um zu Lesen Sie die Seriennummer, wenn Sie Sie installieren das Programm (die meisten Programme laufen erhöhten sowieso bei der installation) und speichern Sie diese Zahl.
Aber dann können Sie nicht überprüfen, die Lizenz gegen die gespeicherte Seriennummer in der Datei jedem Start ist nur in erhöhten startet. Sage ich nur, DENN du bekommst die Seriennummer per WMI, auch wenn nicht mit erhöhten rechten, die "Hardware-ID Extractor" - software ist einfach nur schlecht (und irreführend, weil Sie sagen, die CPUID ist ein Unikat)
InformationsquelleAutor Rigel