Python3爬虫进阶JS逆向学习(五)
目的目的:JS逆向的学习与交流目标:分析某云音乐网站中加密参数目标网址:https://music.163.com/思路分析一、内容概览二、请求参数分析#!/usr/bin/env python# -*- coding: utf-8 -*-# Author: jia666# Time: 2021/6/21 11:30import randomfrom Crypto.Cipher import AE
·
目的
目的:JS逆向的学习与交流
目标:分析某云音乐网站中加密参数
目标网址:https://music.163.com/
思路分析
一、内容概览
二、请求参数分析
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author : jia666
# Time : 2021/6/21 11:30
import random
from Crypto.Cipher import AES
from binascii import hexlify
import base64
def get_random_str(a):
'随机返回16位字符串'
str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
random_str=random.sample(str,a)
return "".join(random_str)
def aes_encrypt(text, key): # text是要加密的密文,key是密钥
'AES加密'
iv = b'0102030405060708'
pad = 16 - len(text) % 16
text = text + chr(2) * pad
encryptor = AES.new(key.encode(), AES.MODE_CBC, iv)
encryptor_str = encryptor.encrypt(text.encode())
result_str = base64.b64encode(encryptor_str).decode()
return result_str
def rsa_encrypt(text): # text是16位的随机字符串
pub_key = '010001' # js中的e
# js中的f
modulus = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'
text = text[::-1]
result = pow(int(hexlify(text.encode()), 16), int(pub_key, 16), int(modulus, 16))
return format(result, 'x').zfill(131)
# b函数,两次AES加密
def get_aes(text, random_str):
first_aes = aes_encrypt(text, key='0CoJUm6Qyw8W8jud') # key是固定的,相当于g
second_aes = aes_encrypt(first_aes, random_str)
return second_aes
if __name__ == '__main__':
text="{\"id\":\"1431089706\",\"c\":\"[{\\\"id\\\":\\\"1431089706\\\"}]\",\"csrf_token\":\"\"}" # js中的d
random_str = get_random_str(16) # js中的i
params = get_aes(text, random_str)
encSecKey = rsa_encrypt(random_str)
print({'params': params, 'encSecKey': encSecKey})
三、注意
1.生成加密函数时,两次请求传入的两个d值是不同的
2.需要自己调试d的格式,便于直接传入关键参数即可
更多推荐
已为社区贡献16条内容
所有评论(0)