Фиксим клиент 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 через панель задач.
Поделиться публикацией
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 78
    • 0
      Поправьте ссылку в предлежении «Новый можно скачать с официального сайта» пары точек после http не хватает.
    • +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
              А как его включить? Вижу только 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
                                            С ним ластфм ещё и доплачивать будет!
                                  • –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
                                                А у меня почему-то трэки проигрываются не полностью. Обрываются в разное время и следующий начинает играть. Что это может быть? Версия 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., бесплатный ластэфэм! Огромное спасибо тебе, автор, за прекрасные пол года бесплатного удовольствия!… Ну и, конечно, пиши исчо, если будет новое решение! ;)

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

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