Página 1 de 1

MAC ADDRESS, IP Y NETBIOS Seguridad en tus Programas.

Publicado: 01 Mar 2010, 22:48
por learvit
Hola todos.

Bueno, pues aqui les quiero compartir algo que me costo mucho trabajo y no encontre en internet, asi que como se muy poco de programacion edite varios programas hasta darle al clavo.

Si quieres que tu programa solo sea ejecutado en maquinas muy particulares, este pequeño programa es para ti, lo que hace es tomar la MAC, LA IP y el nombre de red del equipo y compararlo, si cumple con lo solicitado, nos deja ejecutar el programa, si no nos revota.

en mi caso, hice un programita para mi trabajo, donde solo hay 2 personas quienes tienen pemitido hacer lo que programe :smt005 entonces, si alguien se los llega a quitar, o a tomar de su computadora, no servira de nada :smt003 solo puede ser ejecutado para la computadora que fue designada..

tambien considero que puede ser util añadido a un TRIAL :D asi un trial y para 1 equipo en particular, esta mas dificil aun :smt005

para agregarlo a nuestro programa, solo hay que llamarlo (Agrega esta linea a tu programa)

Código: Seleccionar todo

#Include<mac3.au3>
Y a este codigo lo guardas en un archivo au3 llamado mac3.au3 y lo pones en el mismo directorio de tu programa.

Código: Seleccionar todo

;Luis (learvit) [email protected]
_CallFunction(0)

Func _CallFunction($iFunctionNr)
	Local $sMsg = 'Fertig.', $aInfo
	Switch $iFunctionNr
		Case 0
			$aInfo = _CI_GetNetworkAdapter()

	EndSwitch

EndFunc


Func _CI_GetNetworkAdapter($strComputer = '.')
	Local $aReturn[1][1] = [[ _
			'Mac Adress:']]
	Local $x = 0, $objWMIService, $colItems, $colItems2
	$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
		$x += 1
		ReDim $aReturn[$x + 1][1]
		$aReturn[$x][0] = $objItem.MACAddress
		$var = "E2:E6:16:20:0A:35"   <- MAC DEL EQUIPO1 DONDE DESEAS QUE SEA EJECUTADO TU PROGRAMA
		$var2= "00:22:68:53:DF:8B"  <- MAC DEL EQUIPO2 DONDE DESEAS QUE SEA EJECUTADO TU PROGRAMA
		$var3= "08:00:27:86:BC:11"  <- MAC DEL EQUIPO3 DONDE DESEAS QUE SEA EJECUTADO TU PROGRAMA

Select
	Case $var = $objItem.MACAddress and @ComputerName = "Aqui_El_Nombre_de_red_de_Tu_Compu" And @IPAddress1 = "10.10.10.10"
		MsgBox(0, "Seguridad virtual", "Aceptado", 1)
		ExitLoop
	Case $var2 = $objItem.MACAddress And @ComputerName = "computer_name" And @IPAddress1 = "10.20.30.40"
		MsgBox(0, "Seguridad virtual", "Aceptado", 1)
		ExitLoop
	Case $var3 = $objItem.MACAddress And @ComputerName = "computer_name" And @IPAddress1 = "192.168.1.107"
		MsgBox(0, "Seguridad virtual", "Aceptado", 1)
		ExitLoop
	Case Else
		MsgBox(0, "Seguridad virtual", "¡No tienes Permitido el uso de este programa!")
		Exit
EndSelect

		

			
	Next
	EndFunc
Ya fue probado en diferentes equipos solo permitiendo el acceso a los predestinados :smt003


Y si no sabes de donde sacar esos datos??? solo agrega estas lineas antes de las VAR (donde estan listadas las MAC)

Código: Seleccionar todo

MsgBox(0, "Seguridad virtual", $objItem.MACAddress)
MsgBox(0, "Seguridad virtual", @ComputerName)
MsgBox(0, "Seguridad virtual",  @IPAddress1)
Espero sea de su agrado mi aporte
Saludos desde México :smt024

Re: MAC ADDRESS, IP Y NETBIOS Seguridad en tus Programas.

Publicado: 01 Mar 2010, 23:46
por Chefito
Bien para ser el primer programa :smt023 .
Seguro que le interesa a varios.

Solo poner una nota de interés. Además de poder sacar la mac con un objeto wmi, otra forma no muy complicada es recogiendo la información de consola que te da la ejecutar el archivo getmac.exe :smt002 .

Saludos.

Re: MAC ADDRESS, IP Y NETBIOS Seguridad en tus Programas.

Publicado: 02 Mar 2010, 10:06
por Ximorro
Un poco confuso el programa, pero lo bueno es ir pegándose con ello e ir aprendiendo. Seguro que lo irás mejorando.

Te hago algunas sugerencias, no son críticas ¡es para aprender! Veo que le has echado interés y esfuerzo, así que te interesará.
Un poco extraña esa función inicial, puedes llamar a _CI_GetNetworkAdapter() directamente y ya está. Además las variables $sMsg y $aInfo no las usas. Supongo que esa función viene de un copy-paste de algo más grande pero ahora no te hace falta.

La matriz $aReturn no la usas para nada, yo quitaría todo lo referente a ella porque sólo complica la cosa.
Además no haría falta redimensionarla cada vez dentro del bucle, se podría hacer fuera según el tamaño de $colItems.

Mírate el tema de matrices, te serán muy útiles. Por ejemplo en vez de tener varias variables $var, y los diferentes IP y nombres de PC, podrías tener una matriz para cada cosa que agrupe los elementos (o una matriz multidimensional para todo). De esa manera es más fácil de ampliar y se maneja con un bucle sin necesidad de estar añadiendo Cases al Select

El bucle For creo que no cumple su función. Si tienes varias MAC eso las recorre, muy bien, pero imagina que la primera que pilla no es la que tienes registrada en las variables $var, entonces el Select irá al Else y te dirá que no puedes ejecutarlo, aunque tu segunda MAC sí sea la buena.
La cosa sería aceptarlo si CUALQUIERA de las MAC del ordenador es aceptada.
Para ello:
.- quitas ese Else
.- Pones una nueva variable booleana $aceptado = $False ANTES del bucle For. Para tenerlo ordenadito arriba junto a las demás variables de la función.
.- Dentro de cada Case haces $aceptado = $True, pues has encontrado una combianción MAC-IP-PC aceptada, aunque ese ordenador tenga otras MAC no registradas.
.- DESPUÉS del Next pones un condicional IF mirando $aceptado, si está a False es cuando das el mensaje de no aceptación y sales.

En vez de hacerlo te lo explico y así aprenderás más. En realidad me habría costado menos hacerlo ;-) Si este es tu primer programa como sigas con estas cosas seguro que acabas sorprendiéndonos. ¡Ánimo!