Des Mac's Seriennummer auslesen?

  • Original von James
    Howdy M.A.X,

    war mir neu, dass es Macs ohne Seriennummer gibt - schon wieder was dazugelernt.

    Ich kann mir aber ehrlich gesagt nicht vorstellen, dass das wirklich *orginal* Applerechner sind, die über keine Seriennummer verfügen - eher Clones... Woher hast Du diese Info?

    Pfiad de

    - Peter -


    Hallo zusammen,

    ich selbst habe einen G4 Sawtooth.
    Die Seriennummer ist bei diesen Rechnern nicht über ioreg, SystemProfiler und so weiter abfragbar.
    Ein Orginalrechner ist aber an der Original Apple Plakette mit Seriennummer und BarCode auf der Rückseite zu erkennen.
    Auf dieser Plakette steht neben der Ausstattung bezüglich RAM und HD auch die Ethernet Adress, welche wie schon angesprochen die MAC Adresse ist.

    Diese Info habe ich vom Apple TechSupport bzw. von meinem G4.
    Manuell kommt man übrigens sehr schnell an die Seriennummer, wenn man unter dem Apfel das Menü "Über diesen Mac" öffnet und zweimal auf die Schrift klickt, wo die Version steht; beim ersten Klick erscheint die Build Nummer (funktioniert aber nicht bei diesen gewissen Baureihen)
    -------------------

    Ändern kann man die MAC Adresse AFAIK bei manchen Geräten, obwohl früher mal Standard war, dass diese nicht geändert werden können soll (weltweite Einddeutigkeit)
    Mir sind zwei (angebliche) Gründe bekannt:

    1. Seit viele Netzwerkkarten aus sog. Billigproduktionsländern stammen, kam/kommt es immer wieder mal vor, dass Karten mit identischen MAC Adressen aufgetaucht sind (Nachbauten?)
    Da die physikalische Adressierung in Ethernet Netzwereken auf dem Layer 2 geschieht, führt sowas zu nicht lösbaren Netzwerkproblemen.

    2. Es gab wohl auch entsprechende Forderungen von Netzwerkadministratoren, die aus Gründen der Vereinfachung (Dokumentation in großen Netzten; Zugriffskontrolle auf Layer 2 -Ebene) MAC Adressen selber (z. B. fortlaufend) vergeben wollten.
    Habe Mut, Dich Deines eigenen Verstandes zu bedienen.
    (Immanuel Kant)
  • hallo zusammen,

    noch eine Ergänzung zum Thema Ethernet Adresse <-> Mac Adresse <-> IP Adresse.

    Ethernet ist ein Protokoll, dsa auf den Layern 1 und 2 des ISO/OSI Modells angesiedelt ist .

    Layer 1: Kabel (z. B. UTP Kat. x oder Coaxial), Stecker (z. B. RJ 45 oder BNC) etc.
    Layer 2:Art der Netzwerkkarte, also auch die MAC Adresse etc.

    Die IP Adresse befindet sich auf dem Layer 3, TCP und UDP auf dem Layer 4.

    Alternativ kann auf den Layern 3-4 Layern beispielsweise reines Apple Talk laufen, das ja bekanntlich auch ohne TCP/IP auskommt.
    Trotzdem ist Apple Talk auch ein Ethernet Protokoll.

    Nur mal so als Hintergrund; hab extra nochmal nachgesehen.
    -----------
    PS, ich finde den Befehl nimmer, mit dem man im CLI die Seriennummer auslesen kann - letzte Woche hab ichs noch gemacht (und gleich wieder vergessen)
    Habe Mut, Dich Deines eigenen Verstandes zu bedienen.
    (Immanuel Kant)
  • Mit dem programmieren stehe ich noch am Anfang. Aber eines weiß ich FlexLM und die Seriennummerngeschichte sind relativ sicher. Bis halt wieder jemand ein kleines Programm schreibt das einem den dazu gehörenden Registrierungscode für die Software ausspuckt. Aber wenn die Firma sich damit zufrieden gibt, mach es halt so. Der Dongle ist da noch eine Ecke sicherer, dafür nervt sowas aber tierisch den User. Ich hab gar nicht genug USB Anschlüsse um alle Dongles und andere USB Geräte gleichzeitig reinzustecken... Wenn es wenigstens mal einen Dongle für alles geben würde, das wäre wohl die einzige sinnvolle Alternative... naja bis einer auch das hackt, aber das wird schon schwieriger. Und als kleine Anekdote zum Schluss: Hatte mal nen Artikel über Hardware Fälschungen gelesen. Da haben die doch glatt eine große Menge Netzwerkkarten gefälscht. Alle mit der selben Mac Adresse. lol Ein Typ z.B. hatte dann 2 davon gekauft und sich gewundert warum das Netzwerk nicht lief.
  • hallo M.A.X.

    also hier erstmal die Ausgabe von James´ Programm mit Returnvalue:

    Quellcode

    1. shell > ./getMachineSerialNumber
    2. This machines serial-# is ' '
    3. shell > echo $?
    4. 0

    auf meinem iBook G4 800 sieht es so aus:

    Quellcode

    1. shell > ./getMachineSerialNumber
    2. This machines serial-# is 'UV123456PGZ'


    Es gibt aber noch eine andere Möglichkeit die Seriennummer auszulesen, und zwar so:
    G4 Sawtooth:

    Quellcode

    1. shell > system_profiler SPHardwareDataType | grep Serial | tr -d "Serial Number: "

    iBook G4 800:

    Quellcode

    1. shell > system_profiler SPHardwareDataType | grep Serial | tr -d "Serial Number: "
    2. UV123456PGZ


    Ich habe keine Ahnung, ob man Shellkommandos in C oder c++ Programme einbauen kann.
    Würde mich aber interessieren.
    Falls man mit wenigen Worten (einem Anfänger) erklären kann, wie das Programm von James funktioniert, würde mich das ebenfalls interessieren.

    @LarryH
    gehen nicht diese WIBU-Key Sachen in diese Richtung (ein Dongel für unterschiedliche Software)?
    Zumindest werden da AFAIK Seriennummern innerhalb eines Netzwerks verwaltet.
    Habe Mut, Dich Deines eigenen Verstandes zu bedienen.
    (Immanuel Kant)
  • Okay, dann habe ich wohl einen WIBU Key hier. Der ist für Logic von emagic und die haben es einfach mal in XS Key umbenannt. Ich dachte er wäre speziell für Logic hergestellt worden. Mal sehen ob der sich in Zukunft auch für andere Software benutzen lässt. Danke für die WIBU Info, vielleicht kann ich es ja nochmal brauchen, in ferner Zukunft. :) Achja, HarryL ist mein nickname und nicht LarryH. Aber vielleicht übernehme ich den LarryH als neuen nickname.
  • Bzgl.: Logic benutzt meines Wissens einen Rainbow-Key. Aber seit Rainbow sich aus dem Markt zurückgezogen hat, hat Apple/Emagic vielleicht den Dongle-Hersteller gewechselt. Aber es handelt sich hierbei sicher um einen proprietären Dongle, der ausschließlich für Logic programmiert ist.

    Bzgl.: WIBU key. Der besagte Key nennt sich CodeMeter. Das Problem ist die Marketing Strategie: WIBU möchte, dass sich der End-User ein CodeMeter kauft um damit verschiedenen Software-Schlüssel im Dongle zu verwalten. Das scheint mir nicht sehr erfolgversprechend. Ob es CodeMeter schon für OS X gibt, weiß ich nicht. Aber es wird sicher bald Tools geben, mit denen man die Registrierungsdaten im CodeMeter editieren kann.

    Ich arbeite an einer Mach-O nativen, Dongle-basierten Softwareprotection, die sich auch ohne Programmieraufwand anwenden lässt. Selbstverständlich empfehlen wir, sowohl eigene Routinen zu benutzen wie auch die von mir entwickelte Softwareprotection zu benutzen. Damit erreicht man einen sehr guten Schutz vor Cracks. (Ich verrate aber jetzt nicht für wen ich arbeite - ich möchte hier nicht als Spammer angesehen werden.)

    Bzgl.: FlexLM. MacroVision hat zwar einen guten Ruf, aber ich habe bereits einen Crack für Shake gesehen, das auch mit FlexLM geschützt ist. Solange ein Schutzmechanismus nur softwarebasiert ist, braucht man auch nur Software patchen um den Schutz auszuhebeln. Bei Dongle basierten Systemen braucht man zum Cracken immerhin einen Dongle und den kann man sich nicht downloaden. Das Problem mit den USB-Ports sit zugegebenermassen nicht von der Hand zu weisen, vor allem wenn man mehr Dongles als USB-Ports hat. Andererseits ist dies die beste Umsetzung der allgemein üblichen Lizenzbestimmungen, die erlauben, dass Du ein Programm auf mehreren Rechnern installieren kannst, aber nur auf einem Rechner zur Zeit benutzen darfst. Bei FlexLM ist das schon problematischer - siehe die Quark XPress 6 Story - da muss man nochmal extra bezahlen, um XPress 6 für einen zweiten Rechner freizuschalten.

    Ein Client-Server basiertes Lizenzmanagementsystem bieten inzwischen fast alle Dongle Hersteller an.
  • Original von ssb
    ....
    <br><br>
    Bzgl.: WIBU key. Der besagte Key nennt sich CodeMeter. Das Problem ist die Marketing Strategie: WIBU möchte, dass sich der End-User ein CodeMeter kauft um damit verschiedenen Software-Schlüssel im Dongle zu verwalten. Das scheint mir nicht sehr erfolgversprechend. Ob es CodeMeter schon für OS X gibt, weiß ich nicht. Aber es wird sicher bald Tools geben, mit denen man die Registrierungsdaten im CodeMeter editieren kann.

    ArchiCAD für OSX arbeitet mit WIBU Key - Dann wird es diesen CodeMeter schon geben müssen, oder hab ich jetzt was falsch verstanden?

    Außerdem habe ich gesehen, dass es bereits Cracks für Dongle geschütze Software gibt - wie das funktioniert weiss ich nicht und interessiert mich auch nur am Rande, da ich es mir - abgesehen von der moralischen Frage - nicht leisten kann mit gecrackter Software zu arbeiten.
    In meiner Naivität denk ich mir aber, das eine Software die Dongle-geschützt ist nur dann ohne Dongle laufen kann, wenn man die Software an sich verändert (wie auch immer).
    Bin allerdings auf diesem Gebit absoluter Laie.
    Habe Mut, Dich Deines eigenen Verstandes zu bedienen.
    (Immanuel Kant)
  • Original von D.Mon ArchiCAD für OSX arbeitet mit WIBU Key - Dann wird es diesen CodeMeter schon geben müssen, oder hab ich jetzt was falsch verstanden?
    Außerdem habe ich gesehen, dass es bereits Cracks für Dongle geschütze Software gibt - wie das funktioniert weiss ich nicht und interessiert mich auch nur am Rande, da ich es mir - abgesehen von der moralischen Frage - nicht leisten kann mit gecrackter Software zu arbeiten. In meiner Naivität denk ich mir aber, das eine Software die Dongle-geschützt ist nur dann ohne Dongle laufen kann, wenn man die Software an sich verändert (wie auch immer). Bin allerdings auf diesem Gebit absoluter Laie.

    WIBUKey ist der proprietäre Dongle, den WIBU für jeden Softwarehersteller anders konfiguriert - so wie das andere Dongle-Hersteller (wie auch mein Arbeitgeber) das auch tun. Damit wirst Du nur ArchiCAD-Lizenzen verwalten können. CodeMeter ist was ganz anderes. CodeMeter richtet sich an Shareware-Hersteller. Der End-User kauft im Computer-Laden seinen CodeMeter um darauf die Lizenzen für die gekaufte Shareware zu verwalten. Aber warum soll jemand erst im Laden 20 Euro bezahlen, damit er die Software benutzen kann, für die er schon 10 Euro oder mehr bezahlt hat?

    Klar gibt es Cracks für Dongle-geschützte Software. Aber das hängt auch davon ab, wie eng die Software an den Dongle gebunden ist. Wenn die Software beim Start nur schaut ob ein Dongle da ist und dann nix mehr macht, dann lässt sich so ein Schutz mit geeigneten Tools recht schnell entfernen. Aber das kann man viel besser machen, indem man beispielsweise im Hintergrund den Dongle wiederholt abfragt, oder die Crypto-Funktionen des Dongles (fast alle können Ver-/Entschlüsseln) benutzt.

    Du liegst ganz richtig, das Cracken von (mit oder ohne Dongle) geschützter Software bedeutet, dass durch Änderungen im Programm das Lizenzmanagement ausgehebelt wird. Dazu braucht man eigentlich nur einen guten Debugger und Assemblerkenntnisse, dann kann man mittels Reverse-Engineering dem Schutzmechanismus auf die Spur kommen. Solange alles in Software gemacht wird (wie FlexLM) kommt man weiter. Auf einem externen Hardware-Dongle kommt man aber mit dem Debugger nicht drauf. Dazu kommt, dass die größte Sicherheit nur durch Verschlüsselung erreicht wird. Mit den heutigen Verschlüsselungsmethoden ist man da schon auf einer sehr sicheren Seite. Mit meiner Software binde ich die Programme durch Verschlüsselungen an den Dongle - und dass passiert auch in regelmäßigen Abständen im Hintergrund. Durch weitere Massnahmen versuche ich jedem Cracker das Knacken des Programmes richtig schwer zu machen. Ohne den angebundenen Dongle ist es wegen der Verschlüsselung ohnehin fast aussichtslos, mit einem dem richtigen Dongle aber immernoch richtig schwer. Aber nichts ist unmöglich. Wenn der Aufwand für den Cracker sehr groß wird, dann wird er entweder aufgeben oder er hat das Programm erst geknackt, wenn es schon veraltet ist. Die größte Hürde ist dabei eben die Verschlüsselung.

    Ansonsten gilt, was Moshé Feldenkrais gesagt hat:
    Es gibt keine Sicherheit, nur die Angst sie zu verlieren.
  • oder Du schreibst Bücher, so wie Kevin

    - obwohl - ich glaube ein richtiger SoftwareCracker war der gar nicht.
    Angefangen hatte der doch mit Manipulation von Telefondiensten soweit ich weiss.
    Hochinteressante Geschicht, aber total offtopic
    ------
    als was arbeitest du schon wieder M.A.X. :D
    Habe Mut, Dich Deines eigenen Verstandes zu bedienen.
    (Immanuel Kant)
  • Original von M.A.X Du unterschätz das mal nicht. Als guter Cracker bekommst du (nachdem du wieder aus dem Knast raus bist ;)) die besten Jobs in der Sicherheits-Software-Industrie. :D

    Recht hast Du, mein Kollege hat so seinen Job bekommen: auf der Systems hat er jemanden in unserer Firma (er ist allerdings schon länger hier als ich) angesprochen: "Wie sieht es aus - ich cracke Euren Dongle, bekomme ich dann einen Job?". Meine wenngleich wesentlich geringeren Erfahrungen auf diesem Gebiet (ich habe aber nie was davon veröffentlicht) waren bei meiner Bewerbung sicher auch hilfreich. Auf jeden Fall wurde der Dongle und die Software dazu durch ihn wesentlich sicherer.
  • hallo zusammen,

    das ist ja eine sehr interessante Diskussion.

    Die Frage ist nur: Wie lernt man sowas?
    (Noch dazu im Selbststudium)

    Ich persönlich interessiere mich aufgrund meiner Zweitausbildung eher für die Sicherheit von Netzwerken und Servern.
    Aber ich denke, das Gesagte lässt sich in diesen Bereich (im übertragenen Sinne) mindestens genauso gut anwenden.
    Habe Mut, Dich Deines eigenen Verstandes zu bedienen.
    (Immanuel Kant)
  • Wie funktioniert das Uaslesen der IORegistry & Unix Befehle von C aus aufrufen

    Original von D.Mon
    hallo M.A.X.

    ...

    Ich habe keine Ahnung, ob man Shellkommandos in C oder c++ Programme einbauen kann.
    Würde mich aber interessieren.



    Hallo D.Mon

    'System()' der stdclib heisst in diesem Fall Dein Freund! ;)

    Ein 'man system' erklärt, wie er angewandt wird...




    Falls man mit wenigen Worten (einem Anfänger) erklären kann, wie das Programm von James funktioniert, würde mich das ebenfalls interessieren.


    Hmm ist der Sourcecode so schlecht dokumentiert? :rolleyes:

    Also Ich iteriere durch die Einträge der IORegistry Database, suche den Eintrag 'IOPlatformSerialNumber' und gebe den schlicherdings zurück. Das ist alles. :)


    Übrigens - von einem Verändern der MAC-Adresse des Ethernet-Interfaces rate ich ab. Die Gründe hierfür wurden ja schon erläutert und ich unterstütze die Thesen der Schreiber...

    Schöne Grüsse

    - James -
  • hallo James,

    danke für dein Feddback.
    Hmm ist der Sourcecode so schlecht dokumentiert?

    Nein,im Gegenteil, aber ich muss gestehen: das ist mir einfach noch ein bisschen zu hoch.
    Diese Woche ist mir allerdings schon wieder manches klarer als letzte Woche :D.
    Bitte nicht vergessen, ich bin wirklich ein blutiger Anfänger und muss mir zudem alles selbst (bzw. mit Hilfe dieses großartigen Forums) beibringen.

    Also Ich iteriere durch die Einträge der IORegistry Database, suche den Eintrag 'IOPlatformSerialNumber' und gebe den schlicherdings zurück. Das ist alles. :)

    okay, soweit ist mir das (einigermaßen) klar.
    Trotzdem habe ich noch einige Fragen:

    1. man kann das doch dann auch so lösen:

    Quellcode

    1. #include<stdio.h>
    2. #include<stdlib.h>
    3. // Seriennummer des Mac ausgeben
    4. int main()
    5. {
    6. system("system_profiler SPHardwareDataType | grep Serial | tr -d \"Serial Number: \"");
    7. return 0;
    8. }

    2. Warum ist dein Programm rd. 15 x (rd 12 x ohne den "tr" Filter) schneller ?
    Ich nehme mal an, dass die shell nicht schnell genug arbeitet, oder

    3. Gibt es noch andere Vor- und Nachteile der beiden Ansätze ?

    ------

    Quellcode

    1. system("ioreg -l | grep IOPlatformSerialNumber");

    würde auch gehen, ist aber um den faktor 150 langsamer.
    Ist auch klar, weil die Ausgabe von ioreg -l viel größer ist.

    -------------
    Und zurück zum Urproblem:
    Rechner wie mein Sawtooth, deren SerialNumber nicht in der IORegistry steht, können dann diese Software nicht verwenden, oder wie seh ich das ?
    Kann man denn auch in die IORegistry schreiben (ich vermute mal eher nicht, jedenfalls keine Seriennummern.
    Das wäre ja wie das Ausschlagen der Motorblock- oder Fahrgestellnummer beim Auto)
    Habe Mut, Dich Deines eigenen Verstandes zu bedienen.
    (Immanuel Kant)
  • Seriennummern Auslesen - Interessante Ansätze

    Original von D.Mon
    hallo James,

    danke für dein Feddback.
    Hmm ist der Sourcecode so schlecht dokumentiert?

    Nein,im Gegenteil, aber ich muss gestehen: das ist mir einfach noch ein bisschen zu hoch.
    Diese Woche ist mir allerdings schon wieder manches klarer als letzte Woche :D.
    Bitte nicht vergessen, ich bin wirklich ein blutiger Anfänger und muss mir zudem alles selbst (bzw. mit Hilfe dieses großartigen Forums) beibringen.


    Hallo werter D.Mon,

    Klasse - Das ist der beste Weg zum *Vollkommenen* Coder! :) Und das Forum rund um die Leute und dem Initiator Kay hier ist wirklich klasse!


    Also Ich iteriere durch die Einträge der IORegistry Database, suche den Eintrag 'IOPlatformSerialNumber' und gebe den schlicherdings zurück. Das ist alles. :)

    okay, soweit ist mir das (einigermaßen) klar.
    Trotzdem habe ich noch einige Fragen:

    1. man kann das doch dann auch so lösen:

    Quellcode

    1. #include<stdio.h>
    2. #include<stdlib.h>
    3. // Seriennummer des Mac ausgeben
    4. int main()
    5. {
    6. system("system_profiler SPHardwareDataType | grep Serial | tr -d \"Serial Number: \"");
    7. return 0;
    8. }


    Jau, das geht freilich auch! Übrigens - Interessantes Shell Konstrukt! :)


    2. Warum ist dein Programm rd. 15 x (rd 12 x ohne den "tr" Filter) schneller ?
    Ich nehme mal an, dass die shell nicht schnell genug arbeitet, oder

    Nun das "Problem" ist, dass ein System einen Shell Prozess generiert und darin werden sequentiell noch zwei weitere Shell-Kommandos geladen und gestartet, nämlich grep und tr. Diese müssen erst geladen und reloziert werden - also vom Runtime-Environment des geforkten Shell-Prozesses gehandhabt werden. Da geht ein Aufruf mit einigen PPC-Assembler 'bl func' in einer shared lib - sorry .dylib - um Einiges schneller ;)


    3. Gibt es noch andere Vor- und Nachteile der beiden Ansätze ?

    Generell würde ich raten auf system() zu verzichten, außer es geht nicht anders. Ich zumindest habe dabei immer etwas Bauchschmerzen, weil ich mich auf das Environment darunter verlassen muß...



    ------

    Quellcode

    1. system("ioreg -l | grep IOPlatformSerialNumber");

    würde auch gehen, ist aber um den faktor 150 langsamer.
    Ist auch klar, weil die Ausgabe von ioreg -l viel größer ist.
    -------------

    Und weil ganz schön viel Daten über die Pipe transferiert werden. Und wie gesagt der grep liest die Daten der Pip erst wieder ein, filtert sie und gibt das Resultat aus. All das sind Child-Prozesse in dem mit System erzeugten Shell-Prozess und das ist "teuer" ;)


    Und zurück zum Urproblem:
    Rechner wie mein Sawtooth, deren SerialNumber nicht in der IORegistry steht, können dann diese Software nicht verwenden, oder wie seh ich das ?
    Kann man denn auch in die IORegistry schreiben (ich vermute mal eher nicht, jedenfalls keine Seriennummern.
    Das wäre ja wie das Ausschlagen der Motorblock- oder Fahrgestellnummer beim Auto)


    Hab ich noch nicht probiert. Nun, Dein angebrachter Vergleich ist ein sehr Guter. Aber ein ändern der Permissions von einer ausreichend mächtigen Person (=Thor äh root) würde die nötige Schlagkraft sicher aufbringen :-). Aber ich würde von solchen "tollkühnen" Unternehmungen weit Abstand nehmen...

    Für mich war es auch neu, daß einige Macs über keine Seriennummer verfügen. So habe ich durch dieses interessanten Beiträge auch wieder einiges hinzugelernt. Dank Euch!

    Frohe Ostern!


    Tschöööö

    - James -