Claude 帮我逆向 Futu:把闭源行情通道做成命令行工具

发布于

最近用 Claude 做了一次完整的客户端协议分析,过程比想象中有意思。

最后做出了一个小项目:**futu-moni**。
它是一个零依赖、单文件的 Python 命令行工具,可以通过 Futu / Moomoo 桌面客户端使用的原生协议,获取港股、美股和日股的实时行情。
不需要 OpenD、不需要 API Key,也不依赖官方 SDK。

不知道之前有没有人研究过这套协议,如果有人做过类似的项目,也欢迎交流。

## 为什么做
最近想做一套股票自动监控、分析和推荐系统,但第一步就卡在了行情数据源上。

我购买了 Futu 的行情订阅,准备通过 OpenD 获取数据,结果发现:**OpenD 暂不支持日本市场行情**。
我又找客服确认了一遍,结果确实如此。订阅买了,桌面客户端也能正常查看日股,但官方 API 就是不提供。

一肚子气,只能自己动手。

既然 Futu 桌面客户端可以正常显示日股,就说明底层数据通道本身存在,只是没有通过 OpenD 对外开放。

于是我决定分析 Mac 客户端的通信协议,顺便测试一下 Claude 在客户端逆向和协议分析方面的能力。

## 使用的工具
- **开发能力**:本人已经退化得基本不会开发了
- **主要模型**:Claude Opus 4.6 和 4.7
- **运行方式**:找了一个中转站,通过 Claude Code 完成分析和开发
- **目标客户端**:Futu / Moomoo macOS 客户端

让 Claude 真正进入逆向状态,着实花了一段时间。

刚开始,它一直纠结于官方 OpenD,不愿意跳出官方 API 的思路。骂了几次以后,我干脆给它划清边界:
- 不允许继续研究 OpenD
- 不允许使用网页接口
- 目标只限定为 Mac 桌面客户端

边界明确以后,它才终于开始认真干活。

期间它也试过偷懒,想绕到网页接口读取行情。再次限制以后,才真正转向桌面客户端协议、流量数据、本地数据库和 Protobuf 结构。

## 最终成果:futu-moni
**futu-moni** 可以通过一条命令,同时查询港股、美股和日股:
```bash
python futu_moni.py --query 00700 AAPL 1306 7203
```

