js加密逆向

        在现代网页与接口交互中,JavaScript 加密已成为保护数据安全与防止恶意访问的重要手段。无论是接口签名、令牌生成,还是请求参数加密,这些机制的本质是通过前端逻辑与密钥算法来验证请求的合法性。对于数据采集、自动化测试或安全研究人员来说,理解和分析这些加密流程,不是为了规避安全机制,而是为了在获得合法授权的前提下,确保程序端能够正确构造请求,与系统保持一致性。本文将以合规、安全为前提,总结 JS 加密逆向在 Python 爬虫中的常用方法与注意事项,帮助读者在学习技术的同时,时刻牢记法律与道德边界。

一、什么是“JS 加密/签名”

        网站为了防刷或保护接口,会在请求里加上动态参数(如 signtokennoncetimestampx-b3 等),这些值通常由浏览器端 JS 算法计算(可能还带 AES/RSA/HMAC/MD5、Base64、Gzip、Protobuf、WASM、混淆压缩、时间随机数、设备指纹等)。逆向的本质是:找出这些值是在哪儿、怎么被算出来的,然后在你的爬虫里复现。

二、定位:先“找哪里算”,再“看怎么算”

核心工具:Chrome DevTools(Network + Sources)、断点、反混淆、对比法。

步骤

  1. 抓包对比

    • 在 DevTools → Network 里锁定关键接口(响应是你想要的数据)。

    • 右键 “Copy as cURL”,对比不同请求里哪些字段会变(多半是签名/时间戳/nonce/一次性 token)。

    • 观察请求顺序:很多站点会先请求“预签名/密钥/挑战”,再请求业务数据。

  2. 静态检索(Sources 面板)

    • 搜关键词:signtokennoncemd5CryptoJSRSAAESsubtle.digestbtoa/atobtoString(36)hmacsha256fetchXMLHttpRequest

    • 点击 “{}” 按钮 Pretty print 代码,或下载 .js 反混淆(如 jsnice/deobfuscator)。

    • 签名构造链:通常是「拼参与排序 → 加盐/拼接固定串 → 算哈希/加密 → hex/base64 输出」。

  3. 动态断点

    • Network 面板点击请求 → Initiator 查看是谁发的。

    • Sources → 右侧 XHR/fetch 断点(Break on XHR/Fetch),让请求一发出就断住,沿调用栈往上看。

    • 事件断点Breakpoint onScript / setTimeout 等,卡住混淆时序。

    • 在关键函数上插入 debugger;(临时修改)/ 或右键添加断点。

三、动态 Hook(最省时间)

当代码混淆严重时,用注入 Hook直接把输入/输出打印出来,比硬啃混淆快很多。

Playwright 注入全局 Hook(推荐):

# pip install playwright && playwright install
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    ctx = browser.new_context()
    page = ctx.new_page()
    page.add_init_script("""
    // 1) Hook fetch / XHR,打印请求与 body
    (function(){
      const _fetch = window.fetch;
      window.fetch = function(input, init){
        try { console.log('[HOOK][fetch]', input, init && init.body); } catch(e){}
        return _fetch.apply(this, arguments);
      };
      const _open = X
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值