
image.png (40.86 KB, 下载次数: 0)
下载附件
2025-6-13 14:46 上传
开搞!!!
先打开F12抓包, 翻页请求, 查看加密参数, 发现在请求参数中发现key为uc的参数是加密的

image.png (11.87 KB, 下载次数: 0)
下载附件
2025-6-13 14:48 上传
打下XHR断点, 继续翻页后跟盏发现了许多东西, data 的值是list传过来的, 而list刚好在上面由page和uc组成的(uc恰好是我们要找的加密参数), 而uc是window.a获取的, 在这里上面有一串js_fuck(好像没用, 直接忽略), 再上面是window.a的加密内容, 看代码看出来应该是AES加密, 打个断点继续分析

image.png (25.01 KB, 下载次数: 0)
下载附件
2025-6-13 14:50 上传
跟盏发现window.a传进来的参数word是由10位的时间戳+"|"+页码组成的, 而认识js的AES加密的就知道CryptoJS.AES.encrypt第一个参数为加密内容, 第二个参数为key, 而下面可以看到他的mode是ECB, AES的ECB是不需要iv的, 所以置空, key是从window.m来的, window.m只是对window.k进行了十六进制的转换

image.png (18.53 KB, 下载次数: 0)
下载附件
2025-6-13 14:54 上传
分析完毕, 开撸python代码
首先先import 所需的库
[Python] 纯文本查看 复制代码
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
然后new一个crypto对象把key放进去, key需要进行encode, 第二个参数需要选择ECB
[Python] 纯文本查看 复制代码
crypto = AES.new("wdf2ff*TG@*(F4)*YH)g430HWR(*)wse".encode(), AES.MODE_ECB) # key, mode, iv. ECB不需要IV
然后构建加密参数, 进行加密
[Python] 纯文本查看 复制代码
for i in range(1, 101):
crypto_data = f"{int(time.time())}|{i}"
data = {
'page': i,
'uc': base64.b64encode(crypto.encrypt(pad(crypto_data.encode(), AES.block_size))).decode()
}
尝试加密看看是否加密后的结果跟网页内一致

image.png (10.64 KB, 下载次数: 0)
下载附件
2025-6-13 15:03 上传

image.png (2.68 KB, 下载次数: 0)
下载附件
2025-6-13 15:03 上传
打完收工

image.png (48.41 KB, 下载次数: 0)
下载附件
2025-6-13 15:04 上传
核心代码都放上去了, 其他的代码就不贴了 提高动手能力.