深夜流泪音乐js逆向爬虫

例行打开抓包工具,不用想就知道这是一个阿贾克斯请求。打开后没怎么找就发现了评论内容。

 看起来加密参数有两个,跟栈以找加密位置就出现了,挺好找的。打上短点刷新请求

 输入加密内容,就出现了我们要的加密加密参数。

 多次刷新后发现,后面的参数并不是服务器返回的,而是存在js源码里面的。唯一变化的参数就是第一个,并且只有page变化,page是什么就不用说了。

 进入到window.asrsea函数内部,依次打上断点,a(16)发现是个随机数,每次控制台输出都会发生变化。h.enclext是第一次加密过程,进去后发现这是个aes加密方式。

 随便找个aes在线工具,传入参数发现跟这个函数return参数一样,第一层加密就过去了。

 然后来到第二次加密的算法的位置,发现传入的两个参数第一个是上一次加密的结果,另外一个是一个随机数,然后再进行一个aes加密。

 进去加密b函数,把key跟加密内容修改下,第二层的加密模式也让破解了;

 剩下的一个加密参数,是用a(16)出一个随机数,然后进行一次加密的,直接固定下来,懒得分析了,直接设置为定值完整代码如下

from Crypto.Cipher import AES
import base64


BLOCK_SIZE = 16  # Bytes
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * \
                chr(BLOCK_SIZE - len(s) % BLOCK_SIZE)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]

url = '
d = '{"rid":"R_SO_4_1901371647","threadId":"R_SO_4_1901371647","pageNo":44,"pageSize":"150","cursor":"1646708474245","offset":"0","orderType":"1","csrf_token":""}'
e = '010001'
f = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'
g = '0CoJUm6Qyw8W8jud'
i = '87C8WxdEZ1mf3QH4'
iv = "0102030405060708"


def AES_Encrypt(key, data):
    data = pad(data)
    # 字符串补位
    cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, iv.encode('utf8'))
    encryptedbytes = cipher.encrypt(data.encode('utf8'))
    # 加密后得到的是bytes类型的数据,使用Base64进行编码,返回byte字符串
    encodestrs = base64.b64encode(encryptedbytes)
    # 对byte字符串按utf-8进行解码
    enctext = encodestrs.decode('utf8')
    return enctext


enctext = AES_Encrypt(g, d)
print(enctext)
enctext1 = AES_Encrypt(i, enctext)
jiami2 = '5036ea55f9536c27a6c0fd82dff8db4bac71c0d1c847913173ea44d9fb2c3f68ec7f56c1b60e0508f9d9e885077d8a8a772bf60ee2bedeba122e5cab184cb149b4fc81847f9aac394eaf719c070224a4e7ed42532aba38b72cc37b5e9aa5488848d79e29fc26781dfd0a8d46ebc6aa3ce892b992b4834d4343a2751d6366eee7'
data = {'params': enctext1,
        'encSecKey': jiami2}
head = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'}
qw = requests.post(url, data=data, headers=head).json()['data']['comments']

for i in qw:
    print(i)
    print('用户名字:', i['user']['nickname'])
    print(i['content'])效果如下:

批量爬取的话,要选把歌曲id爬下来,然后进行跟换,就好了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值