From 4d01cbf6eac96ce622e5ba5fa5c23cfb8255c154 Mon Sep 17 00:00:00 2001 From: OpenCode Date: Fri, 11 Sep 2026 17:20:44 +0800 Subject: [PATCH] docs: Butler behavior findings (bind refusal state, toxic prelude, ident-before-AECH); README run/stop commands --- README.md | 19 ++++++++++++++++--- docs/enet_protocol_current.md | 16 ++++++++++++++-- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 73b55f8..fd2e937 100644 --- a/README.md +++ b/README.md @@ -44,9 +44,12 @@ enet-validator discover|announce|heartbeat|euce|session|all ``` enet-validator hostdemo <目标IP> [秒] # 主机侧等效:认领→RDM 发现→加密 DMX 控制 - # 环境变量 HOSTDEMO_MODE=quick 最小认领+统一会话环 - # =claimonly 最小认领探针 - # HOSTDEMO_PRE=<秒> 前奏时长(默认45) + # 环境变量 HOSTDEMO_MODE=show 彩灯渐变常驻(推荐, 见下节) + # =quick 最小认领+统一会话环 + # =claimonly 最小认领探针 + # HOSTDEMO_PRE=<秒> 广播前奏(默认0; 45=SL式前奏, 实测有毒) + # HOSTDEMO_BIND=1 发 bind52×4 (实测有毒, 仅复现实验用) + # 注: secs=0 在默认模式=跳过DMX; 在 show 模式=永久运行 enet-validator dmxsend <目标IP> [秒] # 主机侧加密 DMX 播放(自证闭环) enet-validator dmxdec # DMX 帧解密验证(离线) enet-validator dmxroll # 滚动值分析(离线) @@ -64,10 +67,20 @@ $env:HOSTDEMO_MODE = "show" # 或运行固定秒数 .\target\release\enet-validator.exe hostdemo 192.168.123.1 600 + +# 后台常驻(无窗口) +$env:HOSTDEMO_MODE = "show" +Start-Process -FilePath ".\target\release\enet-validator.exe" -ArgumentList "hostdemo 192.168.123.1 0" -WindowStyle Hidden + +# 停止后台灯效 +Get-Process enet-validator | Stop-Process -Force ``` - DMX:地址 1-32 彩虹呼吸渐变(HMKJ 32 通道灯具),**零模板纯自构造帧**(`build_dmx_frame`),**port1+port2 双口同时输出**(灯具接任一口均可控) - RDM:每 700ms 轮询 3 台已知 UID,实时打印 `DEVICE_INFO` 与 `DMX_START_ADDRESS`,**纯自构造请求帧**(`build_rdm_frame2`) +- 认领帧同样纯自构造(`build_claim_frame`,不透明区填 0——Butler 不校验,已消融实证) +- 冷启动实测(2026-09-11 全系统断电重启):**最小认领(announce144 + claim)即可,无任何必需前奏** +- ⚠ 勿发 bind52 绑定帧与 45s 广播前奏——实测**有毒**(bind 以 unbind 收尾会让 Butler 拒答 AECH 数分钟) - 运行无需任何抓包/replay 文件;DMX/RDM 帧全字段已破解(见 docs/enet_protocol_current.md) ## 已破解要点(详见 docs/enet_protocol.md) diff --git a/docs/enet_protocol_current.md b/docs/enet_protocol_current.md index a9f4f1d..a2a5450 100644 --- a/docs/enet_protocol_current.md +++ b/docs/enet_protocol_current.md @@ -218,9 +218,11 @@ type=1, 子类型=15, len=644 (0x284): | 项 | 状态 | |---|---| -| 1947 端口 40B 许可令牌 | 固定 ASCII 常量 `BlZRQphAGxUbi7at8KEfmdZ7TdSB03b+qoC1RIA`,SL 每 ~34s 广播 21 帧双目标;语义未知(常量本身排除与狗绑定);暖会话**非必需**;冷启动必需性未验证 | +| 1947 端口 40B 许可令牌 | 固定 ASCII 常量 `BlZRQphAGxUbi7at8KEfmdZ7TdSB03b+qoC1RIA`,SL 每 ~34s 广播 21 帧双目标;语义未知(常量本身排除与狗绑定);暖/冷会话均**非必需** | | 42B 事件码 0x0318(ack)/0x0062(status) 语义 | 结构已解,语义未解码 | -| bind52 flag ffff/0000 语义 | 结构已解(主机+设备 IP/MAC, 0x64/0x01f4 疑速率参数);flag 疑绑定/解绑;暖会话**非必需** | +| ~~bind52 flag ffff/0000 语义~~ | **已基本破解(行为实证 2026-09-11)**:ffff=绑定 / 0000=解绑;×4 序列以 0000 收尾 → Butler 进入**数分钟 AECH 拒答态**(可自愈),期间一切认领被无视。SL 序列虽同形但其后续流程不同;**我们不应发 bind** | +| ~~45s 广播前奏门控假说~~ | **证伪且有毒**:PRE=45 认领 FAIL / PRE=0 PASS;"须 13+ 轮 announce 武装认领"不成立;冷启动最小认领即可 | +| ~~AECH 是否需前置身份帧~~ | **必需**:skip2(无身份帧直接 claim)被无视;每轮 announce144 → 47B 注册 → claim 则稳定 PASS | | AERE 0x24-0x27 / 0x2C-0x2E 回显字段 | 疑主机 IP/MAC 部分回显,需跨主机抓包证实 | | AERE/发现应答配置块细节(0x1c/0x1d/0x0af0) | 疑固件版本/端口配置,语义未坐实 | | claim 不透明区 240B 真实内容 | Butler 不校验(已消融证实);疑 SL 软件侧证书/许可 blob,与协议功能无关 | @@ -233,6 +235,16 @@ type=1, 子类型=15, len=644 (0x284): - ~~会话级帧校验~~ → 不存在 - ~~0x2E 严格校验~~ → 不校验(1/2 均接受) - ~~claim 帧 240B 高熵区被 Butler 校验~~ → 清零照样 PASS +- ~~"Butler 须收到 ~13+ 轮 discovery/announce 才武装认领"~~ → 广播前奏反而有毒 + +## 九b、Butler 行为特性(实证) + +1. **AECH 固件过滤**:仅应答源 IP=192.168.123.113 的认领质询。 +2. **身份帧前置**:AECH 前须先发 102B 身份帧(announce144/ident)完成 47B 注册,否则质询被无视。 +3. **bind 拒答态**:收到 bind52 以 0000(unbind) 收尾的序列后,拒答 AECH 数分钟(自愈)。 +4. **广播前奏副作用**:45s discovery/announce686/EUCE 广播后认领失败率显著升高(机制未明,不用即可)。 +5. **RDM 代理门控**:RDM 代理疑似仅在 DMX 流活跃时工作(cold2 遗留观察;show 模式 DMX 常开所以无感)。 +6. **重启后本机双 IP**:全系统重启后网卡可能同时持有 192.168.123.113(静态)+ 192.168.123.200(DHCP);程序写死绑 .113 不受影响,但若 .113 丢失认领将被固件过滤。 ---