Используйте код Python для загрузки любой указанной облачной песни NetEase (супер подробная версия)

задняя часть Python JavaScript Google

Только для технического обмена, не для каких-либо коммерческих целей

Два дня назад я научил вас, как найти реальный адрес воспроизведения мп3 на приставке, но вы не можете скачать платные, потому что вы можете скачать только играбельные песни. Что касается того, как скачать платную NetEase Cloud Music, вы должны открыть членство, Вы должны знать, что бесплатное — самое дорогое.

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

1. Найдите целевой запрос

Откройте домашнюю страницу NetEase Cloud, откройте инструменты разработчика и нажмите «Поиск».

Если вы видите много запросов, не паникуйте, ищите их медленно. После поиска вы найдете следующую ссылку

Эта ссылка возвращает json, в котором содержится информация о песне, но ссылки на воспроизведение MP3 нет, это может быть полезно, т.к. там есть id песни, поставьте его первым.

Я попытался щелкнуть песню для воспроизведения, и было добавлено еще несколько запросов. На первый взгляд, в нем есть ссылка на MP3, которую я хочу.

Таким образом, выходит ссылка для получения запроса mp3,music.163.com/we API/send/…

Вы можете видеть, что это почтовый запрос с кодом состояния 200. Давайте спустимся вниз, чтобы увидеть, что такое данные fromdata.

Это два зашифрованных параметра, но не бойтесь, если вы читали то, что я писал ранееИспользуйте python для сканирования облачной музыки Netease и сохранения данных в mysql.Вы обнаружите, что параметр fromdata тот же, поэтому идея взлома зашифрованного параметра такая же, но на этот раз мне не нужен скрипач, я использую только инструменты разработчика для отладки, смотрите хорошо! ! ! Давайте посмотрим, каков источник этого запроса.

Нажмите, чтобы увидеть, это сбивает с толку js, нажмите в левом нижнем углу, чтобы отформатировать, чтобы он выглядел лучше.

сделать поискparams, вы найдете это:

Видно, что метод шифрования не изменился, он все тот же, что и раньше, но изменилось имя переменной. **window.asrsea()** имеет четыре параметра, давайте взглянем на последние три параметра, потому что все они похожи. Продолжить поисковый таргетинг.

Видно, что возвращаемый контент является фиксированным, поэтому не беспокойтесь об этом, вы можете отлаживать и перехватывать его позже. Посмотрите еще раз на первый параметр. это json. Мы можем выполнить отладку точки останова, чтобы получить ее.

Обновите, и вы увидите следующее.

Вы видите, что **window.asrsea()** — это функция d, найдите ее и посмотрите, а затем укажите точку останова.

Нажмите, чтобы перейти к следующей точке останова, и вы увидите

Четыре параметра закончились, я просто опубликую их здесь:

d:"{"ids":"[523946593]","br":128000,"csrf_token":""}"e:"010001"f:"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"g:"0CoJUm6Qyw8W8jud"

Все параметры отсутствуют, и легко понять, что идентификаторы в параметре d соответствуют идентификатору песни, поэтому ссылка, которую вы только что нашли, полезна. br — это фиксированное значение, которое может соответствовать качеству песни и тому подобному, и его не нужно контролировать.

Давайте посмотрим, как зашифрована функция d:

Он содержит много трех функций **a , b , c **, давайте сначала посмотрим на функцию a

Функция a состоит в том, чтобы случайным образом найти 16 строк в наборе строк. хорошо, следующий.

Функция b используетaesшифрование, зашифрованный зашифрованный текстe, который является параметромa содержание,cэто ключ со смещением в третьем параметреdи режим шифрования **CBC**. Посмотрите еще раз на функцию c.

Функция c используетrsaШифрование, b — индекс шифрования, пустая строка — параметр расшифровки, c — коэффициент шифрования.

Что ж, после того, как анализ трех функций завершен, вернемся к функции d.

Видно, что параметр params генерируется функцией b дважды, то есть дважды шифруется с помощью aes, а параметр encSecKey генерируется функцией c, то есть генерируется с помощью шифрования rsa.

Не много ерунды, Говорить дешево, покажи мне код

2. Раздел кода

Сначала отобразите 16 случайно сгенерированных строк.

Для того, чтобы все выглядели лучше, в будущем код будет заменен фотографиями

Далее зашифровано aes

Здесь огромная яма.Гугл не нашел никого,кто бы сталкивался с этим.При использовании python для aes шифрования можно шифровать только цифры и буквы,а китайский шифровать нельзя,и будет выдаваться ошибка.

Input strings must be a multiple of 16 in length

Решение находится вcbcВ режиме шифрования, когда длина строки кратна 16, индикатор длины не может быть на китайском языке, и его необходимо сначала преобразовать в длину кодировки Unicode. Например, приведенное выше, следующее является примером ошибки

pad = 16 - len(text) % 16

Эту яму перелезли, а тут очередное rsa шифрование

Следует также отметить, что при генерации 16 случайных строк необходимо убедиться, что два параметра, params и encSecKey, соответствуют случайным строкам и непротиворечивы. В противном случае после шифрования все равно будут возникать ошибки, и правильную информацию получить не удастся. Ну и последнее — получить два параметра шифрования.

Код готов, так чего же вы ждете, запустите его и притворитесь!

{'code': -460, 'msg': 'Cheating'}

Это хорошо, притворство не удалось, и Netease Cloud признал меня краулером, поэтому я пытаюсь добавить заголовок запроса?Результат все тот же, это тоже огромная яма. Решение состоит в том, чтобы добавить заголовки запроса, нужно добавить только два, один — идентификатор браузера **user-agent**, другой —cookie , не может думать об этом? Я не могу представить, он все еще тамcookieАнтисканирование сделано выше, но я использовал **session**, чтобы сохранить файл cookie, и он все еще не работает. Вам нужно самостоятельно скопировать файл cookie просмотра и сохранить его.

Песню можно скачать сейчас, но я хочу любую песню. Что ж, давайте снова посмотрим на этот запрос https://music.163.com/weapi/cloudsearch/get/web?csrf_token=, потому что возвращается идентификатор песни.

3. Найдите идентификатор песни

Видно, что параметры все те же, что и параметры запроса выше, но то, что мы знаем, это функция d, и последние три параметра неизменны, поэтому нам нужно только найти измененные параметры впереди, или такая же работа,отладка точки останова.

Это также легко найти, параметр d следующий

d = '{"hlpretag":"","hlposttag":"","s":"Может или нет","type":"1","смещение " :"0","всего":"истина","лимит":"30","csrf_token":""}'

Этот анализ можно закончить.

4. Найдите код песни

Это код для получения идентификатора песни, остальные в порядке.

Наконец

Я также упаковал программу, и я могу скачать понравившиеся мне песни, когда столкнусь с ней.Хотя ее можно скачать прямо из NetEase Cloud, это не должно быть так хлопотно, но для чего мы учимся программированию? Притворитесь, что вас заставляют, вы можете использовать код и никогда не использовать другие вещи.

Изображение эффекта, как указано выше, если вы хотите загрузить кредитное плечо, вы можете ответить в фоновом режиме, если вам нужен полный код.Музыкамогут быть отправлены вам.

ps: Оригинальность непростая.Написание этой статьи стоило мне 1024 волос.Слышала,что форвардинг самый эффективный способ отрастить волосы,так что знайте!

Сканируйте QR-код и подписывайтесь на него, чтобы получать больше интересных статей о Python.