JTAG
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
JTAGenum
JTAGenum è uno strumento che puoi caricare su un MCU compatibile con Arduino o (in via sperimentale) su un Raspberry Pi per forzare le pinout JTAG sconosciute e persino enumerare i registri delle istruzioni.
- Arduino: collega i pin digitali D2âD11 a un massimo di 10 pad/testpoint JTAG sospetti, e GND di Arduino a GND del target. Alimenta il target separatamente a meno che tu non sappia che il rail è sicuro. Preferisci la logica a 3.3 V (ad es., Arduino Due) o utilizza un level shifter/resistori in serie quando sondi target a 1.8â3.3 V.
- Raspberry Pi: la build del Pi espone meno GPIO utilizzabili (quindi le scansioni sono piĂš lente); controlla il repo per la mappa dei pin attuale e le limitazioni.
Una volta flashato, apri il monitor seriale a 115200 baud e invia h per aiuto. Flusso tipico:
ltrova loopback per evitare falsi positivirattiva/disattiva i pull-up interni se necessariosscansiona per TCK/TMS/TDI/TDO (e a volte TRST/SRST)yforza IR per scoprire opcode non documentatixsnapshot di boundary-scan degli stati dei pin
.png)
.png)
.png)
Se viene trovato un TAP valido vedrai righe che iniziano con FOUND! indicando i pin scoperti.
Suggerimenti
- Condividi sempre il ground e non alimentare mai pin sconosciuti sopra il Vtref del target. In caso di dubbio, aggiungi resistori in serie da 100â470 Ί sui pin candidati.
- Se il dispositivo utilizza SWD/SWJ invece di JTAG a 4 fili, JTAGenum potrebbe non rilevarlo; prova strumenti SWD o un adattatore che supporta SWJâDP.
Caccia ai pin piĂš sicura e configurazione hardware
- Identifica prima Vtref e GND con un multimetro. Molti adattatori necessitano di Vtref per impostare la tensione I/O.
- Livellamento: preferisci level shifters bidirezionali progettati per segnali pushâpull (le linee JTAG non sono openâdrain). Evita level shifters I2C a direzione automatica per JTAG.
- Adattatori utili: schede FT2232H/FT232H (ad es., Tigard), CMSISâDAP, JâLink, STâLINK (specifici del fornitore), ESPâUSBâJTAG (su ESP32âSx). Collega almeno TCK, TMS, TDI, TDO, GND e Vtref; opzionalmente TRST e SRST.
Primo contatto con OpenOCD (scansione e IDCODE)
OpenOCD è lâOSS de facto per JTAG/SWD. Con un adattatore supportato puoi scansionare la catena e leggere gli IDCODE:
- Esempio generico con un JâLink:
openocd -f interface/jlink.cfg -c "transport select jtag; adapter speed 1000" \
-c "init; scan_chain; shutdown"
- ESP32âS3 USBâJTAG integrato (nessun probe esterno richiesto):
openocd -f board/esp32s3-builtin.cfg -c "init; scan_chain; shutdown"
Note
- Se ottieni un IDCODE âtutti uno/zeroâ, controlla il cablaggio, lâalimentazione, Vtref e che la porta non sia bloccata da fusibili/opzioni.
- Vedi OpenOCD lowâlevel
irscan/drscanper interazione manuale TAP quando si attivano catene sconosciute.
Fermare la CPU e scaricare la memoria/flash
Una volta che il TAP è riconosciuto e uno script di destinazione è scelto, puoi fermare il core e scaricare le regioni di memoria o la flash interna. Esempi (regola destinazione, indirizzi base e dimensioni):
- Destinazione generica dopo lâinizializzazione:
openocd -f interface/jlink.cfg -f target/stm32f1x.cfg \
-c "init; reset halt; mdw 0x08000000 4; dump_image flash.bin 0x08000000 0x00100000; shutdown"
- RISCâV SoC (preferire SBA quando disponibile):
openocd -f interface/ftdi/ft232h.cfg -f target/riscv.cfg \
-c "init; riscv set_prefer_sba on; halt; dump_image sram.bin 0x80000000 0x20000; shutdown"
- ESP32âS3, programma o leggi tramite lâaiuto di OpenOCD:
openocd -f board/esp32s3-builtin.cfg \
-c "program_esp app.bin 0x10000 verify exit"
Tips
- Usa
mdw/mdh/mdbper controllare la memoria prima di dump lunghi. - Per catene multi-dispositivo, imposta BYPASS su non-target o usa un file di scheda che definisce tutti i TAP.
Trucchi di boundary-scan (EXTEST/SAMPLE)
Anche quando lâaccesso al debug della CPU è bloccato, il boundary-scan potrebbe essere ancora esposto. Con UrJTAG/OpenOCD puoi:
- SAMPLE per acquisire gli stati dei pin mentre il sistema è in esecuzione (trovare attività di bus, confermare il mapping dei pin).
- EXTEST per pilotare i pin (ad esempio, bit-bangare le linee SPI flash esterne tramite lâMCU per leggerle offline se il cablaggio della scheda lo consente).
Flusso minimo di UrJTAG con un adattatore FT2232x:
jtag> cable ft2232 vid=0x0403 pid=0x6010 interface=1
jtag> frequency 100000
jtag> detect
jtag> bsdl path /path/to/bsdl/files
jtag> instruction EXTEST
jtag> shift ir
jtag> dr <bit pattern for boundary register>
Hai bisogno del BSDL del dispositivo per conoscere lâordinamento dei bit del registro di confine. Fai attenzione che alcuni fornitori bloccano le celle di scansione del confine in produzione.
Obiettivi moderni e note
- ESP32âS3/C3 include un ponte USBâJTAG nativo; OpenOCD può comunicare direttamente tramite USB senza una sonda esterna. Molto comodo per la triage e i dump.
- Il debug RISCâV (v0.13+) è ampiamente supportato da OpenOCD; preferisci SBA per lâaccesso alla memoria quando il core non può essere arrestato in modo sicuro.
- Molti MCU implementano lâautenticazione del debug e stati del ciclo di vita. Se JTAG sembra morto ma lâalimentazione è corretta, il dispositivo potrebbe essere fuso in uno stato chiuso o richiedere una sonda autenticata.
Difese e indurimento (cosa aspettarsi su dispositivi reali)
- Disabilita o blocca permanentemente JTAG/SWD in produzione (ad es., livello 2 RDP STM32, eFuses ESP che disabilitano PAD JTAG, APPROTECT/DPAP NXP/Nordic).
- Richiedi debug autenticato (ARMv8.2âA ADIv6 Debug Authentication, sfida-risposta gestita da OEM) mantenendo lâaccesso alla produzione.
- Non instradare pad di test facili; seppellire via di test, rimuovere/popolare resistori per isolare TAP, utilizzare connettori con chiavi o fixture a pogo-pin.
- Blocco del debug allâaccensione: controlla il TAP dietro il ROM iniziale che impone lâavvio sicuro.
Riferimenti
- OpenOCD Userâs Guide â JTAG Commands and configuration. https://openocd.org/doc-release/html/JTAG-Commands.html
- Espressif ESP32âS3 JTAG debugging (USBâJTAG, OpenOCD usage). https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

