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

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


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

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

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

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

image

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

image image

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

image

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

image

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

image

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

image

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

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

Интересующиеся также могут почитать про то, как создать add-on для Last.FM, позволяющий стримить радио по сети и способ добавления управления клиентом Last.FM через панель задач.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 78

      0
      Поправьте ссылку в предлежении «Новый можно скачать с официального сайта» пары точек после http не хватает.
        +2
        Спасибо, поправил
        +6
        Хм, а зачем нужно было дебажить клиент, он же Open Source?
          +8
          Это быстрее и забавнее. Вряд ли в коде есть комментарии, что благодаря указанной строчке не удастся слушать радио бесплатно.
          Плюс с точки зрения распространения солюшена, вышеуказанный способ вызывает больше доверия, чем установка собранных непойми кем решений.
            +2
            А собрать самому?
          –6
          Имейте совесть!1 Заплатите артистам!
            +20
            Никита Сергеевич, перелогиньтесь!

            А вообще, мож быть жадным, а можно честным. Можно заплатить три бакса и успокоить совесть, а можно не плать и оставить в покое кошелек.
              +4
              Ирония же, не?
                0
                Не надо, не перебивайте их )
            +6
            Модифицированный файл для ленивых не расшарите?
            –1
            а нет ли подобного решения для Mac-клиента? Спасибо!
              +6
              есть, схема таже. HEX-редактор: www.suavetech.com/0xed/0xed.html

              Если хотите могу выложить libLastFmTools.1.dylib но там и правда делов на минуту.
                0
                Хотим, конечно. ;)
              0
              А любимых исполнителей в клиенте нельзя прослушать, как я понял?
                0
                Ну ето ж радио, во всех смыслах
                  0
                  А как его включить? Вижу только 10 последних понравившихся.
                    0
                    «Мои любимые композиции» ето на самом деле «радио моих любимых композиций». Т.е там самих етих треков не будет, а будут похожие на них.
                      0
                      Это понятно, просто в Q&A недавно спрашивали, как вытащить с ластфм всех своих любимых исполнителей. Плагин для хрома умеет это делать, но радио не воспроизводит, firefm же — наоборот, только любимых не может воспроизводить.
                +13
                В некоторых альтернативных проигрывателях ласт.фм всегда пела бесплатно искаропки, только тссс ;) А вообще, $3 в месяц за пользование отличным сервисом — не такая уж неподъёмная цена, имхо.
                  +3
                  Да корявый он, то подбирает всякую чушь, то просто не работает. Имхо 3х баксов не стоит.

                  PS пользуюсь ластой с 2006года, на подписке почти два года просидел.
                    0
                    Да какая разница, что там на радио, зато рамка черная вокруг юзерпика. :)
                  +2
                  Мне для Ubuntu надо.
                    +1
                    Хекс редактор же есть вроде в Ubuntu?
                      +1
                      ставите bless и патчите /usr/lib/lastfm/libLastFmTools.so.1.0.0
                        –2
                        За что интересно минусуют?
                        –6
                        Благодарю за статью — это отличный и интересный реверс инжиниринг!

                        p.s: а для андройда приложение не изучали случаем?
                        p.p.s: знаю, что лентяйничаю и наглею ^_^''
                          +6
                          андроИда.
                            +3
                            да.
                              –1
                              Андроид — человекоподобный робод.
                              Вы уж если поправляете, то поправляйте на Android.
                                +12
                                робод, ага.
                                  –12
                                  *Робот. Граммар нацизм — это всё на что ты способен?
                                  +1
                                  Вы удивитесь, но android — это тоже человекоподобный робот. Не стоит слепо поклоняться англицизмам.
                              0
                              Почти год ходил со старым клиентом на iPhone, не обновляя, а потом все пофиксили
                                0
                                Такое отрубается элементарно. Достаточно лишь запретить запросы без api_key.
                                  0
                                  Вроде прикрыли малину.
                                    0
                                    пардон, вру-наверное это был хабраэффект)
                                    +4
                                    Модифицированный файл для Mac OS X:
                                    dl.dropbox.com/u/286758/libLastFmTools.1.dylib
                                      0
                                      А я на habrahabr.ru/post/134807/ подсел, к тому же скробблинг LastFM был изначально.
                                        +9
                                        > платить 3$ в месяц за возможность использования сервиса.

                                        Непосильная сумма.
                                          –1
                                          некоторым странам то бесплатно предоставляется.
                                            +2
                                            И мы тоже сделаем себя такой страной! 8)
                                              0
                                              Никита Сергеевич сделает ласту бесплатной!
                                                0
                                                С ним ластфм ещё и доплачивать будет!
                                                  0
                                                  Ему?
                                                    0
                                                    И всему РАО в придачу!
                                          –2
                                          А автор-то именитый.
                                            0
                                            К несчастью в новом клиенте (бете) нет этой библиотеки.
                                              +1
                                              скачайте старый с рутрекера и не обновляйте.
                                              +1
                                              LastFM — один из моих любимых и уважаемых сервисов. Никаких глупых пиаров, свое дело исполняет, улучшается, прелесть.
                                                +2
                                                В openSUSE Linux (и, возможно, других линуксах) искомый файл находится по адресу /usr/lib64/Last.fm/libLastFmTools.so.1.0.0
                                                  +7
                                                  Вообще-то есть вполне законный способ пользоваться услугами LastFM бесплатно: достаточно принять участие в бета-тестировании нового клиента. Линк
                                                    +1
                                                    Принять или принимать? В какой момент бета-тестирования пользователь будет награжден возможностью бесплатно пользоваться услугами Last.fm?
                                                      0
                                                      Пока версия нового клиента находится в стадии бета-тестирования — использование LastFM посредством него является бесплатным. Т.е. скачали и пользуетесь.
                                                      0
                                                      Самое верное решение.
                                                      0
                                                      Хм… Получается, что и самописанные клиенты могут также бесплатно качать? А то я писал в своё время прогу, которая их музыку не играет. а качает и делает плейлист, чтобы потом это псевдорадио на MP3 плеере слушать. И мне приходится платить по $3, чтобы ей пользоваться.
                                                        0
                                                        Не получилось… Ну и ладно, три бакса в месяц не жалко.
                                                          0
                                                          Проверял этот давнишний скрипт, вроде все качается без наличия активной подписки
                                                          0
                                                          А у меня почему-то трэки проигрываются не полностью. Обрываются в разное время и следующий начинает играть. Что это может быть? Версия 1.5.4.27091.
                                                            0
                                                            Даешь хак на pandora.com? :)
                                                              0
                                                              Хорошая статья. Те кто хотели бесплатно слушать радио, давно это уже делают вконтакте на Freelast Radio, а тут можно и няшный клиент почикать. Прекрасно же. Но в клиенте (хакнутом или нет) нету такой штуки, как «слушать радио всех друзей». А ведь фишка ластика не только в тэгах, а ещё и в социальных рекомендациях!

                                                              Поэтому лично я плачу за подписку. И ничего, не обеднел :) И могу через веб слушать радио всех друзей. И многие другие прикольные выборки. Например делать суммарную выборку по двум тэгам.

                                                              (сейчас минусов отхвачу) Давайте платить хорошим людям за хорошие штуки и делать мир лучше :)
                                                                +1
                                                                Для Debian\Ubuntu:
                                                                http://dl.dropbox.com/u/7728874/libLastFmTools.so.1.0.0

                                                                Ложить в /usr/lib/lastfm
                                                                  +1
                                                                  эм… разве $3 в месяц такая сумма, что нужно задумываться как бы и её не платить?
                                                                    0
                                                                    Где находится грань, которая определяет «значимость» суммы для любого индивида?
                                                                    Например, лицензионную игру Counter-Strike можно купить за ~8-10$ (причем это разовый платеж, а не ежемесячный), однако люди продолжают создавать и искать бесплатные non-steam сервера, скачивать пиратские копии. В сфере мобильных приложений та же ситуация.
                                                                      +1
                                                                      эм… если хочется слушать радио по сети — интернет анлим. стоит явно дороже $3, а значит и эта сумма должна быть подъёмной. не можешь платить — ступай во вконтакт :)
                                                                      в любом случае речь о культуре потребления. если мне нравится сервис и меня устраивает цена — я плачу. это мой способ сказать «спасибо» разработчикам. а если мне нравится, но я пойду на любые ухищрения лишь бы получить это халявно — что-то не так пошло в моём воспитании.
                                                                        0
                                                                        Интернет анлим за 5$ купить можно. Никто не спорит, что если нравится, то можно и заплатить. А у кого-то нет средств, желания, возможности…
                                                                        Вконтакт — это плохой пример, учитывая то, что авторское право в области контента там представлено достаточно слабо. Тогда уж на youtube или яндекс.музыку.
                                                                          +1
                                                                          очень это на воровство похоже. без возможности оплатить искать пути халявного пользования. но тут уж каждый сам для себя лимиты устанавливает — что воровство, а что нет
                                                                            0
                                                                            В самом начале Вы сделали акцент на стоимости услуги. Отсюда первый вопрос: если бы стоимость была выше, то это изменило бы Ваше отношение?
                                                                            Второй вопрос: у Вас весь цифровой контент лицензионный?
                                                                            И третий вопрос: Вы не употребляете пиратский цифровой контент через интернет? ВКонтакте, онлайн библиотеки с «бесплатными» книгами, игры и т.п. естественно считаются.
                                                                              +1
                                                                              на счёт отношения — да, поменяло бы. есть сервис за который я готов платить $3, $5, $10. а вот $20 уже нет. потому что не пользуюсь им достаточно часто. мог бы слушать lastfm на работе — да, может и $20 платил бы.
                                                                              цифровой контент понятие растяжимое.
                                                                              софт — нет, не весь. если win7 я готов купить и покупаю, то нужный мне раз в месяц фотошоп пока нет. $700 лично для меня — дорого. но есть же и gimp и онлайн версия фш. в любом случае — $700 != $3.
                                                                              сервисы — оплачиваю. если есть возможность пользоваться софтом за абонплату — оплачиваю нужный мне период и всё.
                                                                                0
                                                                                Я вот могу позволить себе заплатить за last.fm, но у меня нет возможности заплатить через paypal. Заюзать крякнутый клиент проще и менее трудозатратно, чем искать способ заплатить через неудобную и недоступную для меня систему оплаты. Сделают прием платежей напрямую с кредитки — заплачу. Палка — в лес. Суровые реалии.
                                                                    0
                                                                    Сейчас, спустя столько времени мне пришло письмо от Last.fm:
                                                                    Тема: Changes to Last.fm Radio

                                                                    Hello, %username%.

                                                                    We're writing you to let you know that there will soon be a change to Last.fm radio that may affect you. Our stats show that you've listened to radio through an application that uses our old streaming protocol. On 1 December we will deprecate this old protocol, so in some applications radio will no longer work.

                                                                    If you would like to continue enjoying Last.fm Radio, consider upgrading to a new application or using www.last.fm/listen

                                                                    Thanks,
                                                                    The Last.fm Team
                                                                      0
                                                                      Да, сегодня перестало работать
                                                                        0
                                                                        R.I.P., бесплатный ластэфэм! Огромное спасибо тебе, автор, за прекрасные пол года бесплатного удовольствия!… Ну и, конечно, пиши исчо, если будет новое решение! ;)

                                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                    Самое читаемое