Fingerprint/HardwareID generieren, aber was als Quelle nehmen ?

  • he leute,
    ich zerbreche mir gerade den Kopf darüber einen PC zuverlässig identifizieren zu können.
    So recht einfallen tut mir nur die möglichkeit aus den hardwarekomponenten etwas zu generieren.
    Die wechseln ja meist nicht oft bzw wäre das in kauf zu nehmen.
    Das nächste wäre dann die umsetzung. Wie lese ich den aus komponenten diese eindeutigen infos aus hmmmm ?

    Einmal editiert, zuletzt von WhiteLion (9. November 2010 um 23:05)

  • Die MAC-Adresse eines Netzwerkcontrollers sollte auch eindeutig sein.
    Nur in dem unwahrscheinlichen Fall das diese bewusst verändert wurde könnte sie mehrfach auftreten.

    Ein paar Möglichkeiten diese auszulesen:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $aMACs = _GetMacAdresses()
    _ArrayDisplay($aMACs)

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetMacAdresses()
    Local $Ret = _GetMacAdressesCMD()
    If @error Then
    Local $Ret = _GetMacAdressesWMI()
    Return SetError(@error, @extended, $Ret)
    EndIf
    Return $Ret
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetMacAdressesWMI()
    ;by AspirinJunkie
    Local Static $oWMI = ObjGet("winmgmts:\\localhost\root\CIMV2")
    If @error Or Not IsObj($oWMI) Then Return SetError(1, @error, 0)
    Local $aItems = $oWMI.ExecQuery("SELECT MACAddress FROM Win32_NetworkAdapter " & _
    "WHERE ((MACAddress Is Not NULL) AND (Manufacturer <> " & _
    "'Microsoft'))", "WQL", 0x10 + 0x20)

    [/autoit] [autoit][/autoit] [autoit]

    If IsObj($aItems) Then
    For $x In $aItems
    If IsDeclared("aReturn") <> -1 Then
    Local $aReturn[1] = [StringReplace($x.MACAddress, ':', '-')]
    Else
    ReDim $aReturn[UBound($aReturn) + 1]
    $aReturn[UBound($aReturn) - 1] = StringReplace($x.MACAddress, ':', '-')
    EndIf
    Next
    Return $aReturn
    Else
    Return SetError(2, 0, 0)
    EndIf
    EndFunc ;==>_GetMacAdressesWMI

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetMacAdressesCMD()
    ;by AspirinJunkie
    $sCMD = _GetCMDReturn("ipconfig", "/all")
    $aRegExRet = StringRegExp($sCMD, "[^-]([0-9A-F]{2}(?:-[0-9A-F]{2}){5})[^-]", 3)
    If @error Then
    Return SetError(1, @error, '')
    Else
    Return $aRegExRet
    EndIf
    EndFunc ;==>_GetMacAdressesCMD

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetCMDReturn($sCMD, $sParameter = '')
    ;by AspirinJunkie
    Local $sPara = '', $sReturn = '', $sline
    If $sParameter <> '' Then $sPara = ' ' & $sParameter
    Local $iPID = Run($sCMD & $sPara, '', @SW_HIDE, 2)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $sline = StdoutRead($iPID)
    If @error Then ExitLoop
    $sReturn &= $sline
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Return $sReturn
    EndFunc

    [/autoit]

    3 Mal editiert, zuletzt von AspirinJunkie (9. November 2010 um 21:26)

  • Könntest du recht haben. Allerdings ist es im Privaten wiederum eher wahrscheinlich, dass der Benutzer öfters die MAC Adresse ändert (z.B. um bei Kabelanbietern eine neue IP Adresse zu erhalten)

  • Ja an sowas hab ich nicht gedacht - stimmt.

    WhiteLion
    Lies ansonsten einfach mal bestimmte Informationen aus (Grafikkartenhersteller, Board-ID etc.) - lässt sich meistens gut mit WMI machen.
    Kombiniere sie dann immer in der selben Reihenfolge zu einem Gesamtstring und berechne dir aus diesem String dann eine md5-Checksumme.
    Diese Summe dürfte (in Abhängigkeit was du alles mit reinnimmst) ziemlich eindeutig sein.

    Einmal editiert, zuletzt von AspirinJunkie (9. November 2010 um 21:36)

  • Hm,

    soweit ich weiß ist die MAC Adresse Hardwaregebunden und lässt sich nicht ändern, es sei denn man tauscht die Netzwerkkarte aus !!!
    Bitte korrigiert mich, wenn ich etwas falsches sage ...

    EDIT:
    Weitere Beispiele: S/N der CPU, (OS-)HDD und wie von AspirinJunkie bereits erwähnt, die S/Ns der Hauptplatine usw.
    So macht Bill es auch ;)


    Gruß
    Greenhorn


  • Ich würde die Seriennummer vom Board nehmen. Das Board wird so gut wie nie getauscht und die nummer ist eindeutig.
    Lässt sich recht einfach per WMI auslesen. AFAIK hatte Oscar mal sowas.

    Je nachdem was du vorhast können MAC-Adressen zu problemen führen wenn ein Rechner mehrere Netzwerkgeräte hat.

  • Techmix, wie "Netzwerkkarte verloren"?
    Die "MAC ändern" brennt keine neue Daten in den Chip (EEprom), lediglich beim Auslesen werden die auszulesenden Daten durch "geänderte" ersetzt. Die MAC ist jedenfalls in allen mir bekannten Karten in HARDWARE gegossen, wäre es anders, wäre das System unnütz. Bei steckbaren Netzwerkkarten stand die MAC früher im BootROM, heute ist sie vielleicht in einem anderen Chip vergraben, aber sicher nicht durch ein 08/15 Programm hardwaremässig zu ändern.
    Vgl. http://de.wikipedia.org/wiki/Locally_Administered_Address und http://de.wikipedia.org/wiki/Universal…istered_Address
    Ich kenne Admins, die Ihr Netzwerk statt nach IP-Adressen nach (eigens zusammengestellten) MAC-Addressen sortieren :D da werden dann die MAC-Adressen den IP´s "zugeordnet", so kann man auch auf den untersten Layern schnell erkennen "wer" da mit "wem" spricht 8) .