news 2026/5/10 16:51:58

JS逆向|猿人学逆向反混淆练习平台第13题加密分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JS逆向|猿人学逆向反混淆练习平台第13题加密分析

关注它,不迷路。

  • 本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!

一.题目地址

https://match.yuanrenxue.cn/match/13

二.抓包分析

先打开控制台,然后再打开上面的网站,查看数据所在的页面:

发现每次请求数据页,都会先请求下面这个url:

https://match.yuanrenxue.cn/api2/13

才看数据,发现是一段js代码:

控制台运行:

原来是设置了cookie,那就很简单了。直接交给AI吧。

三.编写Python代码

import jsonimport refrom typing import Tuple import requests BASE_URL = "https://match.yuanrenxue.cn"MATCH_URL = f"{BASE_URL}/match/13"API2_URL = f"{BASE_URL}/api2/13"QUESTION_URL = f"{BASE_URL}/api/question/13"SESSIONID = "XXXXXX"USER_AGENT = "yuanrenxue" FALSE_TEXT = "false"TRUE_TEXT = "true"OBJECT_TEXT = "[object Object]" def _replace_indexed_token(expression: str, pattern: str, alphabet: str) -> str: def repl(match: re.Match[str]) -> str: index = int(match.group(1)) try: char = alphabet[index] except IndexError as exc: raise ValueError(f"Unexpected token index {index} for {alphabet!r}") from exc return f"('{char}')" return re.sub(pattern, repl, expression) def decode_cookie_assignment(js_code: str) -> Tuple[str, str]: script = js_code.strip() prefix = "document.cookie=" if not script.startswith(prefix): raise ValueError(f"Unexpected /api2/13 response: {script[:80]!r}") expression = script[len(prefix) :] if expression.endswith(";"): expression = expression[:-1] expression = expression.replace('\\"', '"') expression = re.sub(r"\s+", "", expression) expression = _replace_indexed_token( expression, r"\(\(\[\]\+!\[\]\)\[(\d+)\]\)", FALSE_TEXT, ) expression = _replace_indexed_token( expression, r"\(\(\[\]\+\!\!\[\]\)\[(\d+)\]\)", TRUE_TEXT, ) expression = _replace_indexed_token( expression, r'\(\(\{\}\+""\)\[(\d+)\]\)', OBJECT_TEXT, ) pieces = re.findall(r"\('([^']*)'\)", expression) if not pieces: raise ValueError(f"Unable to decode cookie expression: {expression[:120]!r}") assignment = "".join(pieces) if "=" not in assignment: raise ValueError(f"Decoded assignment is invalid: {assignment!r}") name, remainder = assignment.split("=", 1) value = remainder.split(";", 1)[0] return name, value def build_session() -> requests.Session: session = requests.Session() session.cookies.set("sessionid", SESSIONID, domain="match.yuanrenxue.cn", path="/") session.headers.update( { "User-Agent": USER_AGENT, "Referer": MATCH_URL, "X-Requested-With": "XMLHttpRequest", } ) return session def fetch_page(session: requests.Session, page: int) -> list[int]: api2_response = session.get( API2_URL, headers={"Accept": "*/*"}, timeout=10, ) api2_response.raise_for_status() cookie_name, cookie_value = decode_cookie_assignment(api2_response.text) session.cookies.set(cookie_name, cookie_value, domain="match.yuanrenxue.cn", path="/") print (cookie_name,cookie_value) question_response = session.get( QUESTION_URL, params={"page": page, "pageSize": 10, "kw": ""}, headers={"Accept": "application/json, text/javascript, */*; q=0.01"}, timeout=10, ) question_response.raise_for_status() payload = question_response.json() if "data" not in payload or not isinstance(payload["data"], list): raise ValueError(f"Unexpected question payload: {payload!r}") return payload["data"] def main() -> None: session = build_session() all_numbers: list[int] = [] page_results: dict[int, list[int]] = {} for page in range(1, 6): numbers = fetch_page(session, page) page_results[page] = numbers all_numbers.extend(numbers) print(f"page {page}: {json.dumps(numbers, ensure_ascii=False)}") print(f"sum: {sum(all_numbers)}") if __name__ == "__main__": main()

运行结果:

今天的分享就到这里,感谢阅读。

欢迎加入知识星球,学习更多AST和爬虫技巧。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 6:35:42

【多模态大模型幻觉治理白皮书】:2024年工业界实测TOP5缓解策略与3个未公开的评估指标

第一章:多模态大模型幻觉问题研究 2026奇点智能技术大会(https://ml-summit.org) 多模态大模型在融合文本、图像、音频与视频等异构信息时,其推理路径高度依赖跨模态对齐机制与联合表征空间的稳定性。当模态间语义映射存在偏差、训练数据分布不均衡或指…

作者头像 李华
网站建设 2026/4/15 6:32:19

CLIP-GmP-ViT-L-14辅助学术研究:LaTeX论文图表自动标注与索引

CLIP-GmP-ViT-L-14辅助学术研究:LaTeX论文图表自动标注与索引 1. 引言 写论文最头疼的事情之一是什么?对我而言,绝对是处理图表。辛辛苦苦画好一张图,或者整理好一个表格,接下来就得绞尽脑汁想一个既准确又简洁的标题…

作者头像 李华
网站建设 2026/4/15 6:31:28

国产SC7A20E加速度计实战:用软件IIC驱动,实现低至15uA的震动唤醒方案

国产SC7A20E加速度计实战:软件IIC驱动与15uA震动唤醒方案深度解析 在物联网终端和穿戴设备设计中,功耗优化始终是工程师面临的核心挑战。SC7A20E作为国产三轴加速度计的代表,凭借其极低功耗特性和震动唤醒功能,正逐步成为电池供电…

作者头像 李华
网站建设 2026/4/15 6:28:10

Autoware实车部署避坑指南(一)-- 从零搭建矢量地图与Unity工具链实战

1. 为什么需要矢量地图与Unity工具链 第一次接触Autoware实车部署的朋友,往往会被矢量地图这个概念搞懵。简单来说,矢量地图就是给自动驾驶车辆用的"高精导航地图",它不像我们手机导航用的普通地图那样只有粗略的道路信息。举个例子…

作者头像 李华
网站建设 2026/4/15 6:22:30

AI绘画黑科技:用ControlNet实现线稿自动上色(附Colab笔记本)

AI绘画黑科技:用ControlNet实现线稿自动上色实战指南 每次看到手绘线稿在AI加持下瞬间变成色彩丰富的作品,总让人感叹技术的神奇。ControlNet的出现,让非技术背景的设计师也能轻松玩转AI绘画。本文将手把手教你如何用最简单的操作&#xff0…

作者头像 李华