enet-validator/README.md
OpenCode 8938b15691 fix: dual-port DMX output in show mode; AERE claim verification; SHOW_DIAG mode
- Root cause of 'steady white': fixture on Butler port2, our data only went to port1
  (port data regions are independent: port1 @0x3C, port2 @0x23C)
- show mode now mirrors pattern to both ports; SHOW_DIAG=1 gives 3s off/on blink test
- Claim now verifies AERE response and warns on failure
- Docs updated with port layout note; README updated
2026-09-11 13:53:21 +08:00

87 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# enet-validator — e:cue SymphoLight ↔ Butler e:net 协议逆向与复现
对 e:cue SymphoLight 5.5 与 Butler S2 之间 UDP/31772 私有协议(e:net)的完整逆向:
**AECH 认领算法破解、DMX 帧混淆破解、RDM over e:net 解码**,并分别实现了
**设备端仿真**(虚拟 Butler)与**主机端仿真**(hostdemo 直接接管真机)。
## 目录
```
├── src/ Rust 源码(std only,无外部依赖)
│ ├── main.rs 子命令入口
│ ├── enet.rs e:net 帧模板 / SO_REUSEADDR 绑定
│ ├── tests.rs 虚拟 Butler 设备端(AECH 本地应答 + RDM 灯具仿真 + 解密日志)
│ ├── aech.rs AgiosElias.G 认领算法、DMX zPprv0TXRRW 混淆加解密、dmxdec/dmxsend
│ ├── hostdemo.rs 主机侧等效示例(真机接管:认领→RDM 发现→加密 DMX 控制)
│ └── dmxhash.rs 早期帧标签分析
├── samples/ 37 个真实抓包帧样本(hex)
├── docs/
│ ├── enet_protocol.md ★协议逆向文档(帧布局/算法/实证,最核心)
│ └── rust_verification_plan.md 验证计划
├── scripts/
│ ├── Verify-EnetProtocol.ps1 协议验证套件
│ ├── Verify-Rdm.ps1 RDM 验证
│ ├── enet_lib.ps1 PS 公共库
│ └── session/ 逆向过程中的会话脚本(抓包/分析/部署/推送)
└── tools/ DLL 反编译辅助工具(C#)
├── IlDump.cs / GetTable.cs / Scan.cs
```
## 构建
```
cargo build --release # std only, 无外部依赖
```
## 子命令(设备端仿真,跑在任意机器,绑 58 网段示例)
```
enet-validator device # 虚拟 Butler 主循环(192.168.58.7)
enet-validator discover|announce|heartbeat|euce|session|all
```
## 子命令(主机侧 / 离线分析)
```
enet-validator hostdemo <目标IP> [秒] # 主机侧等效:认领→RDM 发现→加密 DMX 控制
# 环境变量 HOSTDEMO_MODE=quick 最小认领+统一会话环
# =claimonly 最小认领探针
# HOSTDEMO_PRE=<秒> 前奏时长(默认45)
enet-validator dmxsend <目标IP> [秒] # 主机侧加密 DMX 播放(自证闭环)
enet-validator dmxdec <tsv> # DMX 帧解密验证(离线)
enet-validator dmxroll <tsv> # 滚动值分析(离线)
enet-validator aechprobe <tsv> <ip> # AECH 在线探测
```
## show 模式:地址 1-32 炫彩呼吸 + RDM 状态轮询
无需 SymphoLight 运行,独立接管 Butler,持续输出炫彩呼吸 DMX 并轮询设备状态。
```powershell
# 永久运行(按 Ctrl+C 停止)
$env:HOSTDEMO_MODE = "show"
.\target\release\enet-validator.exe hostdemo 192.168.123.1 0
# 或运行固定秒数
.\target\release\enet-validator.exe hostdemo 192.168.123.1 600
```
- DMX:地址 1-32 彩虹呼吸渐变(HMKJ 32 通道灯具),**零模板纯自构造帧**(`build_dmx_frame`),**port1+port2 双口同时输出**(灯具接任一口均可控)
- RDM:每 700ms 轮询 3 台已知 UID,实时打印 `DEVICE_INFO` 与 `DMX_START_ADDRESS`,**纯自构造请求帧**(`build_rdm_frame2`)
- 运行无需任何抓包/replay 文件;DMX/RDM 帧全字段已破解(见 docs/enet_protocol_current.md)
## 已破解要点(详见 docs/enet_protocol.md)
- **AECH 认领**:`G(x) = x ^ TABLE[(x%32 + 1 + (x*13)%30) % 32]`(无密钥,表内嵌 DLL)
- **DMX 混淆**:`r=Random.Next()`;`out[i]=src[(i+rot)%512]^cnt[i]`,`rot=(B12^r)&511`
- **RDM**:标准 E1.20 内嵌 type=04 帧(0x3C 起,免 0xCC 起始字节,checksum 含隐含 0xCC)
- **1947 端口**:40B ASCII 许可令牌广播(`BlZRQphA…`,每 ~34s 一轮)
- 真机固件过滤:AECH 仅应答源 IP=192.168.123.113
## Ubuntu 虚拟 Butler 部署
```
scp -r enet-validator/ user@192.168.58.7:~/
ssh user@192.168.58.7 "cd ~/enet-validator && cargo build --release && ~/run_butler_local.sh"
```