目的
目的: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的格式,便于直接传入关键参数即可
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