7.3 KiB
7.3 KiB
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
│ └─ 降低访问频率
│
├─ 验签失败
│ ├─ 确认是否需要验签参数
│ ├─ 使用工具捕获正确参数
│ └─ 对比浏览器请求差异
│
└─ 账号被封
└─ 更换账号,降低频率
📞 获取帮助
- 阅读
逆向分析指南.md - 查看
tools/README.md - 运行示例代码测试
- 使用工具分析实际请求
最后建议:
- 90%的情况Cookie方案够用 ✅
- 需要稳定性用Playwright ✅
- 完全逆向适合专业团队 ⚠️
祝您成功!🎉