JS逆向最常卡在签名参数生成逻辑找不到入口,因签名多由混淆JS动态计算,需通过DevTools搜索关键词、监听属性修改、分析IIFE定位;PyExecJS已淘汰,推荐PyMiniRacer或execjs+Node;签名依赖时间戳、随机串、设备指纹等实时浏览器API,须同步执行环境;反调试需禁用breakpoint或注入屏蔽代码;密钥片段常来自请求链路而非单个JS文件。

JS逆向最常卡在哪儿:签名参数生成逻辑找不到入口
绝大多数加密API的签名(如 sign、token、ts)不是静态值,而是由 JS 动态计算得出。直接抓包看到的请求里有 sign=xxx,但你复制过来一用就 401 或 403——因为签名绑定了时间戳、随机数、请求体、密钥片段等,且计算过程藏在混淆 JS 里。
实操建议:
- 别急着扣代码,先在 Chrome DevTools 的
Sources面板里搜索关键词:sign、md5、hmac、crypto、getSign、_sign,再配合右键「Break on > Property modification」监听关键变量被赋值的时刻 - 重点关注页面加载后立即执行的 IIFE(立即执行函数),尤其是带大量字符串拼接和
atob/eval的那段——90% 的签名逻辑藏在那儿 - 如果搜不到,试试禁用 JS 后刷新页面,看是否报错或缺失某个全局函数(比如
window.getSign),那它大概率就在某个未加载的 script 标签里,用 Network 面板过滤js请求逐个检查
Python调用浏览器环境JS:PyExecJS已淘汰,该用什么
PyExecJS 早就停止维护,Node.js 版本不兼容、中文乱码、无法处理 setTimeout 和模块导入,跑签名函数十次八次崩一次。
实操建议:
- 优先选
PyMiniRacer(基于 V8):启动快、支持 ES6+、能跑带import的现代 JS,但需本地装libv8,Windows 用户建议用预编译 wheel 安装:pip install pymini-racer --find-links https://github.com/sqreen/PyMiniRacer/releases - 备选
execjs+ 自带 Node 运行时:确保系统 PATH 里有可用的node,且版本 ≥14;避免用 npm 全局安装的旧版execjs,改用pip install execjs并手动指定运行时:execjs.get('Node') - 绕过 JS 调用?不行。很多签名依赖
navigator、screen、performance.now()等浏览器 API,纯 Python 模拟极易被服务端识别为爬虫
签名参数动态变化:时间戳、随机串、设备指纹怎么同步
你以为拿到 JS 就能复现签名?错。很多接口的 sign 依赖实时值:比如 ts 是毫秒级时间戳,nonce 是每次请求唯一的 base64 随机串,device_id 可能来自 localStorage 或 Canvas 指纹。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
实操建议:
- 不要手写时间戳:从 JS 上下文中直接取
Date.now(),否则 Python 的int(time.time() * 1000)和 JS 执行时刻差几毫秒,签名就失效 - 随机串必须和 JS 里生成方式一致:比如 JS 用
Math.random().toString(36).substr(2, 10),你就不能用 Python 的uuid.uuid4().hex[:10]替代——字符集和长度分布不同 - 设备指纹类参数(如
fingerprint)往往调用canvas.getContext('2d').getImageData(...),这种没法纯 Python 模拟,得靠无头浏览器(Playwright / Selenium)先执行 JS 提取,再传给签名函数
反调试和代码保护:遇到 debugger、控制台报错就停怎么办
目标站点加了反调试,JS 里塞满 debugger、检测 console 是否被覆盖、判断 self !== top,你一断点就卡死或跳转到错误页。
实操建议:
- 在 Sources 面板右上角点「{}」美化代码后,全局搜索
debugger,逐个右键「Never pause here」;或者勾选「Deactivate breakpoints」临时关闭所有断点 - 屏蔽反调试检测:在 Console 里粘贴这段(仅用于分析):
Object.defineProperty(window, 'debugger', { get: () => {} }); window.console = { log: () => {}, error: () => {} };,再刷新页面 - 遇到混淆严重(如
_0x1a2b[0x3c](_0x1a2b[0x4d])),别硬读。用 Chrome 的「Blackbox script」功能把混淆文件加入黑名单,让它跳过单步,专注看你能定位到的干净函数(比如buildSign)
真正麻烦的不是签名算法本身,而是那个藏在三重 eval 里的密钥片段——它可能来自 XHR 响应头、localStorage 某个字段,甚至上一个接口返回的加密字符串解密结果。没完整走一遍真实请求链路,光扣一个 JS 文件永远缺半块拼图。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










