Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

YotoCards

License: CC BY-NC 4.0

Offline tools and research for understanding your own Yoto NFC cards — a decoder for Flipper Zero .nfc dumps, structural analysis of the yoto.io activation URLs, and a small cross-platform GUI dumper (PC/SC, Proxmark3, or Flipper import).

Personal-hardware only · offline-first · no offensive tooling. See Ethics & scope.


What this is

Yoto cards are plain NXP MIFARE Ultralight / Ultralight EV1 NFC tags. Each holds an NDEF URI record pointing at https://yoto.io/<cardId>?<token>, which the Yoto player/app resolves to decide what to play. This project:

  • Decodes Flipper .nfc dumps to that URL, fully offline.
  • Characterises the URL structure (cardId + token) and documents, from first principles, how those URLs are generated — and shows they are server-minted and not forgeable offline.
  • Ships a GUI dumper to read your own cards into .nfc files and decode them, with tokens redacted by default.

It is a personal reverse-engineering / documentation project, not a way to clone or defeat anything.

Quick start

# 1) Decode Flipper .nfc dumps to their yoto.io URLs (offline)
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) Structural analysis of the codes (aggregate-only; prints no full 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 (reads your own cards -> .nfc, decodes, tokens redacted)
python3 dumper/yoto_dumper.py                   # see dumper/README.md

Everything runs on stock Python 3 (Tkinter for the GUI). Optional extras: pyscard (ACR122U reader), pillow (cover thumbnails), pyinstaller (standalone build).

Features

  • Offline decoder (tools/yoto_decode.py) — parses the tag/NDEF/URI layers.
  • Analysis batterytoken_analyze.py, url_patterns.py, derivation_test.py, code_probe.py: segment masks, keyspace/entropy, keyed-derivation tests, re-encode/timestamp/checksum probes. All aggregate-only (never print a full token).
  • GUI dumper (dumper/) — Tkinter app; backends: PC/SC (ACR122U), Proxmark3 (RDV4/Iceman), and Flipper .nfc import. Choosable destination, mass-dump mode, auto-naming, Yoto/Dark themes, opt-in online title/cover-art lookup. Packaged with PyInstaller (hidden console + icon).
  • privacy_check.py — fails if a full card token ever leaks into a shareable file.

Findings (short version)

yoto.io/<cardId>?<token>: <cardId> is the server-assigned 5-char content id; <token> is a server-minted, UID-independent, cardId-scoped access token that is required to resolve the card and is not forgeable offline (0 of ~784 guessed URLs were ever valid; cardId/token are mutually independent; no counter, timestamp, or checksum structure). The only fixed bytes are format markers (84/0xF3; an older-generation 00/0xD3 marker). Full write-up: docs/card-format.md.

Layout

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)

(The tools/build_catalog.py visual-catalog builder ships too; its output catalog/ holds your own card scans and stays local — it isn't in the public repo.)

Data & privacy

Decoded yoto.io/<id>?<token> URLs contain per-card tokens that act like secrets. This repository ships only synthetic sample data — real card dumps and their tokens are personal and are not included. If you use these tools on your own cards:

  • Keep your dumps and decoded/ output local; treat the tokens as secrets.
  • Run python3 tools/privacy_check.py before sharing anything.
  • The GUI redacts tokens on screen by default.

Publishing this repo? Read docs/PUBLISHING.md first — a working copy that has processed real cards must be sanitised (and its git history rebuilt) before going public.

Ethics & scope

  • Analysis of your own hardware only.
  • Offline-first: the decoder and analysis never touch the network. The only networked feature is an explicitly opt-in title/cover-art lookup that contacts Yoto's own resolver directly.
  • No offensive tooling: no cloning-for-fraud, no service disruption, no auth-bypass probing of Yoto's platform. Recon is limited to public docs.

Not affiliated with or endorsed by Yoto. "Yoto" is a trademark of its owner.

License

MIT © 2026 Jona.

About

Reverse-engineering + tooling for your own Yoto NFC cards: GUI dumper (PC/SC · Proxmark3 · Flipper), offline decoder, and a Flipper scanner FAP.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages