**# 猿人学第二十题
首先通过请求发现,请求就两个参数,一个t和sign。
其中t为时间戳,sign为一个加密后的字符串,字符串的长度为32。
接着往后分析。。。。。。
我们进入window.sign这个函数里面去。因为这里是sign的加密地方。
经过几次重复调试发现getStringFromWasm0(r0, r1);,这里的r0和r1为固定不变的。这个函数的意思是固定从内存固定的位置去取加密后的参数。
我们发现传入的参数content,也就是 “2|1658741542000” 也就是这个玩意儿 ,只在一个地方被引用了。因为我已经分析过了。
// 参数在这里放入的内存。
var ptr0 = passStringToWasm0(content, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["__wbindgen_malloc"], _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["__wbindgen_realloc"]);
// 这里对content进行加密的,这个时候直接取内存里面取的参数,所以,传入的是内存地址
_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["sign"](retptr, ptr0, len0);
使用getStringFromWasm0(r0, r1);这个函数进行测试发现,ptr0为内存地址。
最后进入
// 加密函数
_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["sign"]
查看哪个函数对这个地址进行了操作的。
call $match_twenty::sign::MD5:#️⃣:hd3cc2e6ebf304f6f
这里是参数加密的位置
分析完了,直接贴代码
import requests
import time
import hashlib
headers = {
'authority': 'match.yuanrenxue.com',
'accept': 'application/json, text/javascript, */*; q=0.01',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'cache-control': 'no-cache',
'cookie': 'Hm_lvt_0362c7a08a9a04ccf3a8463c590e1e2f=1656481755,1656661058,1656985288,1658457383; Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1658368336,1658454438,1658713011,1658720402; no-alert3=true; Hm_lvt_9bcbda9cbf86757998a2339a0437208e=1658368358,1658454446,1658713020,1658720406; tk=-111657350385238811; sessionid=dfl6r164x63xtt6tgv4r53im8bm075u1; Hm_lpvt_9bcbda9cbf86757998a2339a0437208e=1658736978; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1658738427',
'pragma': 'no-cache',
'referer': 'https://match.yuanrenxue.com/match/20',
'sec-ch-ua': '^\\^.Not/A)Brand^\\^;v=^\\^99^\\^, ^\\^Google',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '^\\^Windows^\\^',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'yuanrenxue.project',
'x-requested-with': 'XMLHttpRequest',
}
count = 0
for page in range(1, 6):
# 获取时间戳
t = time.time()
t = str(int(t)) + "000"
# 获取sign 参数
sign = hashlib.md5((str(page) + "|" + t + 'D#加加密参数').encode()).hexdigest()
params = (
('page', page),
('sign', sign),
('t', t),
)
response = requests.get('https://match.yuanrenxue.com/api/match/20', headers=headers, params=params)
data = response.json().get('data')
for i in data:
count += i.get('value')
print(count)
**