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) 中。
标签:逆向工具