[原创] 猿人学Web爬虫攻防第一题:js 混淆 - 源码乱码

查看 1|回复 0
作者:ZenoMiao   
本次解题链接地址为: https://match.yuanrenxue.cn/match/1
打开浏览器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 上传

下载次数, 下载附件

您需要登录后才可以回帖 登录 | 立即注册

返回顶部