← 返回 Day 136 正文

Day 136 · 练习与清单

Day 136 - JS 逆向进阶 · 练习与检查表

✅ 今日完成清单


📝 练习题

基础

1. Hook 模板改写

把 code/01-hook-basic.py 的 hook_function 改造为"条件 Hook":只有当入参包含 "sign" 关键字时才打印日志并触发断点,其余调用静默放行。思考:这解决了什么实际问题?(提示:高频函数全量打印会淹没日志)

2. 调用栈阅读

运行 code/02-stack-trace.py 的 A 部分,按输出回答: - 调用链里哪一层是"加密核心"? - 如果 build_params 和 send_request 都是混淆名 _0x1a2b,你还能靠什么信息定位?(提示:Scope 变量值)

进阶

3. 补环境完整性校验器

给 code/02-stack-trace.py 的 Env 类增加 diff(real_env: dict) 方法:传入真实浏览器的属性快照(可手写),输出"已补但值不一致 / 真实有但漏补 / 补了多余属性"三类差异报告。

4. Hook 时机实验

设计一个最小 HTML 实验:页面脚本第一行就把 var _origBtoa = window.btoa 存入闭包并一直用 _origBtoa。验证:Hook 注入晚于该脚本时必然失效;再把注入提前到 document_start,观察 Hook 是否生效(本例中仍失效,为什么?如何补救?提示:改 Hook Function.prototype 层面或拦截更底层)。

5. 签名方案选型

针对以下三种站点,分别选择"Python 复现 / Node 补环境 / 无头浏览器"并说明理由: - a) 签名是纯 MD5(固定盐+参数),无环境检测 - b) 签名读取 navigator.plugins 长度与 document.createElement('canvas') 指纹 - c) 签名每 10 分钟由服务端下发一段新 JS 动态生成,且 JS 带 VMP 虚拟机壳