最近用 Claude 做了一次完整的客户端协议分析,过程比想象中有意思。
最后做出了一个小项目:futu-moni。
它是一个零依赖、单文件的 Python 命令行工具,可以通过 Futu / Moomoo 桌面客户端使用的原生协议,获取港股、美股和日股的实时行情。
不需要 OpenD 、不需要 API Key ,也不依赖官方 SDK 。
不知道之前有没有人研究过这套协议,如果有人做过类似的项目,也欢迎交流。
最近想做一套股票自动监控、分析和推荐系统,但第一步就卡在了行情数据源上。
我购买了 Futu 的行情订阅,准备通过 OpenD 获取数据,结果发现:OpenD 暂不支持日本市场行情。
我又找客服确认了一遍,结果确实如此。订阅买了,桌面客户端也能正常查看日股,但官方 API 就是不提供。
一肚子气,只能自己动手。
既然 Futu 桌面客户端可以正常显示日股,就说明底层数据通道本身存在,只是没有通过 OpenD 对外开放。
于是我决定分析 Mac 客户端的通信协议,顺便测试一下 Claude 在客户端逆向和协议分析方面的能力。
让 Claude 真正进入逆向状态,着实花了一段时间。
刚开始,它一直纠结于官方 OpenD ,不愿意跳出官方 API 的思路。骂了几次以后,我干脆给它划清边界:
边界明确以后,它才终于开始认真干活。
期间它也试过偷懒,想绕到网页接口读取行情。再次限制以后,才真正转向桌面客户端协议、流量数据、本地数据库和 Protobuf 结构。
futu-moni 可以通过一条命令,同时查询港股、美股和日股:
python futu_moni.py --query 00700 AAPL 1306 7203
桌面客户端通过 TCP 443 端口连接行情服务器,应用层使用私有 FT 协议:
CMD 0x1AA8selector = 0 返回实时价格普通个股的价格采用纳单位存储,需要除以 10^9 才能还原成正常价格。
客户端登录过程涉及 RSA 和随机填充,绕开了完整复现登录加密算法的问题。
协议通过 route 字段区分不同市场:
| 市场 | route |
|---|---|
| 港股 | 1 |
| 美股 | 11 |
| 日股 | 1001 |
工具会根据股票代码自动识别市场,并发送对应的行情请求。
协议请求使用的并不是股票代码,而是 Futu 内部的数字证券 ID 。
这些数据保存在客户端本地的 SQLite 数据库 SecListDB 中。futu-moni 会自动查询对应的证券 ID ,并按照市场优先级匹配和去重。
开发过程中遇到了几个比较有意思的问题:
下面是 Claude 分析客户端、协议和数据结构时的一些过程记录:
这次最大的感受是:Opus 一旦真正理解任务,逆向分析能力确实很强。
前期需要不断纠正方向、明确边界,避免它退回官方 API 或网页接口这些更容易的路径。但一旦“开窍”,它在协议分析、流量定位、Protobuf 解析和客户端数据查找方面的表现非常惊艳。
过程中它还通过 Certificate Transparency 日志寻找相关域名线索,并进一步定位客户端实际使用的服务入口。
这种思路我自己之前完全没有想到。
总体来说,这家伙一旦开窍,是真的强。
欢迎朋友一起交流。
本项目仅用于技术研究和学习。使用时请遵守相关用户协议、数据授权要求以及所在地区的法律法规。 以上文章 chatgpt-5.6 写的
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.