elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  [Delphi] Creacion de un IRC Bot
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Delphi] Creacion de un IRC Bot  (Leído 3,407 veces)
BigBear


Desconectado Desconectado

Mensajes: 545



Ver Perfil
[Delphi] Creacion de un IRC Bot
« en: 24 Septiembre 2013, 21:37 pm »

[Titulo] : Creacion de un IRC Bot
[Lenguaje] : Delphi
[Autor] : Doddy Hackman

[Temario]

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

0x01 : Introduccion
0x02 : Conectando con el servidor
0x03 : Listando usuarios
0x04 : Mandar mensajes
0x05 : Recibir privados
0x06 : Reconocer comandos
0x07 : Testeando
0x08 : Bibliografia

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

0x01 : Introduccion

Bueno , voy a empezar este manual sobre como hacer un bot irc.

Para este manual necesitan tener instalado TIdIRC y TPerlRegEx en Delphi , el primero me vino por defecto en Delphi 2010 y el segundo lo pueden bajar e instalar aca

Nota : Proximamente presentare mi irc bot llamado Claptrap en honor al robot de bordelands xDD.

¿ Que es IRC ?

Segun wikipedia , IRC (Internet Relay Chat) es un protocolo de comunicación en tiempo real basado en texto, que permite debates entre dos o más personas. Se diferencia de la mensajería instantánea en que los usuarios no deben acceder a establecer la comunicación de antemano, de tal forma que todos los usuarios que se encuentran en un canal pueden comunicarse entre sí, aunque no hayan tenido ningún contacto anterior. Las conversaciones se desarrollan en los llamados canales de IRC, designados por nombres que habitualmente comienzan con el carácter # o & (este último sólo es utilizado en canales locales del servidor). Es un sistema de charlas ampliamente utilizado por personas de todo el mundo.

0x02 : Conectando con el servidor

Lo de siempre , creamos un proyecto nuevo de la siguiente forma : File->New->VCL Forms Application , como en la siguiente imagen.



Una vez hecho esto vamos a crear la interfaz para todo el manual.

Lo que vamos a necesitar es usar :

6 Labels
3 Edit
3 Botones
1 ListBox (para los usuarios conectados)
2 Memo

Y los componentes TPerlRegEx y IdIRC

Una imagen de como deberia quedar :



Una vez hecho esto llego la hora de realizar la conexion , entonces hacemos doble click en el boton de "conectar" o el nombre que le pusieron ustedes para poner el siguiente codigo :

Código
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.  
  4.  IdIRC1.Host := Edit1.Text; // Usamos el contenido de Edit1 para reconocer el host a conectarse
  5.  IdIRC1.Port := 6667; // Usamos 6667 para el puerto del host
  6.  IdIRC1.Nickname := Edit3.Text; // Usamos el contenido de Edit3.Text como nickname
  7.  IdIRC1.Username := Edit3.Text + ' 1 1 1 1';
  8.  // Declaramos el username para entrar
  9.  IdIRC1.AltNickname := Edit3.Text + '-123'; // Declaramos el nick alternativo
  10.  
  11.  try // Intentamos hacer esto ....
  12.  
  13.    begin
  14.  
  15.      IdIRC1.Connect; // Iniciamos la conexion
  16.      IdIRC1.Join(Edit2.Text); // Usamos Edit2 como el nombre del canal a entrar
  17.  
  18.    end;
  19.  
  20.  except // Si algo sale mal ...
  21.    begin
  22.      ShowMessage('Error'); // Mostramos error con ShowMessage()
  23.  
  24.    end;
  25.  end;
  26.  
  27. end;
  28.  

Una imagen de como quedo :



Con esto ya tenemos la conexion entonces usamos el segundo boton llamado "desconectar" o el nombre que ustedes le pusieron , hacemos doble click y agregamos este codigo :

Código
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. begin
  3.  IdIRC1.Disconnect; // Nos desconectamos del canal en el que estamos
  4. end;
  5.  

Se podria decir que con esto ya tenemos para conectarnos y desconectarmos del canal sin ningun problema.

Pero para variar las cosas vamos a usar el memo1 como consola de las cosas que pasan durante la conexion , entonces vamos al diseño del formulario , buscamos el IdIRC1 , le hacemos un solo click y nos fijamos en object inspector para despues ir
a la parte de eventos , buscamos el evento OnRaw , le hacemos doble click y agregamos este codigo :

Código
  1. procedure TForm1.IdIRC1Raw(ASender: TIdContext; AIn: Boolean;
  2.  const AMessage: string);
  3. begin
  4.  Memo1.Lines.Add(AMessage); // Agregamos al memo1 lo que AMessage recibe
  5. end;
  6.  


Una imagen de donde esta la parte del evento y de paso muestro como quedo el codigo :



Eso seria la parte de como conectarnos y desconectarnos de un canal irc.

0x03 : Listando usuarios

Esta es la parte en la que usamos PerlRegEx , que es un componente que nos permite usar las expresiones regualares de Perl en Delphi.

Entonces buscamos el evento "NicknamesListReceived" en el componente IdIRC1 que esta en el formulario para hacer doble click en el evento y poner el siguiente codigo.

Código
  1. procedure TForm1.IdIRC1NicknamesListReceived
  2.  (ASender: TIdContext; const AChannel: string; ANicknameList: TStrings);
  3. var
  4.  i: integer; // Declaramos i como entero
  5.  i2: integer; // Declaramos i2 como entero
  6.  renicks: string; // Declaramos renicks como string
  7.  listanow: TStringList; // Declaramos listanow como StringList
  8.  arraynow: array of String; // Declaramos arraynow como array of string
  9.  
  10. begin
  11.  
  12.  ListBox1.Clear; // Limpiamos el contenido de ListBox1
  13.  
  14.  for i := 0 to ANicknameList.Count - 1 do // Listamos con for los nicks que se encuentran
  15.  // en ANicknameList
  16.  begin
  17.  
  18.    PerlRegEx1.Regex := '(.*) = ' + Edit2.Text + ' :(.*)';
  19.    // Establecemos la expresion regular
  20.    // a usar
  21.  
  22.    PerlRegEx1.Subject := ANicknameList[i]; // Buscamos el nick en ANicknameList
  23.  
  24.    if PerlRegEx1.Match then // Si perlregex encuentra algo ...
  25.    begin
  26.      renicks := PerlRegEx1.SubExpressions[2]; // Declaramos como renicks el segundo resultado de
  27.      // la expresion regular
  28.  
  29.      renicks := StringReplace(renicks, Edit3.Text, '', []);
  30.      // Borramos de renicks el nombre
  31.      // de nuestro bot
  32.  
  33.      listanow := TStringList.Create; // Declaramos como TStringList a listanow
  34.      listanow.Delimiter := ' '; // Establecemos que se busque los nicks entre espacios en blanco
  35.      listanow.DelimitedText := renicks; // Realizamos la busqueda
  36.  
  37.      for i2 := 0 to listanow.Count - 1 do // Listamos la lista 'listanow' que contiene los nicks
  38.      begin
  39.        ListBox1.Items.Add(listanow[i2]); // Agregamos a ListBox1 los nicks encontrados
  40.      end;
  41.  
  42.    end;
  43.  
  44.  end;
  45.  
  46. end;
  47.  

Les dejo una imagen de como nos deberia quedar el codigo y de donde esta el evento que usamos.



0x04 : Mandar mensajes

Mandar mensajes usando el componente de indy es muy facil , solo tenemos que hacer doble click en el tercer boton , en mi caso le puse de texto "spam now" , ustedes pueden
ponerle el que quieran , cuando este en el codigo del formulario en la parte del tercer boton pongan el siguiente codigo.

Código
  1. procedure TForm1.Button3Click(Sender: TObject);
  2. var
  3.  i: integer; // Declaramos i como entero
  4. begin
  5.  IdIRC1.Say(Edit2.Text, 'hola publico'); // Mandamos un mensaje publico al canal en el que
  6.  // estamos
  7.  for i := 0 to ListBox1.Count - 1 do // Abrimos los items de listbox usando un for
  8.  begin
  9.    IdIRC1.Say(ListBox1.Items[i], 'hola privado');
  10.    // Mandamos un privado al nick de la lista
  11.  end;
  12.  
  13. end;
  14.  

Una imagen de como les deberia quedar el codigo :



0x05 : Recibir privados

Otra cosa facil de hacer gracias a el componente de indy es que se pueden recibir y leer los mensajes privados que nos mandan , para hacer esto vamos al evento OnPrivateMessage de IdIRC y ponemos
el siguiente codigo.

