Недавно начал изучать Java & Android. Появился спортивный интерес разобрать код javascript Вконтакте, который дешифрует ссылку на аудиозапись и переписать его на java. С авторизацией и получением json аудиозаписей кое-как разобрался, но вот с javascript (судя повсему еще и обфусцированным) засада. Вот часть кода:
function o(t) {
if (!i() && ~t.indexOf('audio_api_unavailable')) {
var e = t.split('?extra=') [1].split('#'),
o = '' === e[1] ? '' : a(e[1]);
if (e = a(e[0]), 'string' != typeof o || !e) return t;
o = o ? o.split(String.fromCharCode(9)) : [
];
for (var s, r, n = o.length; n--; ) {
if (r = o[n].split(String.fromCharCode(11)), s = r.splice(0, 1, e) [0], !l[s]) return t;
e = l[s].apply(null, r)
}
if (e && 'http' === e.substr(0, 4)) return e
}
return t
}
function a(t) {
if (!t || t.length % 4 == 1) return !1;
for (var e, i, o = 0, a = 0, s = ''; i = t.charAt(a++); ) i = r.indexOf(i),
~i && (e = o % 4 ? 64 * e + i : i, o++ % 4) && (s += String.fromCharCode(255 & e >> ( - 2 * o & 6)));
return s
}
function s(t, e) {
var i = t.length,
o = [
];
if (i) {
var a = i;
for (e = Math.abs(e); a--; ) e = (i * (a + 1) ^ e + a) % i,
o[a] = e
}
return o
}
Object.defineProperty(e, '__esModule', {
value: !0
}),
e.audioUnmaskSource = o;
var r = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN0PQRSTUVWXYZO123456789+/=',
l = {
v: function (t) {
return t.split('').reverse().join('')
},
r: function (t, e) {
t = t.split('');
for (var i, o = r + r, a = t.length; a--; ) i = o.indexOf(t[a]),
~i && (t[a] = o.substr(i - e, 1));
return t.join('')
},
s: function (t, e) {
var i = t.length;
if (i) {
var o = s(t, e),
a = 0;
for (t = t.split(''); ++a < i; ) t[a] = t.splice(o[i - 1 - a], 1, t[a]) [0];
t = t.join('')
}
return t
},
i: function (t, e) {
return l.s(t, e ^ vk.id)
},
x: function (t, e) {
var i = [
];
return e = e.charCodeAt(0),
each(t.split(''), function (t, o) {
i.push(String.fromCharCode(o.charCodeAt(0) ^ e))
}),
i.join('')
}
Отсюда я понял, что в переменную t поступает ссылка вида:
https:\/\/vk.com\/mp3\/audio_api_unavailable.mp3?extra=AhzIEgTJAteTzMTFy2Lkrw9RnNb3t19OBxrJAejsCO8Ov2rul29LueLVthbLyKDHuKvYmdy2nfDpzuz1q2jiytDLtc9JzweZlwPgzhy\/mOP1tLrJlMfHwvaUAdu2nZzmBNrdnZz6CwnVrvm6yvnyEf03lujXALbWDwqTtgCXu2fZEur0ChznnwfhvY93DxjwwKT6yKuZC2XcmZj3lxrFmL91BLyODtuOshvoCKqVx1HAAt1LBOTVvOiXANGOlMDcogKTywTymxK5#AqSYndu
У нее откидывается всё что до "=" и делится в массив по "#". Затем из полученных кракозябр циклом перебираются символы и каким-то хитрым образом получаются новые кракозябры (как-то задействована переменная "r"). А дальше уже совсем непонятно...
Уже несколько дней пытаюсь вникнуть, прогоняю в firebug, но никак не разберусь. Кому не сложно, помогите разобрать код?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Можете подсказать как вставлять файлы разного типа(ехе, txt, word и тд
Помогите, пожалуйста Дано натуральное число, определить, сколько раз в нем встречается первая цифра
Почему у меня не получается использовать во втором аргументе операции instanceof переменную типа Class? Пример: