Obtener serie MAC en menos o igual a 1 segundo

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Obtener serie MAC en menos o igual a 1 segundo

Mensaje por yasmany »

Hola con todos, estoy tratando de poner clave de activacion a mi software de una manera que no sea facil de obtenerla.
He pensado una vez instalado el soft en la maquina del cliente/usuario en la primera vez que se ejecute obtendrá la direccion MAC y esta direccion se alojará dentro del menu "Acerca de" que posee el software.
El soft tendrá un periodo de prueba, si el usuario quiere comprar la activacion deberá comunicarse con mi persona y me facilitará la serie MAC.
Yo are algunas encriptaciones a esa direccion MAC es decir lo convertiré en una serie tras serie de codigo, este codigo obtenido lo traducirá el soft al ser ingresado para la activacion y una vez desencriptado lo comparará con la serie MAC que tenga la computadora si es identico lo activará.

Pero que pasa si escribo la misma direccion MAC al introducir para la activación?
Pues como dije el soft trata de desencriptar lo escrito y lo transformará en otro texto dando como resultado algo diferente a la direccion MAC.

Una vez aclarada mi idea, quisiera una manito en esto ya que he visto un ejemplo en este foro de como obtener la mac de la PC pero este proceso dura como 2 o 3 segundos y pues quisiera ver la forma de obtenerlo de forma mas breve.

Si alguien pudiese ayudarme fuera genial o si tienen alguna idea mejor para la activacion, pero preferiria obtener la mac :smt001

Saludos... :smt024
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por Dany »

  • ............................................Imagen
    ......................................Imagen
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por yasmany »

Realmente no se me dá muy bien esto... podias darme una manito.

Este un ejemplo que realicé basado en otro. y pues en unas portatiles no me devuelve el numero MAC pero en otros si.

Código: Seleccionar todo

#include <Process.au3>
$rc = _RunDos("getmac>"&@AppDataDir&"\Avy_Antivirus\mac.txt") ; Con esto consigo la MAC desde la consola y creo un txt con datos.
$Fline = FileReadLine (@AppDataDir&"\Avy_Antivirus\mac.txt",4) ; Con esto consigo la MAC fija.
$mac = StringLeft ($Fline, 17) ; Recogo los numeros de la MAC.
MsgBox(64,"Direccion MAC",$mac,-1)
Este otro ejemplo me aparecen otras direcciones a pesar que tambien me devuelve la MAC pero dos direcciones diferentes pero en si no se como obtener el valor real

Código: Seleccionar todo

#include <Constants.au3>
FileWrite(@AppDataDir&"\Avy_Antivirus\mac.txt",_RunStdOutRead("getmac"))
MsgBox(0, "", _RunStdOutRead("getmac"))
Func _RunStdOutRead($sCommand, $sWorkingDirectory = @SystemDir)
     Local $iPID = Run(@ComSpec & ' /c ' & $sCommand, $sWorkingDirectory, @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD), $sOutput = ''
     While 1

          $sOutput &= StdoutRead($iPID)
          If @error Then
               ExitLoop
          EndIf
	 WEnd
     Return $sOutput
EndFunc   ;==>_RunStdOutRead
Estos 2 codes tardan de 1 a 2 segundos en mostrar el resultado.
¿Como puedo utilizar el contenido del enlace que me diste?
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por Dany »

Si usa XP usas GetAdaptersInfo y si usa uno superior usas GetAdaptersAddresses.


No tengo au3 aquí por eso no te coloco un ejemplo.

Saludos
  • ............................................Imagen
    ......................................Imagen
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por PDF »

Has probado con objetos?

Código: Seleccionar todo

$time = TimerInit()
$mac = _CI_GetNetworkAdapter() ; Retorna la direccion mac
$T = TimerDiff($time) / 1000
MsgBox(0, 'MAC ADRESS', "MAC Adress: " & $mac & " Se retorno en: " & $T & " Seg.")

Func _CI_GetNetworkAdapter($strComputer = '.')
	Local $colItems, $objWMIService, $objItem, $MACAdress
	$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
	If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
	$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus > 0', 'WQL', 0x30)
	If Not IsObj($colItems) Then Return SetError(2, 0, 0)
	For $objItem In $colItems
		$MACAdress = $objItem.MACAddress
		$objWMIService = ""
		$colItems = ""
		Return $MACAdress
	Next
EndFunc   ;==>_CI_GetNetworkAdapter
Saludos..
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por yasmany »

Jooooder que está mucho mejor... gracias PDF :smt035
El tuyo es mucho mas efectivo... mil gracias.

Abandonaré el mio... te reirás por lo extenso que lo hice apesar que en caso que una maquina este con virus y no permita ejecutar el CMD no me saldría el resultado, pero con el tuyo me imagino obviamente que sí :smt023

Código: Seleccionar todo

#NoTrayIcon ; no muestra el icono por defecto
#include <Constants.au3> ; importacion, es el archivo al cual se fija para trabajar
If FileExists(@DesktopDir & "\verMac\macText.txt") Then FileDelete(@DesktopDir & "\verMac\macText.txt") ; verifica si existe y lo elimina para crear uno nuevo
If FileExists(@DesktopDir & "\verMac\mac.txt") Then FileDelete(@DesktopDir & "\verMac\mac.txt"); verifica si existe y lo elimina para crear uno nuevo

