-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Dimlitter edited this page Aug 31, 2026
·
4 revisions
这里放原理:协议长什么样、加密怎么破的、每日任务引擎为什么这么设计。 怎么装怎么跑在 README 里,不重复。
「坦克风暴」是 QQ 空间的 Flash 页游,客户端是个 12MB 的 SWF, 和服务器之间走裸 TCP + protobuf + RC4。
这个项目把那条 TCP 链路整个复刻了出来:不开浏览器、不跑 Flash、不识图, 纯 Python 发包收包。于是能做三件事 —— 保持在线不掉线、每天把免费次数领干净、 以及自动打国战 / 争霸战 / 公会战。
难点全在"看不见"上:协议没有文档,字段名被混淆器改成 _-4mF 这种,
消息体还整个加了 RC4。所以这份 wiki 大半篇幅是在讲怎么把看不见的东西挖出来。
| 想做什么 | 看这页 |
|---|---|
| 搞明白一个包长什么样 | 协议解剖 |
| 知道 RC4 密钥怎么来的 | RC4 加密 |
| 游戏更新了,要重新还原协议 | 从 SWF 还原协议 |
| 加一个新的每日任务 | 每日任务引擎 |
| 看懂国战 / 争霸战 / 公会战 | 战斗自动化 |
| 登录挂了 | 登录与会话 |
| 分析一份新抓包 | 工具链 |
| 想知道前人在哪摔过 | 踩坑记录 ← 推荐先看 |
flowchart LR
A[QQ 扫码登录<br/>ptlogin2] --> B[空间游戏页<br/>取 FlashVars]
B --> C[uid / sid / level / firstLogin]
C --> D[推出 RC4 双向密钥]
B --> E[openid / openkey / secret]
E --> F[TCP 连 8001<br/>四步握手]
D --> F
F --> G{保活}
F --> H{每日任务}
G --> G1[每 10 秒心跳]
H --> H1[前置 → 闸门 → 动作 → 判成败]
关键点:登录拿到的 FlashVars 同时是两样东西的源头 —— socket 登录用的票据 (openid/openkey/secret),和 RC4 密钥的四个要素(uid/sid/level/firstLogin)。 少任何一个都开不了工。
| 客户端 SWF | 约 12 MB,secureSWF 混淆,4482 个类、62967 个方法 |
| 协议规模 | 563 个 opcode、873 个消息、5582 个字段 |
| 帧结构 | [2B 大端长度][2B opcode][4B seq][protobuf body] |
| 心跳 | 每 10 秒,8 字节,0006040e00000000,静态可重放 |
| 加密 | RC4,收发各一条密钥流,跨包连续累积 |
| bytes 类型字段 | 0 个 —— 所以验证码图片根本不在这条协议里 |
不参与游戏内人机验证(超级强攻验证码)的识别、填写或自动应答。
脚本做的是观察、解码、及时通知本人。相关事实:整个协议 5582 个字段里
bytes 类型是 0 个,RseSuperStormOpt 里只有攻防双方的元数据,
验证码图片压根不走这条链路。