PhoenixBuilder 技术架构与关键实现分析报告
日期: 2026年1月8日 项目路径: D:\terminal\terminal work\PhoenixBuilder-main分析对象: FastBuilder Phoenix (开源核心部分)
1. 项目总览
PhoenixBuilder 是 FastBuilder Phoenix 的核心开源部分,采用 Go 语言编写。它是一个针对 Minecraft 网易版(中国版)租赁服的高性能自动化建筑工具。
该项目采用了**“胖客户端 + 云端鉴权”**的混合架构。虽然大部分业务逻辑(建筑、寻路、协议封装)在本地运行,但关键的反作弊对抗逻辑(如网易特有的加密握手)被剥离并依赖远程鉴权服务器(FBUC)。
2. 技术栈与依赖
- 核心语言: Go (Golang)
- 协议库: 魔改版
gophertunnel(位于minecraft/目录,非标准库) - 脚本引擎: V8 (通过
rogchap.com/v8go绑定),允许用户使用 JavaScript 编写插件。 - UI/交互: 命令行界面 (CLI) 为主,使用
pterm进行终端美化,readline处理交互输入。 - 通信协议: RakNet (UDP) + WebSocket (鉴权)。
3. 核心模块架构
3.1 协议层 (minecraft/)
这是项目的基础设施。由于网易版 MC 对标准 Bedrock 协议进行了大量修改,标准库无法直接连接。
- RakNet 封装: 处理底层的 UDP 数据包分片与重组。
- Packet 序列化: 实现了网易版特有的数据包格式,特别是
PyRpc包(Packet ID 0x71/113 左右,视版本而定)。 - 加密层: 处理网易特有的链路加密方式(与国际版不同)。
3.2 业务逻辑层 (fastbuilder/)
builder/: 核心建筑引擎。负责解析.bdump,.schematic等结构文件,计算方块差异,并生成SetBlock或LevelChunk数据包。task/: 任务调度系统。实现了流量控制算法(Flow Control),支持“连续模式”和“离散模式”,以规避服务器的 DOS 攻击检测。script_engine/: 提供了一套 JS API (HostBridgeGamma),暴露了发送指令、获取玩家位置等接口给脚本层。
3.3 鉴权与安全层 (fastbuilder/cv4/auth/)
这是商业逻辑的核心。
- 双重加密: 客户端与鉴权服务器通过 WebSocket 连接,并在 TLS 之上实现了一层自定义的应用层加密(基于 ECDSA 和 AES),防止中间人攻击抓取鉴权 Token。
- 远程计算: 将本地难以处理或易变的逻辑(如反作弊验证)通过 RPC 转发给服务器处理。
4. 关键技术实现细节 (The "Secret Sauce")
在 main.go 中,我们可以清晰地看到针对网易版反作弊机制(PyRpc)的对抗逻辑。这是实现机器人的最大难点。
4.1 PyRpc 机制解析
网易版客户端底层嵌入了 Python 解释器,服务器会发送 PyRpc 数据包要求客户端执行特定的 Python 函数并返回结果。如果结果错误或超时,连接会被断开。
4.2 本地硬编码对抗
对于一些固定的算法,PhoenixBuilder 选择了在本地直接模拟:
GetLoadingTime(模拟加载耗时)- 位置:
main.goL232-246 - 逻辑: 接收服务器请求 -> 获取当前 UID -> 进行复杂的位运算(异或、移位) -> 结合当前时间戳 -> 返回计算结果。
- 目的: 欺骗服务器客户端正在正常加载资源,防止被判定为外挂。
- 位置:
GetMCPCheckNum(校验码计算)- 位置:
main.goL293 - 关键代码:
utils.GetMD5(fmt.Sprintf("296<6puv?ol%sk", secondArg)) - 揭秘: 这里暴露了一个硬编码的盐值(Salt)
"296<6puv?ol%sk"。这是开发者逆向网易客户端得到的静态密钥,用于计算校验和。
- 位置:
4.3 远程预言机 (Remote Oracle) - GetStartType
对于复杂或经常变动的检测,PhoenixBuilder 采用了远程处理策略,这也是其收费/鉴权的控制点:
- 位置:
main.goL276 - 逻辑:
- 收到
GetStartType请求。 - 提取加密数据
p.Content[68:len(p.Content)-1]。 - 调用
client.TransferData(...)将数据发送给 FBUC 服务器。 - 等待服务器返回解密/计算后的结果。
- 将结果封装回
PyRpc包发送给网易服务器。
- 收到
- 意义: 即使你拥有源代码,如果没有 FBUC 服务器的配合(或自己逆向出该算法),机器人也无法通过此验证。
4.4 流量控制算法
为了达到极限建筑速度而不掉线,项目在 fastbuilder/task 中实现了精细的延时控制:
- 连续模式 (Continuous): 使用
time.Ticker保持恒定的发包频率(如 1ms/包)。 - 离散模式 (Discrete): 类似 TCP 滑动窗口。发送一组包(Threshold,如 20000 字节) -> 强制休眠(Delay,如 15ms) -> 继续发送。
5. 对 InfBot 开发的启示
如果您计划用 C++ 开发 InfBot:
- 移植
GetLoadingTime: 直接将 Go 代码中的位运算逻辑翻译为 C++。 - 利用 Salt:
GetMCPCheckNum中的盐值可以直接使用。 - 攻克
GetStartType: 这是最大难点。你需要决定是:- 自行逆向网易客户端(难度高,易失效)。
- 搭建类似的“中转服务器”,复用其他开源项目的逻辑。
- 寻找该算法的公开实现(可能存在于其他已泄露的源码中)。
- Flow Control: 必须实现类似的封包限速机制,否则会被网易租赁服防火墙秒踢。