Home Hacking y Seguridad Malware Programar troyanos en Visual Basic

Ultimos Mensajes del Foro

Manual Aleatorio

La cara oculta de internet (PDF)
En este documento se explican las partes de internet que no todo el mundo llega a conocer, con explicaciones para que todo el mundo las entienda.
Leer más...
Programar troyanos en Visual Basic Imprimir E-mail
Hacking y Seguridad - Malware
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
                                              *-***-*-***-*-***-*


:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:
-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-