Un simple programa para hacer spam en canales IRC , tambien puede listar canales y usuarios.
Es algo inestable les recomiendo la version en Perl.
Una imagen :
(http://doddyhackman.webcindario.com/images/kingspam04.jpg)
// KingSpam 0.4
// (C) Doddy Hackman 2015
unit spam;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls,
Vcl.Imaging.pngimage, Vcl.ExtCtrls, IdContext, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdCmdTCPClient, IdIRC, PerlRegEx, Vcl.Menus,
ShellApi;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
GroupBox1: TGroupBox;
Label1: TLabel;
host: TEdit;
Label2: TLabel;
port: TEdit;
Label3: TLabel;
nombre: TEdit;
Label4: TLabel;
canal: TEdit;
Label5: TLabel;
spam: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
TabSheet2: TTabSheet;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
canales: TListBox;
users: TListBox;
TabSheet3: TTabSheet;
GroupBox4: TGroupBox;
GroupBox5: TGroupBox;
lista_canales: TListBox;
console1: TMemo;
Label6: TLabel;
canal_agregar: TEdit;
Button4: TButton;
Button5: TButton;
TabSheet5: TTabSheet;
GroupBox8: TGroupBox;
console2: TMemo;
IdIRC1: TIdIRC;
Button9: TButton;
StatusBar1: TStatusBar;
GroupBox6: TGroupBox;
canal_spam_usuarios: TEdit;
TabSheet4: TTabSheet;
GroupBox7: TGroupBox;
Image2: TImage;
Label7: TLabel;
PopupMenu1: TPopupMenu;
L1: TMenuItem;
R1: TMenuItem;
OpenDialog1: TOpenDialog;
file_spam: TListBox;
spam_usuarios: TTimer;
Button11: TButton;
Button6: TButton;
otrospamfile: TListBox;
Image3: TImage;
procedure Button2Click(Sender: TObject);
procedure IdIRC1Raw(ASender: TIdContext; AIn: Boolean;
const AMessage: string);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure L1Click(Sender: TObject);
procedure R1Click(Sender: TObject);
procedure spam_usuariosTimer(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
buscando_usuarios: string;
buscando_canales: string;
control_guardar_canales: string;
control_guardar_users: string;
implementation
{$R *.dfm}
// Functions
procedure savefile(filename, texto: string);
var
ar: TextFile;
begin
AssignFile(ar, filename);
FileMode := fmOpenWrite;
if FileExists(filename) then
Append(ar)
else
Rewrite(ar);
Write(ar, texto + sLineBreak);
CloseFile(ar);
end;
procedure TForm1.Button11Click(Sender: TObject);
begin
StatusBar1.Panels[0].Text := '[+] Finished';
StatusBar1.Update;
IdIRC1.Disconnect;
spam_usuarios.Enabled := false;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
contenido: TStringList;
stream: TFileStream;
begin
file_spam.Clear;
if OpenDialog1.Execute then
begin
spam.Text := OpenDialog1.filename;
contenido := TStringList.Create;
stream := TFileStream.Create((OpenDialog1.filename), fmShareDenyNone);
contenido.LoadFromStream(stream);
for i := 0 to contenido.Count - 1 do
begin
file_spam.Items.Add(contenido[i]);
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
seleccion: integer;
begin
canales.Items.Clear;
buscando_canales := 'yes';
seleccion := MessageDlg('Save Channels', mtInformation, mbYesNo, 0);
if seleccion = mrYes then
begin
control_guardar_canales := 'yes';
end;
StatusBar1.Panels[0].Text := '[+] Searching channels ...';
StatusBar1.Update;
// IdIRC1.Disconnect;
IdIRC1.Nickname := nombre.Text;
IdIRC1.AltNickname := nombre.Text + '123';
IdIRC1.Username := nombre.Text;
IdIRC1.RealName := nombre.Text;
IdIRC1.Password := '';
IdIRC1.host := host.Text;
try
begin
IdIRC1.Connect;
IdIRC1.Raw('LIST');
end;
except
begin
ShowMessage('Error connecting');
end;
end;
if (FileExists(GetCurrentDir + '/logs/' + host.Text + '_canales.txt')) then
begin
ShellExecute(Handle, 'open', Pchar(GetCurrentDir + '/logs/' + host.Text +
'_canales.txt'), nil, nil, SW_SHOWNORMAL);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
seleccion: integer;
begin
users.Items.Clear;
buscando_usuarios := 'yes';
seleccion := MessageDlg('Save users', mtInformation, mbYesNo, 0);
if seleccion = mrYes then
begin
control_guardar_users := 'yes';
end;
StatusBar1.Panels[0].Text := '[+] Searching users ...';
StatusBar1.Update;
// IdIRC1.Disconnect;
IdIRC1.Nickname := nombre.Text;
IdIRC1.AltNickname := nombre.Text + '123';
IdIRC1.Username := nombre.Text;
IdIRC1.RealName := nombre.Text;
IdIRC1.Password := '';
IdIRC1.host := host.Text;
try
begin
IdIRC1.Connect;
IdIRC1.Join(canal.Text);
end;
except
begin
ShowMessage('Error connecting');
end;
end;
if (FileExists(GetCurrentDir + '/logs/' + canal.Text + '_usuarios.txt')) then
begin
ShellExecute(Handle, 'open', Pchar(GetCurrentDir + '/logs/' + canal.Text +
'_usuarios.txt'), nil, nil, SW_SHOWNORMAL);
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
lista_canales.Items.Add(canal_agregar.Text);
end;
procedure TForm1.Button5Click(Sender: TObject);
var
i: integer;
canal_z: string;
begin
StatusBar1.Panels[0].Text := '[+] Spamming channel ...';
StatusBar1.Update;
console1.Clear;
try
begin
IdIRC1.Nickname := nombre.Text;
IdIRC1.AltNickname := nombre.Text + '123';
IdIRC1.Username := nombre.Text;
IdIRC1.RealName := nombre.Text;
IdIRC1.Password := '';
IdIRC1.host := host.Text;
IdIRC1.Connect;
for i := 0 to lista_canales.Count - 1 do
begin
canal_z := lista_canales.Items[i];
IdIRC1.Join(canal_z);
console1.Lines.Add('[+] Spam in channel : ' + canal_z);
IdIRC1.Say(canal_z, file_spam.Items[Random(file_spam.Count - 1) + 0]);
Sleep(2000);
IdIRC1.Part(canal_z);
Sleep(2000);
end;
end;
except
ShowMessage('Error connecting');
end;
IdIRC1.Disconnect;
StatusBar1.Panels[0].Text := '[+] Finished';
StatusBar1.Update;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
StatusBar1.Panels[0].Text := '[+] Spamming users ...';
StatusBar1.Update;
IdIRC1.Nickname := nombre.Text;
IdIRC1.AltNickname := nombre.Text + '123';
IdIRC1.Username := nombre.Text;
IdIRC1.RealName := nombre.Text;
IdIRC1.Password := '';
IdIRC1.host := host.Text;
try
begin
IdIRC1.Connect;
IdIRC1.Join(canal_spam_usuarios.Text);
spam_usuarios.Interval := 10000;
spam_usuarios.Enabled := true;
end;
except
begin
ShowMessage('Error connecting');
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if not DirectoryExists('logs') then
begin
CreateDir('logs');
end;
OpenDialog1.InitialDir := GetCurrentDir;
end;
procedure TForm1.IdIRC1Raw(ASender: TIdContext; AIn: Boolean;
const AMessage: string);
var
code: string;
regex: TPerlRegEx;
otroregex: TPerlRegEx;
canales_encontrados: string;
control: TPerlRegEx;
otrocontrol: TPerlRegEx;
i: integer;
i2: integer;
renicks: string;
listanow: TStringList;
arraynow: array of String;
begin
code := AMessage;
regex := TPerlRegEx.Create();
otroregex := TPerlRegEx.Create();
// console1.Lines.Add(code);
regex.regex := '322 (.*?) (.*?) (.*?) :';
regex.Subject := code;
if regex.Match then
begin
canales_encontrados := regex.Groups[2];
canales.Items.Add(canales_encontrados);
if (control_guardar_canales = 'yes') then
begin
savefile('logs/' + host.Text + '_canales.txt', canales_encontrados);
end;
end;
otroregex.regex := '353 (.*) = #(.*) :(.*)';
otroregex.Subject := code;
if otroregex.Match then
begin
renicks := otroregex.Groups[3];
renicks := StringReplace(renicks, nombre.Text, '', []);
listanow := TStringList.Create;
listanow.Delimiter := ' ';
listanow.DelimitedText := renicks;
for i2 := 0 to listanow.Count - 1 do
begin
users.Items.Add(listanow[i2]);
if (control_guardar_users = 'yes') then
begin
savefile('logs/' + canal.Text + '_usuarios.txt', listanow[i2]);
end;
end;
end;
control := TPerlRegEx.Create();
control.regex := 'End of /LIST';
control.Subject := code;
if control.Match then
begin
if (buscando_canales = 'yes') then
begin
ShowMessage('Channels Loaded');
StatusBar1.Panels[0].Text := '[+] Channels Found';
StatusBar1.Update;
regex.Free;
IdIRC1.Disconnect;
IdIRC1.Destroy;
buscando_canales := 'no';
end;
end;
otrocontrol := TPerlRegEx.Create();
otrocontrol.regex := 'End of /NAMES';
otrocontrol.Subject := code;
if otrocontrol.Match then
begin
if (buscando_usuarios = 'yes') then
begin
ShowMessage('Users Loaded');
StatusBar1.Panels[0].Text := '[+] Users Found';
StatusBar1.Update;
otrocontrol.Free;
IdIRC1.Part(canal.Text);
IdIRC1.Disconnect;
IdIRC1.Destroy();
buscando_usuarios := 'no';
end;
end;
end;
procedure TForm1.L1Click(Sender: TObject);
var
i: integer;
contenido: TStringList;
stream: TFileStream;
begin
if OpenDialog1.Execute then
begin
contenido := TStringList.Create;
stream := TFileStream.Create((OpenDialog1.filename), fmShareDenyNone);
contenido.LoadFromStream(stream);
for i := 0 to contenido.Count - 1 do
begin
lista_canales.Items.Add(contenido[i]);
end;
end;
end;
procedure TForm1.R1Click(Sender: TObject);
begin
lista_canales.Clear;
end;
procedure TForm1.spam_usuariosTimer(Sender: TObject);
var
i: integer;
begin
for i := 0 to users.Count - 1 do
begin
StatusBar1.Panels[0].Text := '[+] Spamming to ' + users.Items[i];
StatusBar1.Update;
console2.Lines.Add('[+] Spamming to ' + users.Items[i]);
IdIRC1.Say(users.Items[i],
file_spam.Items[Random(file_spam.Count - 1) + 0]);
end;
end;
end.
// The End ?
Si lo quieren bajar lo pueden hacer de aca (https://sourceforge.net/projects/spamking/)