ChaosID
June 4, 2026 · View on GitHub
Perito forense de cartoes pro Flipper Zero. Faz scan sequencial LF (125 kHz) -> HF (13.56 MHz), identifica o protocolo e devolve um dossie com tecnologia, criptografia, vetor de ataque conhecido, ano da quebra e nivel de risco.
Parte da serie Chaos IAM | feito pela Cafe com Solda.
Download
Baixa o .fap pronto na ultima release e arrasta pra SD Card/apps/NFC/ do seu Flipper via qFlipper ou lab.flipper.net. Depois eh so: Apps -> NFC -> ChaosID.
⚠️ Compilado contra Momentum firmware (API 87.1, target F7). Pra outros firmwares (oficial Flipper Devices, Unleashed, RogueMaster) recompila a partir do source - instrucoes na secao Build.
Status
v0.3 - leitura real funcionando em LF e HF.
- LF (125 kHz) via
lfrfid_worker- identifica EM4100, HID Prox, Indala, AWID e variantes. Retorna UID raw em hex + dados parseados (Facility Code, Card Number, Customer ID). - HF (13.56 MHz) via
nfc_scanner+iso14443_3a_poller_sync- identifica MIFARE Classic/Ultralight/DESFire/Plus, NTAG, FeliCa, iCLASS, ISO15693. Extrai UID, ATQA e SAK. - Dossie cruza o protocolo detectado com base interna de 15+ entries, mostrando criptografia usada, vetor de ataque conhecido, ano da quebra publica e nivel de risco (Trivial / Quebrada / Endurecida).
Estrutura
chaos_id/
├── application.fam manifesto Flipper
├── chaos_id.c entry point + alloc/free do app
├── chaos_id_app.h struct de estado + enums (scenes/views/events)
├── scenes/
│ ├── chaos_id_scene.h declaracoes dos handlers
│ ├── chaos_id_scene.c tabela de dispatch
│ ├── chaos_id_scene_splash.c menu principal
│ ├── chaos_id_scene_scanning.c ponto de integracao com radio
│ ├── chaos_id_scene_result.c dossie do cartao
│ └── chaos_id_scene_about.c
├── database/
│ ├── cards_db.h CardProfile struct + helpers
│ └── cards_db.c 15 entries reais (LF + HF)
└── assets/
└── icon.png 10x10 mono (incluso)
Build (modo isolado, contra SDK do Momentum)
Setup de primeira vez (cria SDK project-local em .ufbt/ dentro da pasta, em vez do ~/.ufbt/ global):
# Instala ufbt isolado via pipx (Ubuntu 23.04+ / Debian 12+ exigem por causa do PEP 668)
sudo apt install pipx
pipx ensurepath && exec $SHELL
pipx install ufbt
cd chaos_id
ufbt dotenv_create # SDK fica em .ufbt/ DENTRO do projeto
ufbt update --index-url=https://up.momentum-fw.dev/firmware/directory.json
ufbt vscode_dist # gera .vscode/ com tasks + IntelliSense
code .
Ciclo de desenvolvimento:
ufbt # build -> dist/chaos_id.fap
ufbt launch # build + flash USB + executa no Flipper conectado
ufbt cli # console serial do Flipper (qFlipper precisa estar FECHADO)
ufbt -c # clean
No VS Code: Ctrl+Shift+B dispara build. Pra step-debug precisa de probe SWD; sem probe, usa furi_log_* no codigo e olha o output no ufbt cli.
Antes do ufbt launch, fecha qFlipper e a aba do lab.flipper.net se estiverem abertos - seguram a porta USB.
O assets/icon.png ja vem no scaffold (10x10 1-bit, cartao com chip EMV). Pra trocar o desenho, qualquer PNG 10x10 monocromatico serve.
Como funciona
scenes/chaos_id_scene_scanning.c orquestra duas fases sequenciais:
Fase LF (125 kHz) - ate 4s
- Aloca
ProtocolDictcom todos os protocolos LF disponiveis (lfrfid_protocols) - Inicia
LFRFIDWorkerem modoLFRFIDWorkerReadTypeAuto(cicla ASK e PSK) - Callback
lf_read_callbackdispara emLFRFIDWorkerReadDone:protocol_dict_get_data()retorna os bytes raw -> formatados como hex no campo UIDprotocol_dict_render_brief_data()retorna campos parseados (FC, Card, CL, decimal)protocol_dict_get_name()retorna o nome ->cards_db_find_by_lfrfid_name()mapeia pro DB
- Se nada detectado em 4s, transita pra fase HF
Fase HF (13.56 MHz) - ate 2.5s + ~300ms de activation
- Aloca
NfceNfcScanner(greedy, varre todos os protocolos em paralelo) - Callback
hf_scanner_callbackdispara emNfcScannerEventTypeDetected:- Salva o protocolo (mais especifico primeiro) e delega pro UI thread via custom event
- Nao para o scanner daqui (deadlock - somos a worker thread dele)
- UI thread recebe
HfDetected, para o scanner, chamaiso14443_3a_poller_sync_read():- Bloqueia ~200-300ms refazendo activation ISO14443-3A (sem crypto, sem dictionary attack)
- Retorna struct com UID + ATQA + SAK
nfc_device_get_protocol_name()+cards_db_find_by_nfc_name()mapeiam pro DB
Threading
LFRFID worker e NfcScanner rodam em threads proprias. Todo callback de RF fala com a UI thread via view_dispatcher_send_custom_event() - nunca chame APIs de view/scene_manager direto da worker thread (deadlock).
Build multi-firmware (release)
Pra gerar .fap simultaneamente pra Momentum + firmware oficial da Flipper Devices:
```bash ./scripts/build_multi.sh ```
Saída em dist/multi/:
chaos_id-momentum.fap— Momentum firmwarechaos_id-official.fap— Flipper Devices oficial
O script chaveia o canal SDK do ufbt, faz clean + build, e no fim restaura o SDK default (Momentum). Adicionar outros firmwares (Unleashed, RogueMaster) é só descomentar/adicionar linha no array FIRMWARES=(...).
Roadmap
- v0.1 - UI + scene manager + base de cartoes + scan simulado
- v0.2 - integracao real com
lfrfid_worker(LF) enfc_scanner(HF) - v0.3 - extracao de UID/ATQA/SAK via
iso14443_3a_poller_sync - v0.4 - persistencia: salva cada scan em
/ext/apps_data/chaos_id/log.csv(timestamp, protocol, UID, risk) - v0.5 - botao "Investigar" no dossie de cartoes broken: pra MIFARE Classic chama nested attack direto
- v0.6 - i18n EN/PT, splash com identidade visual Cafe com Solda, submit pro app catalog oficial
Licenca
GPLv3 ou posterior (GNU General Public License v3.0-or-later).
- Texto completo em
LICENSE(canonico, SHA-2563972dc97...86). - Cada arquivo fonte tem header SPDX
GPL-3.0-or-later. - Forks e derivados devem ser redistribuidos sob a mesma licenca.
Escolha alinhada com a cultura do firmware Flipper e de ferramentas de pesquisa em seguranca (Proxmark, Chameleon, etc).