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 等结构文件,计算方块差异,并生成 SetBlockLevelChunk 数据包。
  • 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 选择了在本地直接模拟:

  1. GetLoadingTime (模拟加载耗时)

    • 位置: main.go L232-246
    • 逻辑: 接收服务器请求 -> 获取当前 UID -> 进行复杂的位运算(异或、移位) -> 结合当前时间戳 -> 返回计算结果。
    • 目的: 欺骗服务器客户端正在正常加载资源,防止被判定为外挂。
  2. GetMCPCheckNum (校验码计算)

    • 位置: main.go L293
    • 关键代码: utils.GetMD5(fmt.Sprintf("296<6puv?ol%sk", secondArg))
    • 揭秘: 这里暴露了一个硬编码的盐值(Salt)"296<6puv?ol%sk"。这是开发者逆向网易客户端得到的静态密钥,用于计算校验和。

4.3 远程预言机 (Remote Oracle) - GetStartType

对于复杂或经常变动的检测,PhoenixBuilder 采用了远程处理策略,这也是其收费/鉴权的控制点:

  • 位置: main.go L276
  • 逻辑:
    1. 收到 GetStartType 请求。
    2. 提取加密数据 p.Content[68:len(p.Content)-1]
    3. 调用 client.TransferData(...) 将数据发送给 FBUC 服务器。
    4. 等待服务器返回解密/计算后的结果。
    5. 将结果封装回 PyRpc 包发送给网易服务器。
  • 意义: 即使你拥有源代码,如果没有 FBUC 服务器的配合(或自己逆向出该算法),机器人也无法通过此验证。

4.4 流量控制算法

为了达到极限建筑速度而不掉线,项目在 fastbuilder/task 中实现了精细的延时控制:

  • 连续模式 (Continuous): 使用 time.Ticker 保持恒定的发包频率(如 1ms/包)。
  • 离散模式 (Discrete): 类似 TCP 滑动窗口。发送一组包(Threshold,如 20000 字节) -> 强制休眠(Delay,如 15ms) -> 继续发送。

5. 对 InfBot 开发的启示

如果您计划用 C++ 开发 InfBot

  1. 移植 GetLoadingTime: 直接将 Go 代码中的位运算逻辑翻译为 C++。
  2. 利用 Salt: GetMCPCheckNum 中的盐值可以直接使用。
  3. 攻克 GetStartType: 这是最大难点。你需要决定是:
    • 自行逆向网易客户端(难度高,易失效)。
    • 搭建类似的“中转服务器”,复用其他开源项目的逻辑。
    • 寻找该算法的公开实现(可能存在于其他已泄露的源码中)。
  4. Flow Control: 必须实现类似的封包限速机制,否则会被网易租赁服防火墙秒踢。