DirCreate(@DesktopDir&"\verMac\") ; crea una carpeta en el escritorio
FileWrite(@DesktopDir & "\verMac\macText.txt", _RunStdOutRead("ipconfig /all")); llamo a la funcion y lo escribo en un fichero

Func _RunStdOutRead($sCommand, $sWorkingDirectory = @SystemDir)
	Local $iPID = Run(@ComSpec & ' /c ' & $sCommand, $sWorkingDirectory, @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD), $sOutput = ''
	While 1
		$sOutput &= StdoutRead($iPID)
		If @error Then
			ExitLoop
		EndIf
	WEnd
	Return $sOutput
EndFunc   ;==>_RunStdOutRead

$file = FileOpen(@DesktopDir&"\verMac\macText.txt", 0) ; abro el archivo logicamente para poder leer el contenido
While 1 ; ciclo repetitivo
	$line = FileReadLine($file) ; lee cada linea del archivo
	If @error = -1 Then ExitLoop ; si existe un error en la lectura (como por ejemplo se borra el archivo o algo parecido ) sale del bucle

	; comparo los 47 caracteres primeros de cada linea hasta que encuentre uno identico a la comparacion
	If StringLeft($line, 47) = "   Direcci¢n f¡sica. . . . . . . . . . . . . : " Then
		FileWrite(@DesktopDir & "\verMac\mac.txt", StringTrimLeft($line, 47)) ; escribo en un fichero solo la direccion MAC
		FileDelete(@DesktopDir & "\verMac\macText.txt") ; elimino el archivo que cree en un inicio
		FileSetAttrib(@DesktopDir & "\verMac\mac.txt", "+RASH") ; aplica atributos de oculto, archivo, sitema y de solo lectura para que no pueda ser modificado facilmente
		MsgBox(64, "Direccion Física MAC", StringTrimLeft($line, 47)) ; muestro en mensaje la direccion física MAC del ordenador
		ExitLoop ; salgo del bucle y del programa
	EndIf
WEnd
FileClose($file)
Saludos... :smt024
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por yasmany »

Bueno lo compilé y lo estuve probando... sucede que en la compu de mesa si me votó el resultado pero en una portatil me salió el mensaje vacío.
A que se deberá?
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por yasmany »

Comprobando en una portatil si le pongo = 2
WHERE Netconnectionstatus = 2
en vez de >0
WHERE Netconnectionstatus > 0
... hay si me arroja una MAC
como se solucionará para que arroje el resultado en cualquier maquina... para tomar en cuenta la portatil es a 64b y la de mesa es a 32b
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por PDF »

Investigando un poco me encontré que una notebook puede tener varias direcciones físicas de cada adaptador que posea, por ejemplo, el adaptador de wifi, bluetooth, red hospedada, y el de red, cada una de estas direcciones físicas son diferentes, por lo que puede no funcionar el codigo en diferentes máquinas..
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por PDF »

De todos modos creo que de esta forma ya deberia de solucionarse, para retornar al menos una direccion MAC..

Código: Seleccionar todo

$hTime = TimerInit()
$sMac = _CI_GetNetworkAdapter() ; Retorna la direccion mac
If @error Then
	MsgBox(0, 'MAC ADRESS', "Error al retornar la MAC")
Else
	$T = TimerDiff($hTime) / 1000
	MsgBox(0, 'MAC ADRESS', "MAC Adress: " & $sMac & " Se retorno en: " & $T & " Seg.")
EndIf

Func _CI_GetNetworkAdapter($strComputer = '.')
	Local $colItems, $objWMIService, $objItem, $MACAdress
	$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
	If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
	$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus > 0', 'WQL', 0x30)
	If Not IsObj($colItems) Then Return SetError(2, 0, 0)
	For $objItem In $colItems
		$MACAdress = $objItem.MACAddress
		If Not ($MACAdress = "") Then
			$objWMIService = ""
			$colItems = ""
			Return $MACAdress
		EndIf
	Next
	Return SetError(3, 0, 0)
EndFunc   ;==>_CI_GetNetworkAdapter
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por yasmany »

gracias colega... pero no me dio resultado realice esto y ahi si me funciona.

Código: Seleccionar todo

$mac = _CI_GetNetworkAdapter1() ; Retorna la direccion mac
If IsString($mac) <> 1 Then
	$mac = _CI_GetNetworkAdapter2()
	MsgBox(0, 'OPCION 2', $mac)
Else
	MsgBox(0, 'OPCION 1', $mac)
EndIf

Func _CI_GetNetworkAdapter1($strComputer = '.')
	Local $colItems, $objWMIService, $objItem, $MACAdress
	$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
	If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
	$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus > 0', 'WQL', 0x30)
	If Not IsObj($colItems) Then Return SetError(2, 0, 0)
	For $objItem In $colItems
		$MACAdress = $objItem.MACAddress
		$objWMIService = ""
		$colItems = ""
		Return $MACAdress
	Next
EndFunc   ;==>_CI_GetNetworkAdapter1

Func _CI_GetNetworkAdapter2($strComputer = '.')
	Local $colItems, $objWMIService, $objItem, $MACAdress
	$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
	If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
	$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus = 2', 'WQL', 0x30)
	If Not IsObj($colItems) Then Return SetError(2, 0, 0)
	For $objItem In $colItems
		$MACAdress = $objItem.MACAddress
		$objWMIService = ""
		$colItems = ""
		Return $MACAdress
	Next
EndFunc   ;==>_CI_GetNetworkAdapter2
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por PDF »

Tambien podrias utilizar:

"SELECT * FROM Win32_NetworkAdapter WHERE MACAddress > 0" para enumerar los adaptadores que tengan Direccion MAC diferente de 0, ó mejor aún
"SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = True" para enumerar solo los adaptadores fisicos...

Saludos :smt024
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por yasmany »

Existe inconvenientes si el internet se encuentra deshabilitado es decir los adaptadores... entonces no da una direccion MAC, que lástima.
niguna de las formas resueltas aqui dan solucion a eso. :smt010
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por PDF »

Aquí puedes ver la documentación de Win32_NetworkAdapter: http://msdn.microsoft.com/en-us/library ... s.85).aspx

En todo caso, puedes buscar otras alternativas para lo que quieres hacer como por ejemplo el serial del equipo, o del disco duro en cual este instalado..
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Obtener serie MAC en menos o igual a 1 segundo

Mensaje por yasmany »

Gracias PDF... investigare un poco mas :smt024
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
Responder