Старый 08.11.2012, 09:02   #1
D1m0x4e
 
Регистрация: 02.03.2012
Сообщений: 0
Репутация: 0
По умолчанию Интересное о музыке в одноклассниках

Часа доброгу, уважаемые!

Не уверен что именно в эту подветку, но более подходящего более ничего не нашел. Так же не совсем уверен что данным сервисом, о котором пойдет речь пользуется еще кто то =) А ведь речь пойдет о пресловутых одноклассниках. Может вы знаете что там есть фича "Музыка"? =) Так вот, слабая половина пола земного шара ей активно пользуется и естественно наполняют свои плейлисты коллекциями музыки, и всё хорошо пока не появилось желание слушать эти плейлисты к примеру в машине, или на дачи или еще где либо где нет полноценного интернета. И ведь достанут, надо и всё тут...

Вот меня и попросили. Аргументы хорошо ли это или плохо прятались где то за /dev/null, и мне стало интересно, как это работает и нельзя ли стянуть у них всю музыкальную коллекцию. Фишки, типа "плагины" для браузеров в расход не беру так как они если и позволяют решить проблему, то частично, конкретно по песне, кликать по каждой из более 500 песен даже страшно подумать ... Моя же душа просит что то типа
Цитата:
sh# for ...; do curl ...; done
После непродолжительного наблюдения выяснил, что сервис использует json поток для отдачи списка треков на прослушивание. Адрес запроса:
Цитата:
http://wmf.odnoklassniki.ru/pop;jsessionid=<MyIdSession>?count=100&
<MyIdSession> - сессия ваша в однокласниках, можно взять из кук или из подобных GET запросов где онная передается в читабельном виде.

Ответ приходит более чем избыточный. Далее, по клику на проигрывание песни идет GET, выглядит примерно так:
Цитата:
http://wmf.odnoklassniki.ru/play;jsessionid=<MyIdSession>?tid=<MyIdSong>
<MyIdSong> - айдишник песни из плейлиста полученного запросом выше

В ответ получим исчерпывающую информацию о песне, в которой так же будет ссылка для проигрывания песни
Цитата:
"play":"http://217.20.152.41:80/file.go?fid=356353563563456&cid=0101e128408936ec02 d63509ca98f4e3&size=7418557&uid=09c1232c53015cacfc 7bb3cb25092681&sid=4f67983157e1740f75e75eb1b49dd6c 44736155b4b06b3cf0a31797d732ce74751859d1e4a20886c2 7fcf9879ad749bf5fd9a79e669e95801e6a7534e6843279&ts =1252318400000&md5=7f60ef4931dd2d72f7bac6276100b1f 3"
И казалось бы... БИНГО! да хрен бы там.

берем этот линк и получаем отлуп на сервере!

А дело вот в чем, на стороне клиента данный URL проходит через дополнительный конструктор, который дополняет его, URL, дополнительным хешем "clientHash", без которого до данной песни не добраться и URL в конечном счете должен принять вот такой вот вид:

Цитата:
http://217.20.152.41:80/file.go?fid=356353563563456&cid=0101e128408936ec02 d63509ca98f4e3&size=7418557&uid=09c1232c53015cacfc 7bb3cb25092681&sid=4f67983157e1740f75e75eb1b49dd6c 44736155b4b06b3cf0a31797d732ce74751859d1e4a20886c2 7fcf9879ad749bf5fd9a79e669e95801e6a7534e6843279&ts =1252318400000&md5=7f60ef4931dd2d72f7bac6276100b1f 3&clientHash=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx
где [x..x] - это огромный набор цифр хитро подсчитанных на клиенте


механизм подсчета в javascript'ах найти не удалось, видимо его латентно обернули одной из флешек ...
их две: player1x1.swf и uploader.swf

если вторая как видно по функционалу - набор тулз для закачки файлов
то первая как раз затрагивает проигрывание песен ...на эту мысль навел меня часть кода и функция
Цитата:
protected function trackClicked(args...):void{....}
но флеш увы не мой конек и найти там завуалированный кусок кода отвечающего за сия хеш найти так и не смог (((

народ, может у кого есть какие идеи? ... я просто в тупике полном
и да, стыдно признаться, не знаю как обнаружить обращение к данной флешке javascript'ом при клике на play песни ...
что бы посмотреть какие параметры вообще передаются и какой конкретно флешке ...

спасибо за внимание =)
D1m0x4e вне форума   Ответить с цитированием
Старый 09.11.2012, 10:08   #2
D1m0x4e
 
Регистрация: 02.03.2012
Сообщений: 0
Репутация: 0
По умолчанию

_arg1 - есть md5 из "play":"http://..." + "saltWord"

Цитата:
public function make(_arg1:string):void{
output.endian = Endian.LITTLE_ENDIAN;
var _local2:ByteArray = new ByteArray();
_local2.endian = Endian.LITTLE_ENDIAN;
var _local3:int;
var _local4:int = _arg1.length;
while (_local3 < _local4) {
_local2.writeFloat(parseint(("0x0" + _arg1.charat(_local3))));
_local3++;
};
_local2.position = 0;
var _local5:uint = (_local2.length >> 2);
var _local6:Shader = new Shader(new kernelClass());
_local6.data.src.width = _local5;
_local6.data.src.height = 1;
_local6.data.src.input = _local2;
var _local7:ShaderJob = new ShaderJob(_local6, output, _local5, 1);
_local7.start(true);
setTimeout(this.shaderJobCompleteHandler, 1);
}
после цикла - вообще темный лес (( ничего не понимаю
ну точно знаю что без _local2.writeFloat тут не обошлось ...

входные данные
md5: 4bf9f9f3360f746715b3fa1dd5103c4a
arg1: 4bf9f9f3360f746715b3fa1dd5103c4asecret
clientHas (должен быть): 15195199232372412411019241241133119599136241241137 163137321365991691212632631244354631205169


мож кто осилит?
D1m0x4e вне форума   Ответить с цитированием
Старый 27.05.2013, 01:01   #3
George
 
Регистрация: 27.05.2013
Сообщений: 0
Репутация: 0
По умолчанию

Вот выдранный код для получения хеша имея md5 (из расширения savefrom_net):

Код:
function getHash() {
	var src = 'тут md5 полученный из ссылки после запросов';
	var magic = [4,3,5,6,1,2,8,7,2,9,3,5,7,1,4,8,8,3,4,3,1,7,3,5,9,8,1,4,3,7,2,8];
	
      var a = [];
      for(var i = 0; i < src.length; i++)
      {
        a.push(parseInt('0x0' + src.charAt(i)));
      }

      src = a;

      var res = [];
      src = src.slice(0);
      src[32] = src[31];
      var sum = 0;
      var i = 32;
      while(i-- > 0)
        sum += src[i];

      for(x = 0; x < 32; x++)
        res[x] = Math.abs(sum - src[x + 1] * src[x] * magic[x]);

      return res.join('');
};
возвращает набор цифр, но попытки подставить его в ссылку увенчались неудачей , у кого то есть идеи почему?
George вне форума   Ответить с цитированием
Старый 27.05.2013, 01:12   #4
George
 
Регистрация: 27.05.2013
Сообщений: 0
Репутация: 0
По умолчанию

Нашёл!

К полученному из ссылки md5 нужно добавить строку secret, и снова сконвертировать это дело в md5 (благо для этого есть библиотеки/алгоритмы).
Новый полученный md5 естественно должен передаваться в нижнем регистре.
George вне форума   Ответить с цитированием
Ответ

Метки
decode, encode, flash, javascript

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot