live-forum/server/crawler/commerce/快速参考.md
2026-03-24 11:27:37 +08:00

7.3 KiB
Raw Blame History

API验签破解 - 快速参考

🎯 核心概念

验签参数 = 防止爬虫的签名参数

常见参数:
├─ a_bogus    → 最关键,每个请求都不同
├─ msToken    → 会话Token
├─ verifyFp   → 设备指纹
└─ fp         → 设备指纹同verifyFp

🚀 三种方案对比

方案 难度 稳定性 速度 推荐度
Cookie方案 推荐
Playwright方案 推荐
完全逆向方案 ⚠️ 高级

📦 当前项目Cookie方案

日常使用

# Cookie失效时重新登录
python main.py login

# 抓取数据
python main.py crawl

# 守护进程模式
python main.py daemon

原理

1. 浏览器登录 → 保存Cookie
2. 使用Cookie发送请求 → 无需验签参数
3. Cookie失效 → 重新登录

🔍 开始逆向分析

方法1: Python工具最简单

# 1. 安装依赖
pip install playwright
playwright install chromium

# 2. 运行工具
python tools/capture_params.py

# 3. 在浏览器中操作
#    工具会自动显示所有参数

方法2: 浏览器Hook最专业

// 1. 打开网站 + F12
// 2. Console标签
// 3. 粘贴 tools/browser_hook.js 内容
// 4. 回车运行
// 5. 正常操作,查看捕获:

window._showCapturedRequests()    // 查看所有请求
window._capturedRequests[0]       // 第一个请求详情
window._exportCapturedRequests()  // 导出JSON

方法3: Chrome DevTools经典

1. F12 → Network → Fetch/XHR
2. 勾选 "Preserve log"
3. 操作页面触发请求
4. 找到 getInstituteDarenData
5. 右键 → Copy → Copy as fetch

🔑 找到签名算法

搜索关键词

// Sources标签 → Ctrl+Shift+F

搜索词
├─ "a_bogus"        签名参数名
├─ "sign"           签名函数
├─ "_webmsdk"       签名SDK
├─ "encrypt"        加密函数
└─ "getInstituteDarenData"   API调用位置

设置断点

1. 找到可疑函数
2. 点击行号设置断点
3. 刷新页面
4. 单步调试 (F10/F11)
5. 查看 Call Stack

📝 实战代码片段

测试Cookie是否足够

import requests

url = "https://buyin.jinritemai.com/api/authorTradeData/getInstituteDarenData"
cookies = {'sessionid': 'xxx', ...}  # 从浏览器复制

# 只带Cookie不带验签参数
params = {
    'page': 1,
    'pageSize': 20,
    'start_time': '2025/11/29',
    'end_time': '2025/11/29'
}

response = requests.get(url, params=params, cookies=cookies)
print(response.status_code)  # 200 = Cookie足够
print(response.json())

使用Playwright方案

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()
    
    # 加载Cookie
    context.add_cookies([
        {'name': 'sessionid', 'value': 'xxx', 'domain': '.jinritemai.com', ...}
    ])
    
    page = context.new_page()
    
    # 监听API响应
    def handle_response(response):
        if 'getInstituteDarenData' in response.url:
            print("捕获到数据:", response.json())
    
    page.on('response', handle_response)
    page.goto('https://buyin.jinritemai.com/...')
    
    # 等待数据
    page.wait_for_timeout(5000)
    browser.close()

使用execjs执行JS

import execjs

# 从浏览器提取的JS代码
js_code = """
function generateSign(url, params) {
    var timestamp = Date.now();
    var str = url + JSON.stringify(params) + timestamp;
    // ... 实际的加密逻辑
    return btoa(str);  // Base64编码
}
"""

ctx = execjs.compile(js_code)
sign = ctx.call('generateSign', url, params)
print(f"a_bogus: {sign}")

🛠️ 调试技巧

查看全局变量

// Console中执行
for (let key in window) {
    if (key.includes('token') || 
        key.includes('sign') ||
        key.includes('fp')) {
        console.log(key, typeof window[key]);
    }
}

Hook函数调用

// 假设签名函数是 window._sign
const original = window._sign;
window._sign = function(...args) {
    console.log('_sign被调用:', args);
    const result = original.apply(this, args);
    console.log('_sign返回:', result);
    console.trace();
    return result;
};

导出网络请求

1. Network标签
2. 右键请求列表
3. Save all as HAR
4. 使用文本编辑器查看

📚 相关文档

项目根目录/
├─ 如何破解验签.md          ← 详细教程
├─ 逆向分析指南.md          ← 完整指南
├─ tools/
│  ├─ README.md             ← 工具说明
│  ├─ capture_params.py     ← Python工具
│  └─ browser_hook.js       ← JS Hook
└─ README.md                ← 项目说明

常用命令速查

# === 项目相关 ===
python main.py login        # 登录获取Cookie
python main.py status       # 查看Cookie状态
python main.py crawl        # 抓取数据
python main.py daemon       # 守护进程

# === 逆向工具 ===
python tools/capture_params.py              # 捕获参数
python tools/capture_params.py <URL> <API> # 自定义

# === 依赖安装 ===
pip install -r requirements.txt     # 安装Python依赖
playwright install chromium         # 安装浏览器

💡 决策树

需要逆向验签吗?
│
├─ [是] Cookie频繁失效
│   ├─ [否] → 继续用Cookie方案 ✅
│   └─ [是] → 需要高频访问?
│       ├─ [否] → 用Playwright方案 ✅
│       └─ [是] → 完全逆向 ⚠️
│
└─ [否] → 学习目的?
    ├─ [是] → 用tools工具练习 📚
    └─ [否] → 继续用Cookie方案 ✅

🎓 学习路径

初级 → 中级 → 高级

1⃣ 理解Cookie方案
   └─ 运行项目,查看代码

2⃣ 学会使用工具
   ├─ python tools/capture_params.py
   └─ 浏览器运行 browser_hook.js

3⃣ 掌握DevTools
   ├─ Network查看请求
   ├─ Sources设置断点
   └─ Console调试JS

4⃣ 理解加密算法
   ├─ MD5, SHA, Base64
   ├─ RC4, AES
   └─ Canvas指纹

5⃣ 实现签名算法
   ├─ 提取JS代码
   ├─ execjs执行
   └─ Python实现

⚠️ 注意事项

✅ DO
├─ 控制访问频率1-3秒延迟
├─ 遵守服务条款
├─ 仅用于学习
└─ 做好错误处理

❌ DON'T
├─ 高频访问(秒级)
├─ 商业牟利
├─ 分享账号
└─ 绕过安全机制

🆘 遇到问题

问题分类:
│
├─ Cookie失效
│  └─ python main.py login
│
├─ 请求被拒绝
│  ├─ 检查Cookie是否有效
│  ├─ 检查User-Agent
│  └─ 降低访问频率
│
├─ 验签失败
│  ├─ 确认是否需要验签参数
│  ├─ 使用工具捕获正确参数
│  └─ 对比浏览器请求差异
│
└─ 账号被封
   └─ 更换账号,降低频率

📞 获取帮助

  1. 阅读 逆向分析指南.md
  2. 查看 tools/README.md
  3. 运行示例代码测试
  4. 使用工具分析实际请求

最后建议:

  • 90%的情况Cookie方案够用
  • 需要稳定性用Playwright
  • 完全逆向适合专业团队 ⚠️

祝您成功!🎉