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

350 lines
7.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# API验签破解 - 快速参考
## 🎯 核心概念
```
验签参数 = 防止爬虫的签名参数
常见参数:
├─ a_bogus → 最关键,每个请求都不同
├─ msToken → 会话Token
├─ verifyFp → 设备指纹
└─ fp → 设备指纹同verifyFp
```
## 🚀 三种方案对比
| 方案 | 难度 | 稳定性 | 速度 | 推荐度 |
|------|------|--------|------|--------|
| **Cookie方案** | ⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ✅ **推荐** |
| **Playwright方案** | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ✅ 推荐 |
| **完全逆向方案** | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⚠️ 高级 |
## 📦 当前项目Cookie方案
### 日常使用
```bash
# Cookie失效时重新登录
python main.py login
# 抓取数据
python main.py crawl
# 守护进程模式
python main.py daemon
```
### 原理
```
1. 浏览器登录 → 保存Cookie
2. 使用Cookie发送请求 → 无需验签参数
3. Cookie失效 → 重新登录
```
## 🔍 开始逆向分析
### 方法1: Python工具最简单
```bash
# 1. 安装依赖
pip install playwright
playwright install chromium
# 2. 运行工具
python tools/capture_params.py
# 3. 在浏览器中操作
# 工具会自动显示所有参数
```
### 方法2: 浏览器Hook最专业
```javascript
// 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
```
## 🔑 找到签名算法
### 搜索关键词
```javascript
// Sources标签 → Ctrl+Shift+F
搜索词
├─ "a_bogus" 签名参数名
├─ "sign" 签名函数
├─ "_webmsdk" 签名SDK
├─ "encrypt" 加密函数
└─ "getInstituteDarenData" API调用位置
```
### 设置断点
```
1. 找到可疑函数
2. 点击行号设置断点
3. 刷新页面
4. 单步调试 (F10/F11)
5. 查看 Call Stack
```
## 📝 实战代码片段
### 测试Cookie是否足够
```python
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方案
```python
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
```python
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}")
```
## 🛠️ 调试技巧
### 查看全局变量
```javascript
// Console中执行
for (let key in window) {
if (key.includes('token') ||
key.includes('sign') ||
key.includes('fp')) {
console.log(key, typeof window[key]);
}
}
```
### Hook函数调用
```javascript
// 假设签名函数是 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 ← 项目说明
```
## ⚡ 常用命令速查
```bash
# === 项目相关 ===
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 ✅
- 完全逆向适合专业团队 ⚠️
祝您成功!🎉