Benötige hilfe bei Hardware ID



  • Hallo,

    ich möchte ein programm schreiben wo eine hardware id in den Source eingetragen wird (vor dem Compiliren und Linken).
    Mein Problem ist jetzt das ich nicht weiß wie ich diese ID auslese und wie ich sie in dem Source einfüge, könntet ihr mir bitte helfen.

    Danke schonmal.

    mfg



  • Was denn bitte für eine Hardware-ID?
    Die ID in den Sourcecode einfügen kannst du am einfachsten mit Strg+V.



  • Ich möchte ein programm schreiben, das NUR auf EINEM PC ausführbar ist.

    Halt eine Hardware ID sperre.

    Meine Frage: Wie beziehe ich die Hardware ID von z.b. dem BIOS und füge sie in dem Programm so ein, das es bemerkt das es auf dem falschen PC leuft bzw. auf dem PC mit der falschen Hardware ID.

    thx

    mfg



  • Hab noch nie etwas von der Hardware-ID gehört. Aber z.B. die Festplatte hat eine Seriennummer, die du auslesen kannst, siehe Google. Zusätzlich könntest du noch Mainboardmodell, CPU oder ähnliches miteinbeziehen. Unter Windows vielleicht sogar die Produkt-ID.
    Im Code schreibst du dann eben

    if (getHardwareID()!="gewünschte ID")return 1;
    

    Es muss dir aber trotzdem bewusst sein, dass jedes Kind diese Sperre umgehen kann.


  • Administrator

    Es gibt aber keine Hardware ID! Und die könnte man definitiv nicht mit Standard C++ auslesen, dazu bräuchte man Betriebsystem spezifische Funktionen.

    Es gibt alle möglichen mehr oder weniger eindeutigen IDs auf einem Computer. Eine typische eindeutige ID ist die MAC Adresse der Netzwerkkarte. Man kann allerdings auch Kombinationen aus Harddisk, Mainboard, Prozessor usw. macht, müsste man aber selber durchführen.

    Mich würde aber mal wundernehmen, wozu du dies genau brauchst? Klingt für mich ziemlich unsinnig, wenn das Programm nur auf dem Computer läuft, auf welchem es kompiliert wurde. Zudem dürfte dieser "Schutz" äusserst einfach zu umgehen sein.

    Grüssli



  • ok danke erstmal,

    so ein schutz ist gut für den verkauf von software und mit Hardware id meine ich ncht festplatten nummer die amn in der cmd mit "cmd /c ..." aufruft, das ist mir kla das die leicht zu umgehen sind.

    Nein ich meine z.b. die eingebrannte motherboard Nr. oder sowas, so weit ahbe ich mich noch nie vorausgewargt.

    deswegen frage ich 😉

    mfg



  • festplatten nummer die amn in der cmd mit "cmd /c ..." aufruft

    ??

    Nein ich meine z.b. die eingebrannte motherboard Nr. oder sowas, so weit ahbe ich mich noch nie vorausgewargt.

    Ja, dazu die vorigen Posts. Dazu brauchst du in jedem Fall OS-spezifische Funktionen.

    Ich meinte auch, dass der Schutz sich generell leicht umgehen lässt, unabhängig von dem, was du jetzt genau zur Identifikation nimmst.
    Dazu muss man nur ansatzweise mit einem Debugger umgehen können.



  • pac305 schrieb:

    so ein schutz ist gut für den verkauf von software

    Na, ich weiß nicht. Da draußen gibt es Leute, die sind so viel schlauer als alle Softwarehersteller zusammen. Die cracken alles in kürzester Zeit und verteilen die Cracks kostenlos im Netz. Keiner aus der Industrie konnte bisher eine funktionierende Abwehr dagegen entwickeln.

    Und jetzt kommst du kleiner Mann, denkst dir eine nicht existierende, ins Mainboard eingebrannte Hardware-IDs aus und willst damit den Verkauf von Software ankurbeln. Für mich hört sich das nach Zeitverschwendung an. Ist nicht böse gemeint.

    Aber nichtsdestotrotz: Für diesen Ansatz bräuchtest du eindeutige Merkmale des Systems, die dir Standard-C++ nicht liefern kann. Dafür ist das OS zuständig. Oft wird die MAC-Adresse der Netzwerkkarte (können auch mehrere sein) benutzt, die weltweit eindeutig sein sollte.



  • BOOL GetVolumeInformation(
    LPCTSTR lpRootPathName, // root directory
    LPTSTR lpVolumeNameBuffer, // volume name buffer
    DWORD nVolumeNameSize, // length of name buffer
    LPDWORD lpVolumeSerialNumber, // volume serial number
    LPDWORD lpMaximumComponentLength, // maximum file name length
    LPDWORD lpFileSystemFlags, // file system options
    LPTSTR lpFileSystemNameBuffer, // file system name buffer
    DWORD nFileSystemNameSize // length of file system name
    buffer
    );
    

    Aber wenn Du die Festplattennumer schon für den Laufwerksnamen hälst, dann weiss ich net ob das so ne gute Idee is....
    rya.


  • Mod

    Nukularfüsiker schrieb:

    Aber nichtsdestotrotz: Für diesen Ansatz bräuchtest du eindeutige Merkmale des Systems, die dir Standard-C++ nicht liefern kann. Dafür ist das OS zuständig. Oft wird die MAC-Adresse der Netzwerkkarte (können auch mehrere sein) benutzt, die weltweit eindeutig sein sollte.

    Lol 😃 , die MAC ist sowas von nicht-eindeutig. Das gilt generell für sämtliche im Computer anzutreffende Nummern.



  • SeppJ schrieb:

    Lol 😃 , die MAC ist sowas von nicht-eindeutig. Das gilt generell für sämtliche im Computer anzutreffende Nummern.

    Die Eindeutigkeit ist nicht gesichert, das stimmt. Aber immerhin eindeutig genug, dass sie zum generieren von UUIDs verwendet wurde.


  • Mod

    Nukularfüsiker schrieb:

    SeppJ schrieb:

    Lol 😃 , die MAC ist sowas von nicht-eindeutig. Das gilt generell für sämtliche im Computer anzutreffende Nummern.

    Die Eindeutigkeit ist nicht gesichert, das stimmt. Aber immerhin eindeutig genug, dass sie zum generieren von UUIDs verwendet wurde.

    Bei UUIDs geht es aber nicht um Fälschungssicherheit, sondern darum genügend Entropie zu bekommen, dass man auf mehreren verschiedenen Rechnern unterschiedliche UUIDs erhält.

    Soll ich mal kurz meine MAC-Adresse ändern? (die von meinem primären Ethernetadapter, ist ja nicht so, dass mein Rechner nur eine hätte)

    ifdown
    ifconfig eth0 hw ether 01:23:45:67:89:0A
    ifup
    

    Fertig! Und das Editorfenster im Browser hat's noch nicht einmal gemerkt, ich musste mich nicht neu einloggen oder sonst etwas.

    Die Tatsache, dass Rechner auch gerne mal mehrere oder keine MAC-Adresse haben, macht die sache mit der ID natürlich noch komplizierter.



  • SeppJ schrieb:

    Bei UUIDs geht es aber nicht um Fälschungssicherheit, sondern darum genügend Entropie zu bekommen, dass man auf mehreren verschiedenen Rechnern unterschiedliche UUIDs erhält.

    OP will ein eindeutiges Merkmal.
    Man kann nun feststellen, dass MAC-Adressen und Festplatten-Serial# nicht fälschungssicher und keinesfalls eindeutig sind und sich nach einer Alternative umsehen, die die Anforderungen erfüllt.
    Irgendwann merkt man dann, wie so viele vor einem, dass es keine gibt; dann macht man es wie alle anderen auch (z. B. die UUID-Erfinder) und nimmt schließlich doch, trotz aller Einwände und LOLs, furchtbar leicht fälschbare MAC-Adressen und/oder sonstige Seriennummern. Weil es die beste verfügbare Quelle ist.


Anmelden zum Antworten