


作者|志颖
责编|胡巍巍

首先分析数据的请求方式
网易云音乐歌曲页面的URL形式为https://music。163。com//song?id=38592976。接下来开始分析数据的请求方式。



我们发现的它是个Post请求,向下滑你会发现这个Post请求还带有数据。


分析加密过程
通过断点调试发现params和encSecKey是由JS脚本中的()函数生成的。

我们发现()函数有4个参数,在浏览器的JS控制台分别对这四个参数进行调试:

{"rid":"R_SO_4_38592976","offset":"0","total":"True","limit":"20","csrf_token":""}下面我来详细讲解这个变量的发现过程:

然后按下电脑的Esc键打开JS控制台,输入i1x,查看第一个变量:


再看第3页:

再看第4页:

通过这几页的分析,我们可以得到i1x值的变化规律,且可以得到它的一般形式:
{"rid":"R_SO_4_38592976","offset":"0","total":"True","limit":"20","csrf_token":""}生成随机字符串defgenerate_random_strs(length):string="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"初始化随机字符串random_strs=""whileilength:e=()*len(string)msg是需要加密的明文,如果不是16的倍数则进行填充(paddiing)padding=16-len(msg)%16AES加密defAESencrypt(msg,key):这里使用padding对应的单字符进行填充msg=msg+padding*chr(padding)加密后得到的是bytes类型的数据encryptedbytes=(msg)对byte字符串按utf-8进行解码enctext=('utf-8')returnenctext然后是RSA加密。首先我简单介绍一下RSA的加密过程。在RSA中,明文,密钥和密文都是数字。RSA的加密过程可以用下列的公式来表达,这个公式非常的重要,你只有理解了这个公式,才能用Python实现RSA加密。
密文=明文EmodN(RSA加密)
RSA的密文是对代表明文的数字的E次方求modN的结果,通俗地讲就是将明文和自己做E次乘法,然后将其结果除以N求余数,这个余数就是密文。
下面来看具体的RSA加密代码实现:
随机字符串逆序排列string=randomstrs[::-1]返回整数的小写十六进制形式returnformat(seckey,'x').zfill(256)
RSA加密后得到的字符串长为256,如果不够长则进行填充(不足部分在左侧添0)。
最后就是获取那两个加密参数:
msg也可以写成msg={"offset":"页面偏移量=(页数-1)*20","limit":"20"},offset和limit这两个参数必须有(js)偏移量offset=(page-1)*20生成长度为16的随机字符串i=generate_random_strs(16)RSA加密之后得到encSecKey的值encSecKey=RSAencrypt(i,e,f)returnencText,encSecKey
获取全部评论
上面我们获取到了两个参数encText和encSecKey,利用这两个参数来构造post表单数据(FormData),即data的值:
params,encSecKey=get_params(page)data={'params':params,'encSecKey':encSecKey}url=''+str(songid)+'?csrf_token='
html=(url,headers=headers,data=data)
2018AI开发者大会
◆AI工程师必备大会◆
2018AI开发者大会是一场由中美人工智能技术高手联袂打造的AI技术与产业的年度盛会!我们只讲技术,拒绝空谈!
这里有10场技术专题论坛:计算机视觉、数据分析、机器学习、知识图谱、智慧金融、智能驾驶、语音技术、智慧医疗、机器学习工具、自然语言处理。
还有15+硅谷实力讲师团、80+AI领军企业技术核心人物、100+技术大众实力媒体、1500+AI专业开发者
