【2021-04-02】JS逆向之网易云音乐登入--最新

声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!


前言

目标网站:https://music.163.com/

注:看了下其他博主写的,咋说呢,都没有写全,checkToken这个参数是需要动态的,你可能hook下来的时候有用,但是过几分钟他就失效了。


一、页面分析

请求包里的两个参数params和encSecKey,是比较简单的,包含了AES和RSA的加密,其中里面的key是随机生成的

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。


二、抓包分析

1.主要加密方法分析

在这个JS里面嗷,直接定位到加密的位置,里面主要的是a、b、c方法,然后加密的参数主要是这个d
在这里插入图片描述

先说a、b、c这三方法吧,a断点进去就可以看到是一个16位的随机数
在这里插入图片描述

再看这个b,是一个AES的加密,其中key是a方法生成的16位随机数
在这里插入图片描述

c方法是一个RSA加密,16进制的公钥跟生成位数都已经有了,然后加密参数a是那个16位随机数,这里注意AES加密的key和RSA加密的参数,都是这个16位随机数(只生成一次)
在这里插入图片描述

2.加密的参数d分析

主要的加密方法已经知道了,然后需要这个加密后的参数,先来看看参数d里面有什么值吧,这里就直接讲了,不细说

password:MD5(原密码)
checkToken:根据环境加密生成的随机值

在这里插入图片描述

然后这里主要的是一个checkToken,由于他的生成方法里有时间戳,所以有一定的失效性,那总不可能失效了就在去hook吧。
追一下栈到这里,就是生成的位置了。

在这里插入图片描述

里面有两参数,其中C的值t是一个随机数,ka好像是固定的false
在这里插入图片描述

t的值是这里生成的,用了一个$b方法,我们进去瞅瞅看
在这里插入图片描述

也不知道啥玩意,反正到时候直接扣代码,现在控制台看看
在这里插入图片描述
是个32位的随机数
在这里插入图片描述

checkToken的加密参数已经分析好了,然后这个加密方法bc(),看看就行,到时候也直接扣。
在这里插入图片描述


三、模拟请求

在经过一系列的扣加密代码后,发送请求,看看结果是正确的

在这里插入图片描述

在这里插入图片描述

四、源码分享

需要JS代码的可以添加wx:zwj1314520-y

# -*- coding: utf-8 -*-
'''
@File:      login.py
@SourceUrl: 
@Author:    阿J
@Date:      2021/4/2 16:34
@Software:  PyCharm
@Desc:
'''

import requests, execjs, hashlib

with open('./code.js', encoding='utf8') as f:
    js_fun = execjs.compile(f.read())

with open('./my.js', encoding='utf8') as f:
    xx = execjs.compile(f.read())


headers = {
    
    
    'authority': 'music.163.com',
    'pragma': 'no-cache',
    'cache-control': 'no-cache',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    'nm-gcore-status': '1',
    'content-type': 'application/x-www-form-urlencoded',
    'accept': '*/*',
    'origin': 'https://music.163.com',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-mode': 'cors',
    'sec-fetch-dest': 'empty',
    'referer': 'https://music.163.com/',
    'accept-language': 'zh-CN,zh;q=0.9',
}

session = requests.session()
session.get('https://music.163.com/#',headers=headers)

phone = ''
pwd = ''

# checkToken 为前环境生成的随机值
checkToken = xx.call('get_acToken')
print('参数checkToken:',checkToken)
password = hashlib.md5(pwd.encode(encoding='UTF-8')).hexdigest()
p1 = '{"phone":"'+phone+'","password":"'+password+'","rememberLogin":"true","checkToken":"'+checkToken+'","csrf_token":""}'

data = js_fun.call('d',p1)
print('加密后的data:',data)

response = session.post('https://music.163.com/weapi/w/login/cellphone', headers=headers, data=data)
print('登入信息:',response.text)

cookies = dict(session.cookies)
csrf_token = cookies.get('__csrf')
print('登入后的csrf_token:',csrf_token)



猜你喜欢

转载自blog.csdn.net/qq_26079939/article/details/115404275