逆向11-毛毛租
毛毛租
目标接口


请求加密

经过分析,得知上图是我们的目标

o.default.aes_encrypt(JSON.stringify(a))
// 1. a是 {Type: 0, page: 1, expire: 1722579551355} 是页码加时间的参数
// 2.JSON.stringify(a) 是对第一步进行了一个字符串序列化
// 3.o.default.aes_encrypt()是最终的结果
对于前两步都比较好理解,至于第三步,我们需要进去分析一下他的aes加密是如果操作的
1 鼠标悬浮,点进去

2 分析代码


python代码复现
# aes_en_de.py
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
from hashlib import md5
def md_5(a):
# (1)生成md5并取前16位
obj = md5()
obj.update("www_maomaozu_com".encode('utf-8'))
iv_k = obj.hexdigest()[0:16]
key = iv_k.encode()
iv = iv_k.encode()
# (2)创建AES对象
aes = AES.new(key, AES.MODE_CBC, iv) # key, 模式, iv
# (3)对数据做加密
data = a.encode()
pad_data = pad(data, 16)
encrypt_date = aes.encrypt(pad_data)
# (4)base64编码
base64_encrypt_date = base64.b64encode(encrypt_date).decode()
return base64_encrypt_date
主代码使用
import requests
from aes_en_de import md_5
url = "https://www.maomaozu.com/index/build.json"
a = '{"Type":0,"page":2,"expire":1722500796970}'
payload = md_5(a) # 传参数
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Type': 'application/json; charset=UTF-8',
'Cookie': 'Hm_lvt_6cd598ca665714ffcd8aca3aafc5e0dc=1722498703; Hm_lpvt_6cd598ca665714ffcd8aca3aafc5e0dc=1722498703; HMACCOUNT=FA0EEA6697020683; SECKEY_ABVK=3UFsRdQh7qfr5xq/c0dr986UtfSmE0r7muQmdpwKqiw%3D; PHPSESSID=j80e34ab6sr23cha65u6647j9a; BMAP_SECKEY=1dFKO_h5UFac_sadPPn1uLCyeNKorcbCzdoHnqLz-xDmBjIxVbwYScnE2QFDMEGdlxNwE5y4EfNUqdSbonVKsjZbDq6Y_Mj3MX9QEkhHGqtYiXRqBt896eTEFrF-DWwSKuNnXd9JreIw5jhOVHtW_lsaltgVgqQnWvOFrxr1rlU',
'Origin': 'https://www.maomaozu.com',
'Referer': 'https://www.maomaozu.com/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
'sec-ch-ua': '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
获取加密的数据

返回值解密



代码实现
# aes_en_de.py
def jiemi(text):
obj = md5()
obj.update("www_maomaozu_com".encode('utf-8'))
iv_k = obj.hexdigest()[0:16][::-1] # 翻转
base64_encrypt_date = text
# (1)base64解码
encrypt_date = base64.b64decode(base64_encrypt_date)
# (2)解密
# 2.1 确认好解密的参数
key = iv_k.encode()
iv = iv_k.encode()
# 2.2 创建AES对象
aes = AES.new(key, AES.MODE_CBC, iv) # key 模式 iv
# 2.3 对数据进行解密
data = aes.decrypt(encrypt_date)
# 2.4 将字节转换为字符串
print(data.decode(), type(data.decode()))
总代码
import requests
from aes_en_de import md_5, jiemi
url = "https://www.maomaozu.com/index/build.json"
a = '{"Type":0,"page":2,"expire":1722500796970}'
payload = md_5(a)
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Type': 'application/json; charset=UTF-8',
'Cookie': 'Hm_lvt_6cd598ca665714ffcd8aca3aafc5e0dc=1722498703; Hm_lpvt_6cd598ca665714ffcd8aca3aafc5e0dc=1722498703; HMACCOUNT=FA0EEA6697020683; SECKEY_ABVK=3UFsRdQh7qfr5xq/c0dr986UtfSmE0r7muQmdpwKqiw%3D; PHPSESSID=j80e34ab6sr23cha65u6647j9a; BMAP_SECKEY=1dFKO_h5UFac_sadPPn1uLCyeNKorcbCzdoHnqLz-xDmBjIxVbwYScnE2QFDMEGdlxNwE5y4EfNUqdSbonVKsjZbDq6Y_Mj3MX9QEkhHGqtYiXRqBt896eTEFrF-DWwSKuNnXd9JreIw5jhOVHtW_lsaltgVgqQnWvOFrxr1rlU',
'Origin': 'https://www.maomaozu.com',
'Referer': 'https://www.maomaozu.com/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
'sec-ch-ua': '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"'
}
response = requests.request("POST", url, headers=headers, data=payload)
# print(response.text)
jiemi(response.text)

这才接可以修改参数进行批量化爬取了

浙公网安备 33010602011771号