fork download
  1. <?php
  2.  
  3. function gen_random_string($len, $dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")
  4. {
  5. $dict_len = strlen($dict);
  6. $res = "";
  7. while ($len--) $res .= $dict[mt_rand(0, $dict_len - 1)];
  8. return $res;
  9. }
  10.  
  11. function enc_and_obfuscate($data, $enc_key)
  12. {
  13. $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
  14. $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
  15. $enc_data = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $enc_key, $data, MCRYPT_MODE_ECB, $iv);
  16. $result = base64_encode($enc_data);
  17. $result = str_replace(array("+", "/", "="), array("-", "_", ""), $result);
  18. $result = mask_enc_key($result, $enc_key);
  19. return trim($result);
  20. }
  21.  
  22.  
  23. function enc_and_hash($data, $enc_key)
  24. {
  25. $data = serialize($data);
  26. $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM);
  27. $enc_key = pack("H*", $enc_key);
  28. $sha_hash = hash_hmac("sha256", $data, substr(bin2hex($enc_key), -32));
  29. $encryped_hash = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $enc_key, $data . $sha_hash, MCRYPT_MODE_CBC, $iv);
  30. $result = base64_encode($encryped_hash) . "|" . base64_encode($iv);
  31. return $result;
  32. }
  33.  
  34. function dec_and_hash($data, $enc_key)
  35. {
  36. $data = explode("|", $data . "|");
  37. $enc_data= base64_decode($data[0]);
  38. $iv = base64_decode($data[1]);
  39. if (strlen($iv) !== mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC)) {
  40. return false;
  41. }
  42. $enc_key = pack("H*", $enc_key);
  43. $result = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $enc_key, $enc_data, MCRYPT_MODE_CBC, $iv));
  44. $sha_hash_from_result = substr($result, -64);
  45. $result = substr($result, 0, -64);
  46. $sha_hash = hash_hmac("sha256", $result, substr(bin2hex($enc_key), -32));
  47. if ($sha_hash !== $sha_hash_from_result) {
  48. return false;
  49. }
  50. $result = unserialize($result);
  51. return $result;
  52. }
  53.  
  54. function decrypt_reply_data($data)
  55. {
  56. $vars = explode(":", $data);
  57. $count_vars = count($vars);
  58. $enc_key = "";
  59. for ($i = 1; $i < $count_vars;$i++) {
  60. $enc_key .= substr($vars[$i], 0, 1);
  61. }
  62.  
  63. $data_length = substr($data, 0, 1);
  64. $data_length .= substr($data, -1);
  65. $data = substr($data, 1);
  66. $data = substr($data, 0, -1);
  67. preg_match_all("/[0-9a-zA-Z]{".$data_length."}\:./", $data, $preg_result);
  68. $data = str_replace($preg_result[0], array(), $data);
  69. $base64_data = str_replace(array("-", "_"), array("+", "/"), $data);
  70. $base64_data_parity = strlen($base64_data) % 4;
  71. if ($base64_data_parity) {
  72. $base64_data .= substr("====", $base64_data_parity);
  73. }
  74.  
  75. $enc_data = base64_decode($base64_data);
  76. $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
  77. $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
  78. $decrypted_result = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $enc_key, $enc_data, MCRYPT_MODE_ECB, $iv);
  79. return $decrypted_result;
  80.  
  81. }
  82.  
  83.  
  84. function validate_result($data,$check_token,$md5_secret) {
  85. $cur_date = date("Ymd");
  86. $data = decrypt_reply_data(dec_and_hash($data, md5("XTREAMCODES_FTW!")));
  87. preg_match_all('/<(.*?)>([^<]+)<\/\1>/i', $data, $vars);
  88. $result = array();
  89. foreach ($vars[1] as $name => $value) {
  90. $result[$value] = $vars[2][$name];
  91. }
  92. print_r($data);
  93.  
  94. if (!is_array($result)) {
  95. exit("Invalid License Server Response");
  96. }
  97.  
  98. if (empty($result["md5hash"])) {
  99. return array("status" => "Invalid");
  100. }
  101.  
  102. if ($result["md5hash"] != md5($md5_secret . $check_token))
  103. {
  104. $result["status"] = "Invalid";
  105. $result["description"] = "MD5 Checksum Verification Failed";
  106. return $result;
  107. }
  108.  
  109. if ($result["status"] == "Active") {
  110. $result["checkdate"] = $cur_date;
  111. $localkey = serialize($result);
  112. $localkey = base64_encode($localkey);
  113. $localkey = md5($cur_date . $md5_secret) . $localkey;
  114. $localkey = strrev($localkey);
  115. $localkey = $localkey . md5($localkey . $md5_secret);
  116. $localkey = wordwrap($localkey, 80, "\n", true);
  117. $result["localkey"] = $localkey;
  118. return $result;
  119. }
  120. }
  121.  
  122.  
  123. function mask_enc_key($enc_value, $enc_key)
  124. {
  125. $splitted_value = str_split($enc_key);
  126. $rand_len = rand(70, 90);
  127. $splitted_rand_len = str_split($rand_len);
  128.  
  129. $enc_value = substr_replace($enc_value, $splitted_rand_len[0], 0, 0);
  130. $enc_value = substr_replace($enc_value, $splitted_rand_len[1], strlen($enc_value), 0);
  131.  
  132. for ($i = 0; $i < count($splitted_value); $i++) {
  133. $enc_value = substr_replace($enc_value, "+", rand(2, strlen($enc_value) - 1), 0);
  134. }
  135. foreach ($splitted_value as $enc_key => $letter ) {
  136. $enc_value = preg_replace('/\+/', gen_random_string($rand_len) . ":" . $letter, $enc_value, 1);
  137. }
  138. return $enc_value;
  139.  
  140. }
  141.  
  142. $md5_secret = "96b90f3b34525c54ff21c0caa1f71d19";
  143.  
  144. if (!isset($_POST) || empty($_POST)) return;
  145. $v = array_shift($_POST);
  146. if ($data = decrypt_reply_data(dec_and_hash($v,md5("dAaCZzzzaAsdASDa!##@")))) {
  147. parse_str($data,$vars);
  148. if (isset($vars['check_token'])) {
  149. $check_token = $vars['check_token'];
  150. $md5Hash = md5( $md5_secret. $check_token);
  151. $result = '<status>Active</status>'
  152. . '<registeredname></registeredname>\n'
  153. . '<companyname></companyname>\n'
  154. . '<email></email>\n'
  155. . '<serviceid>1</serviceid>\n'
  156. . '<productid>1</productid>\n'
  157. . '<productname></productname>\n'
  158. . '<regdate>2015-02-15</regdate>\n'
  159. . '<nextduedate>2050-12-15</nextduedate>\n'
  160. . '<billingcycle></billingcycle>\n'
  161. . '<validdomain></validdomain>\n'
  162. . '<validip></validip>\n'
  163. . '<validdirectory></validdirectory>\n'
  164. . '<configoptions>Extra Load Balancer Servers=5' . '</configoptions>\n'
  165. . '<customfields></customfields>\n'
  166. . '<addons>name=CopyRights Removal;nextduedate=0000-00-00;status=Active|name=Detect Reshares with No permissions;nextduedate=2015-04-15;status=Active</addons>\n'
  167. . '<md5hash>'.$md5Hash.'</md5hash>';
  168.  
  169. $result = enc_and_hash(enc_and_obfuscate($result,gen_random_string(32)),md5("XTREAMCODES_FTW!"));
  170. print $result;
  171. }
  172. };
  173.  
Success #stdin #stdout 0.02s 25688KB
stdin
Standard input is empty
stdout
Standard output is empty