Skip to content

Instantly share code, notes, and snippets.

/VK_Url.php Secret

Created November 22, 2017 22:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/32a94fff47006975ce95189dfbd0d402 to your computer and use it in GitHub Desktop.
Save anonymous/32a94fff47006975ce95189dfbd0d402 to your computer and use it in GitHub Desktop.
<?php
class VK_Url {
private static $encoding = 'utf-8';
private static $vkStr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN0PQRSTUVWXYZO123456789+/=';
public static function decode($url) {
if (strpos($url, 'audio_api_unavailable') !== false) {
if (preg_match('/\?extra\=(.*)#(.*)/', $url, $urlArray)) {
$extra = self::vk_o($urlArray['1']);
$opsArray = array_reverse(explode(chr(9), self::vk_o($urlArray['2'])), true);
foreach ($opsArray as $value) {
$argsArray = explode(chr(11), $value);
$op_ind = array_shift($argsArray);
switch ($op_ind) {
case 'v':
$extra = self::vk_v($extra);
break;
case 'r':
$extra = self::vk_r($extra, $argsArray['0']);
break;
case 'x':
$extra = self::vk_x($extra, $argsArray['0']);
break;
case 's':
$extra = self::vk_s($extra, $argsArray['0']);
break;
}
}
return $extra;
}
}
return $url;
}
private static function vk_o($string) {
$stringLen = mb_strlen($string, self::$encoding);
$result = '';
for ($s = 0, $index2 = 0; $s < $stringLen; $s++) {
$sym_index = mb_strpos(self::$vkStr, $string[$s], 0, self::$encoding);
if ($sym_index !== false) {
$i = (($index2 % 4) !== 0) ? (($i << 6) + $sym_index) : $sym_index;
if (($index2 % 4) != 0) {
$index2++;
$shift = -2 * $index2 & 6;
$result .= chr(0xFF & ($i >> $shift));
} else {
$index2++;
}
}
}
return $result;
}
private static function vk_s($str, $start) {
$len = strlen($str);
if ($len > 0){
$cur = abs($start);
$shuffle_pos = [];
for ($i = $len - 1; $i >= 0; $i--){
$cur += $i;
$shuffle_pos[$i] = $cur % $len;
}
for ($i = 1; $i < $len; $i++) {
$offset = $shuffle_pos[$len - $i - 1];
$prev = $str[$i];
$str[$i] = $str[$offset];
$str[$offset] = $prev;
}
}
return $str;
}
private static function vk_v($str) {
return strrev($str);
}
private static function vk_r($str, $i) {
$vk_str2 = self::$vkStr.self::$vkStr;
$vk_str2_len = strlen($vk_str2);
$len = strlen($str);
$result = '';
for ($s = 0; $s < $len; $s++) {
$index = strpos($vk_str2, $str[$s]);
if ($index !== false) {
$offset = ($index - $i);
if ($offset < 0) {
$offset += $vk_str2_len;
}
$result .= $vk_str2[$offset];
} else {
$result .= $str[$s];
}
}
return $result;
}
private static function vk_x($str, $i) {
$xor_val = ord($i['0']);
$str_len = strlen($str);
$result = '';
for ($i = 0; $i < $str_len; $i++) {
$result .= chr(ord($str[$i]) ^ $xor_val);
}
return $result;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment