Python爬虫JS逆向100实战案例

Python爬虫JS逆向100实战案例:从加密算法到代码实现

一、前言

JavaScript逆向是爬虫进阶的核心技能,涉及对前端加密逻辑的解析与复现。本文精选100个实战案例,覆盖90%以上爬虫场景中的加密算法,包含动态参数生成、签名验证、数据解密等技术难点,并提供完整代码与调试笔记。


二、常见加密算法与逆向思路
  1. Base64编码

    • 特征:结尾常带=填充符,字符集为A-Za-z0-9+/
    • 案例:某微博登录接口的用户名编码(su参数)。
    import base64
    username = "test_user"
    encoded = base64.b64encode(username.encode()).decode()
    print(encoded)  # 输出:dGVzdF91c2Vy
    
  2. MD5/SHA系列哈希

    • 特征:定长输出(MD5为32位,SHA1为40位),不可逆。
    • 案例:某站动态参数sign的生成(结合盐值)。
    import hashlib
    def md5_encrypt(data, salt=""):
        m = hashlib.md5()
        m.update((data + salt).encode())
        return m.hexdigest().upper()
    
  3. AES对称加密

    • 模式与填充:常见CBC/ECB模式,PKCS7填充。
    • 案例:某政府网站数据接口的AES-CBC解密。
    from Crypto.Cipher import AES
    def decrypt_aes(data, key, iv):
        cipher = AES.new(key, AES.MODE_CBC, iv)
        decrypted = cipher.decrypt(bytes.fromhex(data))
        return unpad(decrypted).decode()
    
  4. RSA非对称加密

    • 特征:公钥加密、私钥解密,常见于登录密码传输。
    • 案例:某社交平台登录参数sp的RSA加密实现。

三、实战案例精选(部分)

案例1:某站动态加载数据的Payload与Sig逆向

  • 目标:破解动态参数payloadsig,实现分页爬取。
  • 分析
    • payload为Base64编码的JSON结构,sig为MD5(payload + 固定盐值)。
  • 代码
    import requests, hashlib, json
    def generate_sig(payload):
        salt = "_P"
        return hashlib.md5((payload + salt).encode()).hexdigest().upper()
    
    params = {"sort": 1, "start": 40, "limit": 20}
    payload = base64.b64encode(json.dumps(params).encode()).decode()
    sig = generate_sig(payload)
    

案例2:STEAM密码SHA1加密逆向

  • 目标:模拟STEAM登录时的密码加密流程。
  • 代码
    import hashlib
    def steam_encrypt(password):
        return hashlib.sha1(password.encode()).hexdigest()
    

案例3:某翻译平台Sign参数动态生成

  • 逻辑sign=MD5("fanyideskweb" + 关键词 + salt + 固定盐)
  • 关键参数ts(时间戳)、bv(UA的MD5)、salt(时间戳+随机数)。
    import time, random
    def get_sign(keyword, salt):
        key = f"fanyideskweb{keyword}{salt}Tbh5E8=q6U3EXe+&L[4c@"
        return hashlib.md5(key.encode()).hexdigest()
    

四、进阶技巧与工具
  1. Chrome DevTools调试

    • 使用Sources面板设置断点,跟踪加密函数调用栈。
    • Network面板捕获XHR请求,分析参数变化规律。
  2. PyExecJS与Node.js联动

    • 直接执行JS代码还原加密逻辑:
    import execjs
    ctx = execjs.compile(open("encrypt.js").read())
    result = ctx.call("encryptAES", "data", "key")
    

五、完整资源与代码

本文100个案例的完整代码、调试笔记及加密JS文件已整理至网盘,包含以下主题:

  • 动态Cookie生成(如百度翻译的bv参数)
  • WebSocket数据解密(如实时股票数据)
  • 混淆JS代码还原(利用AST语法树解析)
  • 以下为大量js逆向案例截图
    Python爬虫JS逆向100实战案例_第1张图片
    Python爬虫JS逆向100实战案例_第2张图片

六、总结

JS逆向的核心在于加密逻辑定位算法复现,需结合调试工具与Python加密库(如Cryptohashlib)。通过本文案例,读者可掌握从参数捕获到算法还原的全流程,应对90%的爬虫加密场景。

你可能感兴趣的:(python,爬虫,node.js)