Código
  1. procedure TForm1.IdIRC1PrivateMessage(ASender: TIdContext; const ANicknameFrom,
  2.  AHost, ANicknameTo, AMessage: string);
  3. begin
  4.  Memo3.Lines.Add(ANicknameFrom + ' : ' + AMessage); // Mostramos en el memo3 el nickname
  5.  // de quien nos esta mandando el mensaje y ':' que separa el nick del mensaje que nos
  6.  // enviaron
  7. end;
  8.  

Una imagen de donde esta el evento y como quedo el codigo.



0x06 : Reconocer comandos

Esta es la parte mas importante en un irc bot , que es para poder mandar comandos al bot o hacer cierta cosa como un SQLiScanner o AdminFinder u otra cosa para dichoso
Defacing.

Para hacer esto nos vamos a basar en mensajes privados , de esa forma no estamos delatando al bot en el canal publico , entonces volvemos al evento OnPrivateMessage del punto
anterior para actualizarlo con este codigo nuevo :

Código
  1. procedure TForm1.IdIRC1PrivateMessage(ASender: TIdContext; const ANicknameFrom,
  2.  AHost, ANicknameTo, AMessage: string);
  3. begin
  4.  
  5.  Memo3.Lines.Add(ANicknameFrom + ' : ' + AMessage);
  6.  
  7.  // Mostramos en el memo3 el nickname
  8.  // de quien nos esta mandando el mensaje y tambien ':' que separa el nick del mensaje que nos
  9.  // enviaron
  10.  
  11.  PerlRegEx1.Regex := '!help'; // Usamos esta linea para comprobar si AMessage contiene !help
  12.  PerlRegEx1.Subject := AMessage; // Buscamos en  AMessage
  13.  
  14.  if PerlRegEx1.Match then // Si se encontro ....
  15.  begin
  16.    IdIRC1.Say(ANicknameFrom,
  17.      'el comando disponible es : !scanear <cmd1> <cmd2>');
  18.    // Respondemos
  19.    // con el unico comando disponible
  20.  end;
  21.  
  22.  PerlRegEx1.Regex := '!scanear (.*) (.*)'; // Capturamos lo que se encuentre a la derecha de
  23.  // !scanear y hacemos un espacio para capturar lo que
  24.  // esta al lado de lo que encontramos
  25.  // en realidad son dos comandos
  26.  PerlRegEx1.Subject := AMessage; // Buscamos los dos comandos en AMessage que
  27.  // contiene el mensaje que nos estan enviando
  28.  
  29.  if PerlRegEx1.Match then // Si se encontro algo ...
  30.  begin
  31.    IdIRC1.Say(ANicknameFrom, 'comando 1 : ' + PerlRegEx1.SubExpressions[1]);
  32.    // Le respondemos
  33.    // al que nos envio el mensaje privado con el valor del primer comando que nos envio
  34.    IdIRC1.Say(ANicknameFrom, 'comando 2 : ' + PerlRegEx1.SubExpressions[2]);
  35.    // Le respondemos
  36.    // al que nos envio el mensaje privado con el valor del segundo comando que nos envio
  37.  end;
  38.  
  39. end;
  40.  

Una imagen de donde esta el evento y de como quedo el codigo.



0x07 : Testeando

Una vez hecho todo esto podemos probar como quedo todo , les dejo unas imagenes que de como
funciona.







Eso seria todo

0x08 : Bibliografia

http://es.wikipedia.org/wiki/Internet_Relay_Chat
http://delphiallimite.blogspot.com.ar/2007/09/creando-un-cliente-de-chat-irc-con-indy_18.html
http://delphiallimite.blogspot.com.ar/2007/09/creando-un-cliente-de-chat-irc-con-indy.html

--========--
  The End ?
--========--

Version PDF
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Creacion de un troyano: Visual Basic o Delphi?
Programación General
Bomb-P 1 2,201 Último mensaje 14 Abril 2013, 14:35 pm
por 0xDani
[Delphi] Creacion de un Server Builder « 1 2 »
Programación General
BigBear 11 6,049 Último mensaje 17 Julio 2013, 13:16 pm
por OmarHack
[Delphi] Creacion de un Joiner
Programación General
BigBear 0 1,939 Último mensaje 29 Agosto 2013, 01:16 am
por BigBear
[Delphi] Creacion de un Keylogger
Análisis y Diseño de Malware
BigBear 5 6,127 Último mensaje 12 Octubre 2014, 03:49 am
por Fabian994
[Delphi] Creacion de un Crypter
Análisis y Diseño de Malware
BigBear 0 3,231 Último mensaje 12 Abril 2015, 21:54 pm
por BigBear
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines