Разбор кода, из javascript в java

276
07 марта 2018, 07:25

Недавно начал изучать 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, но никак не разберусь. Кому не сложно, помогите разобрать код?

READ ALSO
Вставка файлов разного типа из буфера обмена

Вставка файлов разного типа из буфера обмена

Можете подсказать как вставлять файлы разного типа(ехе, txt, word и тд

287
Написать код по заданию на Java [требует правки]

Написать код по заданию на Java [требует правки]

Помогите, пожалуйста Дано натуральное число, определить, сколько раз в нем встречается первая цифра

192
Java. instanceof с переменной класса

Java. instanceof с переменной класса

Почему у меня не получается использовать во втором аргументе операции instanceof переменную типа Class? Пример:

234