打开浏览器F12后 看到了一个无限的debugger, 看到控制台有一堆打印出来的信息.

image.png (12.32 KB, 下载次数: 0)
下载附件
2025-6-7 12:08 上传

image.png (26.78 KB, 下载次数: 0)
下载附件
2025-6-7 12:05 上传
为了防止他把浏览器刷爆, 打下script断点把console.log和setInterval给hook了
在翻页之后, 已知请求链接为:
https://match.yuanrenxue.cn/api/match/1?m=91bc2ee952717f069c4dded57aa16eab%E4%B8%A81749369641
https://match.yuanrenxue.cn/api/match/1?page=2&m=dccdf00ea9649eb81a75b9b912481c25%E4%B8%A81749369648
https://match.yuanrenxue.cn/api/match/1?page=3&m=945af4fe498b76666ed2369f0871e737%E4%B8%A81749369650

image.png (11.08 KB, 下载次数: 0)
下载附件
2025-6-7 12:15 上传
根据链接的分析应该是一串暂时未知的加密+|+时间戳组成, 加密参数应该是跟后面的时间戳息息相关
重新刷新网页打上script断点一步步查看运行的js有没有可疑的地方
在打script断点的过程中. 发现有部分代码是通过eval执行的, 也打上断点

image.png (19.42 KB, 下载次数: 0)
下载附件
2025-6-7 12:29 上传
当进入到名为oo0O0的方法时, 查看他的形参mw发现是时间戳, 其时间戳跟请求参数m的时间戳极为相似,则跟堆栈看一下是哪里调用了他.

image.png (66.18 KB, 下载次数: 0)
下载附件
2025-6-7 12:32 上传
在方法oo0O0的返回前一行 发现又是一行eval的代码, 跟进去后发现是一个疑似md5的加密,

image.png (26.9 KB, 下载次数: 0)
下载附件
2025-6-7 12:53 上传
而底下的window.f调用了hex_md5的参数是固定位时间戳的字符串

image.png (7.44 KB, 下载次数: 0)
下载附件
2025-6-7 12:54 上传
在控制台试一下是否标准md5加密

image.png (7.41 KB, 下载次数: 0)
下载附件
2025-6-7 12:59 上传
确认不是标准md5加密后 把js代码扣下来,然后对比一下跟浏览器运行结果是否一样

image.png (11.34 KB, 下载次数: 0)
下载附件
2025-6-7 12:59 上传

image.png (24.77 KB, 下载次数: 0)
下载附件
2025-6-7 13:00 上传
确认一样之后, 加密代码就扣完了下面是撸Python代码的时候了
[Python] 纯文本查看 复制代码
import statistics
import subprocess
import time
import requests_html
requests = requests_html.HTMLSession()
def main():
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36',
'Cookie': 'sessionid=自己的sessionid',
}
avg = list()
for i in range(1, 6):
_time = str(int(time.time()) * 1000 + 100000000)
m = subprocess.Popen("node 1.js混淆-源码乱码 " + _time, encoding="utf-8", stdout=subprocess.PIPE)
m = m.stdout.read().replace('\n', '') + '丨' + _time[:10]
url = 'https://match.yuanrenxue.cn/api/match/1'
params = {
'page': i,
'm': m
}
response = requests.get(url, params=params, headers=headers).json()
for j in response['data']:
avg.append(j['value'])
print(response)
print(avg)
print(statistics.mean(avg))
if __name__ == '__main__':
main()
运行后获得结果, 大功告成打完收工!

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