Como programar un troyano en VB de forma sencilla.
Texto Completo:
:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:
:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:
..--:: 05. El control Winsock.ocx y creacion de troyanos bajo VB ::--..
by SLAYER
1.- INTRODUCCION
Despues de leer el articulo de SHISEI BRUJO, Programacion en 546.604.465
Pasos y ver la seccion del NetFuck en la que decia:
<< Tampoco funciona en internet ya que no trabaja con puertos, ips,
etc. Eso si funciona en redes locales y en windows nt. Y como no
trabaja con los puertos es muy dificil que lo detecten. Si quieren
uno que funcione en internet, haganlo ustedes ¿ o quieren todo en
bandeja ?. >>
Pues como tiene razon, pues lo he hecho yo. Pero primero veremos como usar el
control Winsock.ocx, en el que se basa el funcionamiento del TrojanSock. El
origen del nombre esta claro, no?
2.- VALE, SI, PERO QUE #!@%& ES EL WINSOCK?
Pues el Winsock es un control ocx incluido por el Visual Basic que permite
establecer conexiones remotas con otros sistemas. ¨Y esto para que sirve?
Pues para lo que quieras. Desde hacer un Winpopup.exe como el de windows (si
no sabes que es ejecutalo, no rompe nada) mandar un simple e-mail hasta para
hacer un troyano :). Funciona con el protocolo TCP/IP o con el UDP. Nosotros
vamos a usar el de toda la vida, el TCP.
3.- BUENO, Y TODO ESTO PARA QUE SIRVE?
Primero tienes que abrir el Visual Basic (evidente, no?) y hacer click
derecho en la barra de controles. A continuacion selecciona la opcion
Componentes. En el cuadro que os saldra teneis que buscar la casilla
Microsoft Winsock Control (la version puede ser distinta) y la activas.
Aceptais y os aparecera en la barra de controles un nuevo boton, el de
nuestro Winsock.ocx. Si le dais doble click si os insertara en el form.
Lo primero que hay que hacer una vez que tenemos nuestro control es ajustarle
las propiedades. La propiedad protocol la ajustamos en 0-sckTCPProtocol (TCP)
Las otras propiedades que hay ajustar pueden hacerse RunTime (en ejecucion).
En localport habra que poner en que puerto escuchara nuestra aplicacion, en
remoteport el puerto al que se mandaran los datos al ordenador remoto y en
remotehost, la direccion IP del ordenador remoto.
Los eventos del control winsock son los siguientes:
Private Sub Winsock1_Close()
Private Sub Winsock1_Connect()
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, _
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, _
ByVal HelpContext As Long, CancelDisplay As Boolean)
Private Sub Winsock1_SendComplete()
Private Sub Winsock1_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)
De momento nosotros solo utilizaremos las que nos permiten hacer la conexion
y recibir y enviar datos:
Private Sub Winsock1_Close()
Private Sub Winsock1_Connect()
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Tambien puede ser util la que nos permite calcular el progreso del envio:
Private Sub Winsock1_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)
Tambien usaremos estos metodos
.Accept <---- Acepta una conexion solicitada
.Close <---- Cierra una conexion
.Connect <---- Establece una conexion
.Listen <---- "Escucha" y recibe datos
.GetData <---- Obtiene los datos que llegan
.SendData <---- Envia los datos
Y bueno, ahora que tenemos todas las funciones, metodos y demas, hay que
hacer un programa cliente-servidor que nos permita enviar y recibir datos
desde un ordenador remoto. Vamos a hacer una simple aplicacion que sirva para
mandar mensajes entre dos ordenadores.
4.- PRIMERA APLICACION CLIENTE - SERVIDOR
Necesitamos 2 aplicaciones, una sera el servidor, y otra el cliente. Primero
haremos el servidor. Abrimos el VB e insertamos en nuestro form los
siguientes controles con sus respectivas propiedades:
Label1 -> Caption="Escriba su mensaje:"
Label2 -> Caption="El usuario remoto respondio:"
TextBox1 -> Justo a la derecha de label1. Name="Mensaje"
Label3 -> Justo a la derecha de label2. Name="Respuesta"
Winsock1 -> Name="Servidor"
Perfecto. Ahora tenemos que insertar el siguiente codigo en nuestro form:
{[--------------------------------- CODIGO --------------------------------]}
'Recuerda que todo lo que empieza por comilla simple (') son comentarios
Private Sub Form_Load()
Servidor.LocalPort = 2001 ' el a~o en que acaba el siglo!
Servidor.Listen 'Aqui ha establecido el puerto local y prepara
'el winsock. para escuchar
End Sub
Private Sub Servidor_ConnectionRequest(ByVal requestID as Long)
Dim Aceptar As Boolean
Dim CodigoRespuesta As Byte
Aceptar = False
'El siguiente codigo pregunta al usuario local si acepta la
'conexion. En caso afirmativo comprueba que no hay ya una
'abierta. Si la hay la cierra. Despues de todo esto, acepta
'la conexion con el metodo .Accept requestID
CodigoRespuesta = MsgBox("¨Acepta la conexion?", vbYesNo)
If CodigoRespuesta = 6 Then Aceptar = True
If Aceptar Then
' Ver Tabla1 para las constantes de la propiedad State
If Servidor.State <> sckClosed then Servidor.Close
Servidor.Accept requestID
End If
End Sub
Private Sub Mensaje_KeyDown(KeyCode As Integer, Shift As Integer)
'Si se pulsa el [ENTER] envia el texto del textbox mediante
'el metodo .SendData Data
If KeyCode=13 then Servidor.SendData Mensaje.text
End Sub
Private Sub Servidor_DataArrival(ByVal bytesTotal as Long)
Dim Datos as String
Servidor.GetData Datos 'Recoge los datos entrantes y los
Respuesta.Caption = Datos 'guarda en Datos. Luego los pasa
'al label de respuesta
End Sub
{[--------------------------------- CODIGO --------------------------------]}
Creo que esta suficientemente comentado para que no quepa ninguna duda.
Aqui va la Tabla1, la de las constantes de la propiedad State:
---------------------------------------------------------------
| Tabla1: Lista de constantes de la propiedad State |
---------------------------------------------------------------
| CONSTANTE | VALOR | DESCRIPCION |
| | | |
| SckClosed | 0 | Cerrado. Valor por defecto |
| SckOpen | 1 | Abierto. |
| SckListening | 2 | Escuchando. |
| SckConnectionPending | 3 | Conexion pendiente. |
| SckResolvingHost | 4 | Resolviendo host. |
| SckHostResolved | 5 | Host resuelto. |
| SckConnecting | 6 | Conectando |
| SckConnected | 7 | Conectado |
| SckClosing | 8 | Cerrando conexion. |
| SckError | 9 | Error. |
|_________________________|_______|_____________________________|
Bueno, ya esta la tabla. Ahora vamos a por la aplicacion cliente. En realidad
es practicamente igual, pero habra que establecer los valores de ordenador
remoto, puerto remoto y puerto local. Crearemos los mismos controles:
textbox, pero con la propiedad Enabled=False y tambien crearemos los mismos
label y el winsock, pero este ultimo tendra el nombre de "Cliente". Ademas
hay que crear un boton con Nombre="Conectar" y Caption="Conectar". El codigo
de la aplicacion cliente es el siguiente:
{[--------------------------------- CODIGO --------------------------------]}
'Recuerda que todo lo que empieza por -'- son comentarios
Private Sub Form_Load()
Cliente.RemotePort = 2001
End Sub
Private Sub Conectar_Click()
Mensaje.Enabled = True
Cliente.RemoteHost = Inputbox("¨A que ordenador se quiere conectar?")
Cliente.Connect
Conectar.Enabled = False
End Sub
Private Sub Mensaje_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode=13 then Cliente.SendData Mensaje.text
End Sub
Private Sub Cliente_DataArrival(ByVal bytesTotal as Long)
Dim Datos as String
Cliente.GetData Datos
Respuesta.Caption = Datos
End Sub
{[-------------------------------- CODIGO ---------------------------------]}
Este codigo no esta comentado, pero es practicamente igual que el anterior,
pero ahora explico el funcionamiento del conjunto cliente-servidor:
La aplicacion cliente consta del boton "Conectar". Este preguntara por la
direccion IP del ordenador remoto (que para hacer pruebas podemos usar el
nuestro con direccion IP 127.0.0.1). Los puertos los establece en Form_Load()
Despues de especificar la IP se conecta al servidor.
El servidor pregunta al usuario si acepta la conexion desde el ordenador
remoto y usa la funcion ConnectionRequest(ByVal requestID as Long). Mira si
hay una conexion ya hecha (Servidor.State <> sckClosed) y en este caso la
cierra. Despues establece la conexion. Una vez que esta hecha la conexion los
controles textbox envian el mensaje al otro ordenador mediante la funcion
SendData. El otro ordenador la recibe mediante la funcion DataArrival y
establece el valor en el label de respuesta.
5.- DESPEDIDA
Se acabo. Espero que os sirva de provecho. Si tengo tiempo acabare del todo
el troyano y preparo un articulo para el proximo numero, si no os preparo una
"suite" de correo con mail-bomber incluido :) (siempre y cuando el editor me
de permiso claro [porfa, dejame hacer otro articulo, porfa])
[ Nex: No se, no se, ... venga bah, el siguiente espacio es tuyo :D]
[ Nex: Y como somos tan asquerosamente lentos para publicar los zines, el
articulo para el 'proximo numero' va en este mismo xDDD ]
SLAYER
Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
*-***-*-***-*-***-*
534154414E204C41
55474853204153
20594F552045
5445524E41
4C5920524F54
*-***-*-***-*-***-*
:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:
-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-
|