Jonaaaa/YotoCards
GitHub: Jonaaaa/YotoCards
一套离线逆向工程工具,用于解码、分析并读取你自己的 Yoto NFC 卡片的 NDEF URL 结构与 token 机制。
Stars: 0 | Forks: 0
# YotoCards
[](LICENSE)
**用于了解你_自己_的 Yoto NFC 卡片的离线工具和研究** —— 包含一个
用于 Flipper Zero `.nfc` 转储的解码器、对 `yoto.io` 激活 URL 的结构分析,
以及一个小型的跨平台 GUI 读取器(支持 PC/SC、Proxmark3 或导入 Flipper 文件)。
## 这是什么
Yoto 卡片是普通的 **NXP MIFARE Ultralight / Ultralight EV1** NFC 标签。每个
标签都包含一个指向 `https://yoto.io/?` 的 NDEF URI 记录,
Yoto 播放器/应用程序会解析该记录以决定播放什么内容。本项目:
- **解码** Flipper 的 `.nfc` 转储以获取该 URL,完全离线。
- **分析特征** URL 结构(cardId + token)并从基本原则出发进行记录,**说明这些
URL 是如何生成的** —— 并展示它们是由服务器生成且无法离线伪造的。
- 提供一个 **GUI 读取器**,将你自己的卡片读取到 `.nfc` 文件中并进行解码,默认会对 token 进行打码处理。
这是一个个人的逆向工程/文档记录项目,不是为了克隆或破解任何东西。
## 快速开始
```
# 1) 将 Flipper .nfc dumps 解码为 yoto.io URLs(离线)
python3 tools/yoto_decode.py samples # try it on the synthetic sample
python3 tools/yoto_decode.py yoto_cards --json decoded/cards.json --csv decoded/cards.csv
# 2) codes 的结构分析(仅聚合;不打印完整 token)
python3 tools/token_analyze.py # segment layout / markers
python3 tools/url_patterns.py # keyspace / entropy
python3 tools/code_probe.py # reencode / math / checksum battery
# 3) GUI dumper(读取你自己的 cards -> .nfc,解码,隐去 tokens)
python3 dumper/yoto_dumper.py # see dumper/README.md
```
一切都在原生的 Python 3 上运行(GUI 使用 Tkinter)。可选的额外依赖:
`pyscard`(ACR122U 读取器)、`pillow`(封面缩略图)、`pyinstaller`
(独立构建)。
## 功能
- **离线解码器** (`tools/yoto_decode.py`) —— 解析 tag/NDEF/URI 层。
- **分析套件** —— `token_analyze.py`, `url_patterns.py`,
`derivation_test.py`, `code_probe.py`:段掩码、键空间/熵、
密钥派生测试、重新编码/时间戳/校验和探测。所有操作
**仅限聚合**(绝不打印完整的 token)。
- **GUI 读取器** (`dumper/`) —— Tkinter 应用;后端:**PC/SC (ACR122U)**,
**Proxmark3 (RDV4/Iceman)**,和 **导入 Flipper `.nfc`**。可选择
目标路径、批量读取模式、自动命名、Yoto/深色主题、可选的在线
标题/封面艺术查询。使用 PyInstaller 打包(隐藏控制台 + 图标)。
- **`privacy_check.py`** —— 如果完整的卡片 token 泄漏到
可共享文件中,则会执行失败。
## 发现(简版)
`yoto.io/?`:`` 是服务器分配的 5 字符内容 ID;
`` 是一个**由服务器生成、与 UID 无关、范围限定于 cardId 的访问 token,
它是解析卡片所必需的**,并且**无法离线伪造**(大约 784 个猜测的 URL 中有 0 个
曾经有效;cardId/token 相互独立;没有计数器、
时间戳或校验和结构)。唯一的固定字节是格式标记
(`84`/`0xF3`;旧版本的 `00`/`0xD3` 标记)。完整报告:
[`docs/card-format.md`](docs/card-format.md)。
## 布局
```
tools/ Offline decoder + analysis tools (+ privacy_check.py)
dumper/ Cross-platform GUI dumper (see dumper/README.md)
flipper/ Yoto Scanner FAP — Flipper Zero app (see flipper/yoto_scanner/)
docs/ card-format.md (format + findings)
samples/ SYNTHETIC sample dump for demos (no real data)
```
(`tools/build_catalog.py` 可视化目录构建器也包含在内;其输出
目录 `catalog/` 保存着你自己的卡片扫描数据并保留在本地——它不在公开的仓库中。)
## 数据与隐私
解码后的 `yoto.io/?` URL 包含**类似于密码的逐卡 token**。
本仓库**仅提供合成样本数据** —— 真实的卡片
转储及其 token 属于个人隐私,**不**包含在内。如果你在自己的
卡片上使用这些工具:
- 将你的转储和 `decoded/` 输出保留在**本地**;将 token 视为密码。
- 在分享任何内容之前运行 `python3 tools/privacy_check.py`。
- GUI 默认会在屏幕上对 token 进行打码处理。
**想要发布此仓库?** 请先阅读 [`docs/PUBLISHING.md`](docs/PUBLISHING.md/) ——
任何处理过真实卡片的工作副本都必须经过净化(并且必须重建其 git
历史记录)才能公开。
## 道德与范围
- 仅分析**你自己的硬件**。
- **离线优先**:解码器和分析从不触及网络。唯一的
联网功能是明确选择开启的标题/封面艺术查询,它直接联系
Yoto 自己的解析器。
- **没有攻击性工具**:不进行欺诈性克隆,不进行服务破坏,不对
Yoto 的平台进行绕过身份验证的探测。侦察仅限于公开文档。
不附属于 Yoto,也未获得其认可。“Yoto” 是其所有者的商标。
## 许可证
[MIT](LICENSE) © 2026 Jona。
标签:GUI应用, NFC工具, Python, 云资产清单, 无后门, 漏洞挖掘, 物联网硬件, 逆向工具, 逆向工程