uuksu/skannerz-commander-trade-reversing
GitHub: uuksu/skannerz-commander-trade-reversing
借助 AI 辅助逆向工程 Skannerz Commander 玩具的交易协议,并提供了完整的协议规范文档、Arduino 从机模拟器及数据分析管线。
Stars: 0 | Forks: 0
# Skannerz Commander 交易协议逆向工程
借助 AI(Claude Sonnet/Fable)对 Skannerz Commander 交易协议进行逆向工程。
## 状态:已解决
- 完整解码了底层通信协议:握手、帧封装、字节词汇表、会话流程以及 52 位的怪物负载 (payload)。
- 破解了所有负载字段,包括 4 位的校验和 (checksum,它同时也用作显示的 **Level**)、跨越两个字段的 BCD 经验值计数器,以及线上数据↔显示的怪物编号映射。
- 一个可用的、基于 5 V Arduino 的 **slave 模拟器** 能够与真实的玩具完成实际交易:支持任意怪物编号、HP 1–99、等级 1–3、精确的经验值 0–9999。它还可以通过串口采集玩具的集合,而无需执行任何交易。
还有一些遗留问题(slave 端的拒绝字节、HP = 0 等)—— 请参阅 [PROTOCOL.md §7](PROTOCOL.md#7-open-questions)。
## 仓库结构
| 路径 | 内容说明 |
|------|------------|
| [`PROTOCOL.md`](PROTOCOL.md) | 底层协议规范 —— 从这里开始阅读 |
| [`IMPLEMENTATION.md`](IMPLEMENTATION.md) | MCU 模拟指南:接线、bit-banging、负载构建、状态机 |
| [`HISTORY.md`](HISTORY.md) | 探究过程,包括那些被证明是错误的理论 |
| [`slave_emulator/slave_emulator.ino`](slave_emulator/slave_emulator.ino) | 参考实现:Arduino slave 模拟器 |
| [`analysis/`](analysis/) | 解码采集数据的 Python/numpy pipeline |
| `trade.csv` | 一次完整交易的原始 200 kHz、4 通道逻辑分析仪采集数据 |
| [`task.txt`](task.txt) | 原始项目简介 |
## 使用 Arduino 进行交易
你需要一个 **5 V** 的 Arduino(Uno/Nano —— 3.3 V 的开发板需要电平转换,请参阅 [IMPLEMENTATION.md](IMPLEMENTATION.md)) 以及三根连接到玩具接口的线:CLOCK → D2,GND → GND,DATA → D3。该玩具运行在 4.5 V 电压下;sketch 将 DATA 视为开漏 (open-drain) 模式,因此玩具永远不会接收到 5 V 电压。
1. 打开 `slave_emulator/slave_emulator.ino` 并在顶部设置怪物信息:
`MONSTER_NUM`、`MONSTER_HP`、`TARGET_LEVEL`、`TARGET_EXP`。校验和与原始线上数据字段会自动计算。
2. 烧录程序,打开串口监视器(115200 波特率),并将玩具置于交易模式。模拟器将进行链接、确认、交换负载并接受 ——
玩具会收到你的怪物,并显示它“交易”得到的怪物。
3. 可选:设置 `HARVEST_MODE 1`,即可通过串口记录玩具提供的每一只怪物,而无需完成交易(在回合之间在玩具上取消即可)。
## 复现分析
需要 Python 3 和 numpy。脚本中硬编码了本仓库的路径,因此可以在任何地方运行:
```
python3 analysis/edges.py # parses trade.csv into capture.npy — run first
python3 analysis/full_decode.py # decodes the whole session, writes transcript.txt
python3 analysis/nibble_rule.py # checksum/Level/EXP rules + accept/reject datasets
```
`full_decode.py` 是一个端到端的检查工具:它会根据 PROTOCOL.md 中的规则重新推导采集记录中的每一帧,并且解码出的两个负载与实际交易的怪物完全一致(Night Lurk HP 3 ↔ Diamond Back HP 1)。
## 为好奇者提供的亮点
- 单根数据线,同时双向通信:master 和 slave 各自拥有每个时钟周期的一个相位,因此 slave 可以实现零总线周转 (bus turnaround) 的回复。
- “校验和”的 nibble 同时也是怪物的显示 Level —— 玩具只验证其 4 位中的 3 位,利用空闲的那一位和经验值计数器中的一个 don't-care 字段,你可以在不改变其他任何属性的情况下选择任意 level。
- 经验值计数器采用 BCD 编码,以相加方式拆分到两个字段中 —— 其中一个字段不进行 BCD 验证,因此如果数字超出范围,在真实玩具上会渲染出乱码的经验值,而不是报错。
完整的故事,包括每一个死胡同,都在 [HISTORY.md](HISTORY.md) 中。
标签:逆向工具