Jonaaaa/YotoCards

GitHub: Jonaaaa/YotoCards

一套离线逆向工程工具,用于解码、分析并读取你自己的 Yoto NFC 卡片的 NDEF URL 结构与 token 机制。

Stars: 0 | Forks: 0

# YotoCards [![License: CC BY-NC 4.0](https://img.shields.io/badge/License-CC%20BY--NC%204.0-lightgrey.svg)](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, 云资产清单, 无后门, 漏洞挖掘, 物联网硬件, 逆向工具, 逆向工程