- PVSM.RU - https://www.pvsm.ru -

Фиксим клиент Last.FM или как получить бесплатное радио

image
Для начала краткий ликбез:

Last.fm — интернет-проект музыкальной тематики, основным сервисом которого является сбор информации о музыке, которую слушает пользователь, и её каталогизация в индивидуальных и общих чартах. (с) Wikipedia

Давным-давно, когда трава была зеленее, а заинтересованные индивиды IT-сообщества ещё не знали, что такое Instagram — проект Last.FM [1] был в целом бесплатным и давал возможность слушать «радио», составленное из композиций любимых и похожих на них исполнителей без каких-либо ограничений. Затем коммерческая составляющая начала брать свое, бесплатное радио оставили только для некоторых стран, что заставило жителей стран СНГ заниматься поиском прокси либо платить 3$ в месяц за возможность использования сервиса.

Заморачиваться с прокси, понятное дело, никому не хотелось, и пользователи начали искать способы слушать радио бесплатно. Как оказалось, Last.FM фактически не закрыл доступ к возможности бесплатного прослушивания, однако официальным клиентом последней версии это было невыполнимо. Итог: часть аудитории перешла на альтернативные клиенты, часть прекратила обновлять свой старый клиент, а прочие либо заплатили, либо ушли на другие сервисы.

Так в чем же состояло изменение, которое привело к невозможности бесплатного прослушивания радио в новых версиях клиента? Попробуем в этом разобраться.

Для начала нам понадобится новый и старый клиенты. Новый можно скачать с официального сайта [2], а старый взять, например, с рутрекера [3]. Поставим новый и старый клиент на разные виртуальные машины и пойдем в лоб: посмотрим, что показывает снифер при попытке запуска проигрывания радиостанции.

image [4]

Как мы видим, используется HTTP-протокол [5], что существенно облегчит нам дальнейший разбор (бинарные недокументированные протоколы разбирать, естественно, сложнее).
Теперь сравним запросы из старого и нового клиентов:

image [4] image [6]

Единственное отличие, которое бросается в глаза — это дополнительный параметр api_key в GET-запросе [7]. Попробуем понять, влияет ли он на поведение клиента. Запустим клиент под каким-нибудь отладчиком (я буду использовать OllyDbg [8]), дадим ему загрузиться (F9), откроем память процесса (Alt+M) и поищем в ней интересующий нас параметр (Ctrl+B).

image [9]

В памяти нашлось 4 места, которые содержали искомый параметр, причем все они расположены в библиотеке LastFmTools1. Посмотрим, как этот параметр используется в коде. Для этого выделим байт, содержащий символ &, который находится непосредственно перед текстом api_key.

image [10]

Почему его? GET-запрос строится из фрагментов вида key=value, которые разделены амперсандом. В данном случае разработчики не стали формировать ассоциативный массив с параметрами запроса, а затем объединять пары из него чем-нибудь вроде функции implode [11] из PHP, а просто захардкодили запрос в виде готовых кусков.

image [12]

Мы видим, что перед нами, по сути, классическая C-строка [13], которая состоит из ASCII [14] символов и завершается нулл-байтом. Таким образом, мы можем провести манипуляции с данными в памяти и урезать строку до безобидного амперсанда, который не испортит запрос и позволит нам посмотреть как будет вести себя последний клиент в этом случае. Заменяем символ, идущий после &, нулл-байтом везде, где встречается строка api_key, и снова пытаемся запустить проигрывание радио.

image [15]

О чудо! Радио проигрывается как ни в чем не бывало! Но ведь нам не хочется каждый раз запускать программу под отладчиком, чтобы послушать бесплатное радио. Тогда возьмем любой hex-редактор [16], откроем в нем файл LastFmTools1.dll (он находится в директории Last.FM), найдем места, где встречается строка &api_key, и, как я описывал выше, заменим байт после амперсанда на нулл-байт.

Вуаля, мы получили готовый к употреблению клиент последней версии с бесплатным радио.

Интересующиеся также могут почитать про то, как создать add-on для Last.FM, позволяющий стримить радио по сети [17] и способ добавления управления клиентом Last.FM через панель задач [18].

Автор: kaimi_ru


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/9037

Ссылки в тексте:

[1] Last.FM: http://www.last.fm

[2] официального сайта: http://http://last.fm/

[3] рутрекера: http://rutracker.org/forum/viewtopic.php?t=3737124

[4] Image: http://kaimi.ru/wp-content/uploads/2012/06/wireshark1.jpg

[5] HTTP-протокол: http://ru.wikipedia.org/wiki/Http

[6] Image: http://kaimi.ru/wp-content/uploads/2012/06/wireshark2.jpg

[7] GET-запросе: http://ru.wikipedia.org/wiki/Http#GET

[8] OllyDbg: http://www.ollydbg.de/

[9] Image: http://kaimi.ru/wp-content/uploads/2012/06/olly_dbg1.jpg

[10] Image: http://kaimi.ru/wp-content/uploads/2012/06/olly_dbg2.jpg

[11] implode: http://php.net/manual/en/function.implode.php

[12] Image: http://kaimi.ru/wp-content/uploads/2012/06/olly_dbg_2.1.jpg

[13] C-строка: http://ru.wikipedia.org/wiki/C-строка

[14] ASCII: http://ru.wikipedia.org/wiki/ASCII

[15] Image: http://kaimi.ru/wp-content/uploads/2012/06/olly_dbg3.jpg

[16] hex-редактор: http://ru.wikipedia.org/wiki/Hex-редактор

[17] add-on для Last.FM, позволяющий стримить радио по сети: http://kaimi.ru/2010/09/lastfm-broadcast-addon/

[18] добавления управления клиентом Last.FM через панель задач: http://kaimi.ru/2011/08/lastfm-taskbar-controls/