Skip to content
Dimlitter edited this page Aug 31, 2026 · 4 revisions

tankstorm-keepalive Wiki

这里放原理:协议长什么样、加密怎么破的、每日任务引擎为什么这么设计。 怎么装怎么跑在 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[前置 → 闸门 → 动作 → 判成败]
Loading

关键点:登录拿到的 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 里只有攻防双方的元数据, 验证码图片压根不走这条链路。

Clone this wiki locally