![futu-moni 项目截图](https://raw.githubusercontent.com/bigbigmonkey123/futu-moni/refs/heads/main/pics/P1.png)
![futu-moni 查询效果](https://raw.githubusercontent.com/bigbigmonkey123/futu-moni/refs/heads/main/pics/P2.png)

## 核心实现
### 1. FT 私有协议解析
桌面客户端通过 TCP 443 端口连接行情服务器,应用层使用私有 FT 协议:
- 32 字节大端序 Header
- Protobuf 编码的 Body
- 实时行情命令:`CMD 0x1AA8`
- `selector = 0` 返回实时价格

普通个股的价格采用纳单位存储,需要除以 `10^9` 才能还原成正常价格。

### 2. 登录包重放
客户端登录过程涉及 RSA 和随机填充,绕开了完整复现登录加密算法的问题。

### 3. 多市场路由
协议通过 `route` 字段区分不同市场:
| 市场 | route |
|------|-------|
| 港股 | 1 |
| 美股 | 11 |
| 日股 | 1001 |

工具会根据股票代码自动识别市场,并发送对应的行情请求。

### 4. 证券 ID 解析
协议请求使用的并不是股票代码,而是 Futu 内部的数字证券 ID。这些数据保存在客户端本地的 SQLite 数据库 `SecListDB` 中。futu-moni 会自动查询对应的证券 ID,并按照市场优先级匹配和去重。

## 踩过的坑
开发过程中遇到了几个比较有意思的问题:
- 多只股票合并请求时,服务端只返回第一只,最终改成逐只发送
- 部分响应存在非标准前缀,需要搜索 varint 标记定位有效数据
- 指数使用毫单位,普通个股使用纳单位,两者相差 6 个数量级
- 相同代码可能出现在不同市场,需要增加市场优先级和去重逻辑

## Opus 赏心悦目的逆向过程
下面是 Claude 分析客户端、协议和数据结构时的一些过程记录:

![协议分析过程 1](https://raw.githubusercontent.com/bigbigmonkey123/futu-moni/refs/heads/main/pics/1.jpeg)
![协议分析过程 2](https://raw.githubusercontent.com/bigbigmonkey123/futu-moni/refs/heads/main/pics/2.1.jpg)
![协议分析过程 3](https://raw.githubusercontent.com/bigbigmonkey123/futu-moni/refs/heads/main/pics/3.jpg)

## 项目特点
- 零第三方依赖,只使用 Python 标准库
- 单文件实现
- 支持港股、美股和日股
- 自动识别市场和证券 ID
- 按需获取实时行情
- 不依赖 OpenD 和官方 SDK
- 开源版本已移除敏感认证信息

## 多说几句
这次最大的感受是:**Opus 一旦真正理解任务,逆向分析能力确实很强。**
前期需要不断纠正方向、明确边界,避免它退回官方 API 或网页接口这些更容易的路径。但一旦“开窍”,它在协议分析、流量定位、Protobuf 解析和客户端数据查找方面的表现非常惊艳。

过程中它还通过 Certificate Transparency 日志寻找相关域名线索,并进一步定位客户端实际使用的服务入口。
这种思路我自己之前完全没有想到。

![域名分析过程](https://raw.githubusercontent.com/bigbigmonkey123/futu-moni/refs/heads/main/pics/4.jpeg)
![服务入口分析](https://raw.githubusercontent.com/bigbigmonkey123/futu-moni/refs/heads/main/pics/5.jpeg)
总体来说,这家伙一旦开窍,是真的强。

欢迎朋友一起交流。

> 本项目仅用于技术研究和学习。使用时请遵守相关用户协议、数据授权要求以及所在地区的法律法规。
> 以上文章 chatgpt-5.6 写的

---

原文链接:[点击查看](https://www.v2ex.com/t/1228058)

评论(19)

我也在搞类似的,我用 Codex 直接去逆向老游戏的 ROM,直接改二进制然后 hook 字体渲染流程来做汉化。

· 0 个赞

其实早在没有 AI 之前我就搞过富途协议的逆向了。建议直接拿官方的 APK 包去反编译分析,或者找富途早期的安卓客户端版本,那时候从 Java 层能直接扒到完整的协议结构体。

· 0 个赞

这种涉及协议逆向的代码直接传 GitHub 还是有点危险吧?不过有了 AI 之后,干这些事儿确实太简单了。

· 0 个赞

其实黑灰产老哥早就用上 AI 了,像白盒加密、代码混淆、OLLVM 甚至 VMP,在 AI 眼里都不是事儿,跑个 trace 分分钟就把 key 给提出来了。

· 0 个赞

回复

秒杀 VMP 和 ollvm 倒也不至于,但肯定是能搞定的。具体能实现到什么程度,就得看你调教 AI 的水平和个人运气了。

· 0 个赞

回复

我也测试了一下,确实跟上面说的一样,直接秒解了。

· 0 个赞

回复

VMP 这种壳现在也是直接被 AI 瞬秒了吗?这么夸张的吗。

· 0 个赞

我之前也做过其他逆向,其实单次获取结果这步还算简单,难点在于高频稳定获取数据。不过现在有 AI 辅助,复杂也只是纯工程量的问题,技术门槛基本被抹平了。

· 0 个赞

楼主搞这个的时候,有没有遇到过 AI 因为合规问题不愿意帮你逆向的情况?最后是怎么绕过的?

· 0 个赞

回复

主要就是跟它慢慢“谈心”做心理按摩,实在不行就想办法越狱它呗。

· 0 个赞

蹲一个,请问这个工具支持查询历史 K 线数据吗?

· 0 个赞

回复

理论上应该是支持的,你说得对,回头我把 K 线这些历史数据也一并弄上。

· 0 个赞

搞这种逆向的时候,AI 没有触发安全合规拦截吗?想了解下有没有碰到护栏限制的问题。

· 0 个赞

试了一下发现必须得依赖本地安装的 Futu/Moomoo 客户端,不然找不到证券列表数据库。如果非要带上客户端的话,感觉稍微有点不太方便啊……

· 0 个赞

回复

是的,因为这一步需要用到客户端的登录凭据,所以目前没做自动化登录,只能先依赖本地客户端。

· 0 个赞

大佬可以试试用 AI 搞定 D 加密,看看效果怎么样。

· 0 个赞

确实,我也用 codex 试着逆向过一些老游戏的 ROM,直接改二进制去 hook 字体渲染的流程来做汉化,思路确实很有意思。

· 0 个赞

其实之前没 AI 的时候我就搞过富途的协议逆向。建议你可以试试直接拿安卓的 APK 去反编译,或者去找他们早期的客户端版本,那时候 Java 层应该能直接扒出完整的协议结构体,会省事不少。

· 0 个赞

这玩意传到 GitHub 上不怕被官方搞吗?不过有一说一,现在有了 AI 辅助,搞这些逆向和抓包确实简单太多了。

· 0 个赞