MAC-Adresse mit AutoIt auslesen?

07/25/2011 23:31 dommerle#1
Mir kam gerade eine Idee für ein Login-System. Bei diesem System wird die MAC-Adresse des Benutzers ausgelesen, daraus ein Code generiert, den der Benutzer dann dem Verkäufer schicken muss, welcher den passenden Gegencode generiert, der dann gespeichert wird. Diese Code-/MAC-Adressen Kombination wird dann bei jedem Programmstart auf ihre Richtigkeit geprüft.
So kann man die Benutzung auf einen einzigen PC einschränken. :)

Wäre dies möglich? Kann man diese Idee umsetzen? :D

Ich freue mich auf eure Antworten!
07/26/2011 00:40 kknb#2
warum sollte das nicht gehen?

habs als lowbob mit der eindeutigen hdd seriennummer gemacht.
funktion ist iwo ausm inet.

Code:
Func _GetDriveInfo($sDrive)
    $sDrive = StringRegExpReplace($sDrive, '(?i)(.*)([a-z]{1}:)(.*)', '$2')
    Local $sDriveType = DriveGetType($sDrive)
    If $sDriveType <> 'Fixed' And $sDriveType <> 'Removable' Then SetError(1, 0, 1)
    If Not FileExists($sDrive) Then Return SetError(1, 0, 1)
    Local $wbemFlagReturnImmediately = 0x10
    Local $wbemFlagForwardOnly = 0x20
    Local $colItems = ''
    Local $aPartition, $aPhysicalDrive, $aOut[14][2]
    $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
    If Not IsObj($objWMIService) Then Return SetError(2, 0, 2)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_LogicalDiskToPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) then
        For $objItem In $colItems
            If StringInStr($objItem.Dependent, '"' & $sDrive & '"') Then
                $aPartition = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
            EndIf
        Next
    Endif
    If Not IsArray($aPartition) Then Return SetError(3, 0, 3)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDriveToDiskPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) then
        For $objItem In $colItems
            If StringInStr($objItem.Dependent, '"' & $aPartition[0] & '"') Then
                $aPhysicalDrive = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
            EndIf
        Next
    Endif
    If Not IsArray($aPhysicalDrive) Then Return SetError(4, 0, 4)
    $aPhysicalDrive[0] = StringReplace($aPhysicalDrive[0], '\\', '\')
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) then
        For $objItem In $colItems
            If StringInStr($objItem.DeviceID, $aPhysicalDrive[0]) Then
                $aOut[0][0] = 'Volume-Label'
                $aOut[0][1] = DriveGetLabel($sDrive)
                $aOut[1][0] = 'Serial-Nr. (Volume)'
                $aOut[1][1] = DriveGetSerial($sDrive)
                $aOut[2][0] = 'Model'
                $aOut[2][1] = $objItem.Model
                $aOut[3][0] = 'Serial-Nr. (Drive)'
                $aOut[3][1] = StringMid($objItem.PNPDeviceID, StringInStr($objItem.PNPDeviceID, '\', 0, -1) + 1)
                $aOut[3][1] = StringReplace($aOut[3][1], '&0', '')
                $aOut[4][0] = 'Interface'
                $aOut[4][1] = $objItem.InterfaceType
                $aOut[5][0] = 'Size (Bytes)'
                $aOut[5][1] = $objItem.Size
                $aOut[6][0] = 'Media Type'
                $aOut[6][1] = StringRegExpReplace($objItem.MediaType, '[^[:print:]]', ' ')
                $aOut[7][0] = 'Total Cylinders'
                $aOut[7][1] = $objItem.TotalCylinders
                $aOut[8][0] = 'Total Heads'
                $aOut[8][1] = $objItem.TotalHeads
                $aOut[9][0] = 'Total Tracks'
                $aOut[9][1] = $objItem.TotalTracks
                $aOut[10][0] = 'Total Sectors'
                $aOut[10][1] = $objItem.TotalSectors
                $aOut[11][0] = 'Tracks Per Cylinder'
                $aOut[11][1] = $objItem.TracksPerCylinder
                $aOut[12][0] = 'Sectors Per Track'
                $aOut[12][1] = $objItem.SectorsPerTrack
                $aOut[13][0] = 'Bytes Per Sector'
                $aOut[13][1] = $objItem.BytesPerSector
            EndIf
        Next
    Endif
    $objWMIService = ''
    Return $aOut[3][1]
EndFunc
aufruf:

Code:
Global $idnr = "5&34DAC8C4.1.0" ; beispiel, klar wa?
If _GetDriveInfo('c:') <> $idnr And _GetDriveInfo($sDrive) <> "eigene id damit das ding noch auf eigenem rechner läuft----5&692E352&1.1.0" Then
	MsgBox(16, "", "wrong id!")
	Exit
EndIf
ähnliche funktionen gibts für mac, cpu sn und nen haufen anderen käse auch.
aber da das jeder depp mit olly oder deobfuscator umgehen kann völlig nutzlos :)
07/26/2011 05:59 lolkop#3
kknb und wo ist der unterschied zu: :P
Code:
DriveGetSerial ( "path" )
zum threadersteller kann ich nur sagen, das nicht jeder pc eine mac adresse hat, sondern jedes verbaute hardwareteil.

da wären zb.:
board, cpu, jeder einzelne ram stick, festplatten, laufwerke, und selbst angeschlossene drucker/scanner haben ihre eigene hardwareadresse.

willst du ein programm schreiben, welches abhängig von der aktuellen hardware konstellation läuft, kommt es allerdings selbst bei minimalsten änderungen (zb. erweitern des speichers), zu problemen, wie es zb beim neuen microsoft office der fall ist.
eventuell erworbene lizenzen, sind somit nichtmehr weiter nutzbar.
07/26/2011 11:53 kknb#4
Quote:
Originally Posted by lolkop View Post
kknb und wo ist der unterschied zu: :P
Code:
DriveGetSerial ( "path" )
das du damit wesentlich mehr auslesen kannst wie du im source erkennen wirst.
07/28/2011 10:49 Vierus.exe#5
Also das mit der MAC zu machen ist nicht gut da ich z.b. die MAC meines LAN-Adapters Wechsle. Dies geht per Registrie (SoftwareMAC) und ist kein eindeutiges merkmal für den PC.
MfG
Vierus
PS: Ein Anderer vorschlag wäre eine Anmeldung über eine Webseite und aus den Daten dann eine Serial zu Generieren die dann im PG eingegeben werden muss und bei jedem strart des PG´s wird diese mit der Datenbank auf dem Server verglichen. (Hatt dazu einer ne Anleitung oder Tips da ich so was suche :D )
07/28/2011 19:42 ~De@dly Silence~#6
Quote:
Originally Posted by Vierus.exe View Post
Also das mit der MAC zu machen ist nicht gut da ich z.b. die MAC meines LAN-Adapters Wechsle. Dies geht per Registrie (SoftwareMAC) und ist kein eindeutiges merkmal für den PC.
MfG
Vierus
PS: Ein Anderer vorschlag wäre eine Anmeldung über eine Webseite und aus den Daten dann eine Serial zu Generieren die dann im PG eingegeben werden muss und bei jedem strart des PG´s wird diese mit der Datenbank auf dem Server verglichen. (Hatt dazu einer ne Anleitung oder Tips da ich so was suche :D )
Das verhindert aber nicht, dass jemand das Programm inkl. Zugangsdaten weitergibt...