2021.03.27_网易云登录params、encSecKey参数详解


前言

最近半个月项目问题,比较忙了,没有及时更新。今天JaJa弟来水一波某音乐的加密参数params、encSecKey,望各位海涵。本文章仅供学习研究,如若侵犯到贵公司权益请联系229456906@qq.com第一时间进行删除;各位朋友切忌用于一切非法途径,否则后果自行承担!


地址:https://music.163.com/

一、抓包分析

老规矩,打开登录框输入138****8888,1234567点击登录按钮进行抓包。
在这里插入图片描述
当点击登录后,出现了两个请求地址,这里的登录请求为第二条:
在这里插入图片描述
看响应即可一目了然,当然,他的参数如下图:
在这里插入图片描述
两个参数params、encSecKey,接下来寻找加密位置。

二、参数解析

1.加密定位

还是一样,直接搜索大法:
在这里插入图片描述
可以看到这段代码片:

// 定义bWv4z 
var bWv4z = window.asrsea(JSON.stringify(i3x), bsK6E(["流泪", "强"]), bsK6E(XR0x.md), bsK6E(["爱心", "女孩", "惊恐", "大笑"]));
e3x.data = j3x.cr4v({
    params: bWv4z.encText,	// 从bWv4z 中取encText赋值给params
    encSecKey: bWv4z.encSecKey // 从bWv4z 中取encSecKey 赋值给encSecKey
})

so,这里两个参数params、encSecKey生成位置找到,接下来看看window.asrsea方法以及参数情况。

2.参数分析

先看参数在这里插入图片描述
共4个参数,分别是JSON.stringify(i3x)、bsK6E([“流泪”, “强”])、bsK6E(XR0x.md)、bsK6E([“爱心”, “女孩”, “惊恐”, “大笑”]);
后三个参数都是由bsK6E方法生成,第一个参数将i3x转换成JSON格式传入。

经过多次抓包,后三个参数为固定值:
在这里插入图片描述
看看第一个参数i3x:在这里插入图片描述这里可以认为i3x是一个字典(在py中),checkToken、password、phone,
还是一样通过几次抓包,checkToken固定不变,而password、phonek几次抓包下来也没有发生改变,但是既然我们是登录,那就得需要考虑业务使用的舒适度。比如我们需要更换账号及其密码,那这里就能任为他是动态参数。所以先分析一下password如何生成。

首先通过右边堆栈往下找
在这里插入图片描述
当找到第5个时在这里插入图片描述
发现这里password:j3x.kD7w(gx6r.password)
下断点重新抓包:
在这里插入图片描述
基本没问题了,进入函数看看
在这里插入图片描述
将密码明文传入,进行一系列处理。
进入Mp5u函数看看
在这里插入图片描述
emmm,md5嘛,标准的。那这里password不用js代码,python还原即可:

def Md5passowrd(pwd):
    xyz = hashlib.md5(pwd.encode(encoding='UTF-8')).hexdigest()
    print('md5pwd:', xyz)
    return xyz

在这里插入图片描述
在这里插入图片描述
mou得问题吧?

下面看看window.asrsea方法是啥玩意,先文本搜索大法:
在这里插入图片描述
window.asrsea = d;而d函数就在上方。so,这里将代码拿出,差啥补啥。
部分代码片段:
在这里插入图片描述

执行结果:
在这里插入图片描述
登录代码实现:

# -- coding: utf-8 --
# @Time : 2021/3/22 11:07
# @Author : JaJa
# @Email: 229456906@qq.com
# @sinaemail: angelesclippers@sina.com

import hashlib
import execjs
import requests

from JaJa.DictTools import HandleToDictTools


def Md5passowrd(pwd):
    xyz = hashlib.md5(pwd.encode(encoding='UTF-8')).hexdigest()
    print('md5pwd:', xyz)
    return xyz




def getCjsParams(username, md5pwd):
    with open('0322.js', 'r', encoding='utf-8') as f:
        jsCode = f.read()
        f.close()
    params = execjs.compile(jsCode).call('getData', md5pwd, username)
    return params

def logining(params):
    url = "https://music.163.com/weapi/w/login/cellphone?csrf_token="
    hd = """
    content-type: application/x-www-form-urlencoded
    origin: https://music.163.com
    referer: https://music.163.com/
    sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"
    user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4389.90 Safari/537.36
   
    """
    headers = HandleToDictTools(hd)
    data = {
        'params': params['encText'],
        'encSecKey': params['encSecKey']
    }
    print(data)
    response = requests.post(url, data=data, headers=headers)
    print(response)
    print(response.text)
    print(response.cookies)



if __name__ == '__main__':
    username = ""
    password = ""
    md5pwd = Md5passowrd(password)
    params = getCjsParams(username, md5pwd)
    logining(params)

在这里插入图片描述

成了。今天就到这里。今天并未对daima进行详细介绍,其实js玩多了也就一个样,这里只对思路稍作说明,实现还得靠各位朋友多加练习(大佬请忽视)。


总结

总结:good good xuexi,day day up,少掉头发。


码字不易,如果本篇文章对你有帮助请动动小手点个赞8,谢谢~
合作及源码获取vx:OneSisxoc 【注明来意】
QQ交流群:735418202
需要源码请扫下方二维码关注微信公众号回复【网易云音乐JS】获取 :在这里插入图片描述

*注:本文为原创文章,转载文章请附上本文链接!否则将追究相关责任,请自重!谢谢!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值