JTAG
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- VĂ©rifiez les plans dâabonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
JTAGenum
JTAGenum est un outil que vous pouvez charger sur un MCU compatible Arduino ou (expĂ©rimentalement) un Raspberry Pi pour forcer les pinouts JTAG inconnus et mĂȘme Ă©numĂ©rer les registres dâinstructions.
- Arduino : connectez les broches numĂ©riques D2âD11 Ă jusquâĂ 10 pads/testpoints JTAG suspects, et GND Arduino Ă GND cible. Alimentez la cible sĂ©parĂ©ment Ă moins que vous ne sachiez que le rail est sĂ»r. PrĂ©fĂ©rez la logique 3,3 V (par exemple, Arduino Due) ou utilisez un convertisseur de niveau/rĂ©sistances en sĂ©rie lors de la sonde des cibles 1,8â3,3 V.
- Raspberry Pi : la version Pi expose moins de GPIO utilisables (donc les scans sont plus lents) ; vérifiez le dépÎt pour la carte des broches actuelle et les contraintes.
Une fois flashĂ©, ouvrez le moniteur sĂ©rie Ă 115200 bauds et envoyez h pour obtenir de lâaide. Flux typique :
ltrouver les boucles de retour pour éviter les faux positifsrbasculer les pull-ups internes si nécessairesscanner pour TCK/TMS/TDI/TDO (et parfois TRST/SRST)yforcer IR pour découvrir des opcodes non documentésxinstantané de scan de frontiÚre des états des broches
.png)
.png)
.png)
Si un TAP valide est trouvé, vous verrez des lignes commençant par FOUND! indiquant les broches découvertes.
Conseils
- Partagez toujours la masse, et ne jamais alimenter des broches inconnues au-dessus de Vtref cible. En cas de doute, ajoutez des rĂ©sistances en sĂ©rie de 100â470 Ω sur les broches candidates.
- Si le dispositif utilise SWD/SWJ au lieu de JTAG Ă 4 fils, JTAGenum peut ne pas le dĂ©tecter ; essayez des outils SWD ou un adaptateur qui prend en charge SWJâDP.
Chasse aux broches plus sûre et configuration matérielle
- Identifiez dâabord Vtref et GND avec un multimĂštre. De nombreux adaptateurs ont besoin de Vtref pour dĂ©finir la tension I/O.
- Conversion de niveau : prĂ©fĂ©rez les convertisseurs de niveau bidirectionnels conçus pour les signaux pushâpull (les lignes JTAG ne sont pas Ă drain ouvert). Ăvitez les convertisseurs I2C Ă direction automatique pour JTAG.
- Adaptateurs utiles : cartes FT2232H/FT232H (par exemple, Tigard), CMSISâDAP, JâLink, STâLINK (spĂ©cifique au fournisseur), ESPâUSBâJTAG (sur ESP32âSx). Connectez au minimum TCK, TMS, TDI, TDO, GND et Vtref ; TRST et SRST en option.
Premier contact avec OpenOCD (scan et IDCODE)
OpenOCD est le OSS de facto pour JTAG/SWD. Avec un adaptateur pris en charge, vous pouvez scanner la chaĂźne et lire les IDCODEs :
- Exemple gĂ©nĂ©rique avec un JâLink :
openocd -f interface/jlink.cfg -c "transport select jtag; adapter speed 1000" \
-c "init; scan_chain; shutdown"
- ESP32âS3 USBâJTAG intĂ©grĂ© (aucune sonde externe requise) :
openocd -f board/esp32s3-builtin.cfg -c "init; scan_chain; shutdown"
Notes
- Si vous obtenez un IDCODE âtous les uns/zĂ©rosâ, vĂ©rifiez le cĂąblage, lâalimentation, Vtref, et que le port nâest pas verrouillĂ© par des fusibles/bytes dâoption.
- Voir OpenOCD bas niveau
irscan/drscanpour une interaction manuelle TAP lors de la mise en route de chaĂźnes inconnues.
ArrĂȘt du CPU et vidage de la mĂ©moire/flash
Une fois que le TAP est reconnu et quâun script cible est choisi, vous pouvez arrĂȘter le cĆur et vider les rĂ©gions de mĂ©moire ou la flash interne. Exemples (ajuster la cible, les adresses de base et les tailles) :
- Cible générique aprÚs init :
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 (prĂ©fĂ©rer SBA lorsque disponible) :
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, programmer ou lire via lâassistant OpenOCD :
openocd -f board/esp32s3-builtin.cfg \
-c "program_esp app.bin 0x10000 verify exit"
Conseils
- Utilisez
mdw/mdh/mdbpour vérifier la mémoire avant de faire de longs dumps. - Pour les chaßnes multi-appareils, définissez BYPASS sur les non-cibles ou utilisez un fichier de carte qui définit tous les TAPs.
Astuces de test de frontiĂšre (EXTEST/SAMPLE)
MĂȘme lorsque lâaccĂšs de dĂ©bogage du CPU est verrouillĂ©, le test de frontiĂšre peut encore ĂȘtre exposĂ©. Avec UrJTAG/OpenOCD, vous pouvez :
- SAMPLE pour prendre un instantanĂ© des Ă©tats des broches pendant que le systĂšme fonctionne (trouver lâactivitĂ© du bus, confirmer le mappage des broches).
- EXTEST pour piloter des broches (par exemple, bit-bang des lignes SPI flash externes via le MCU pour les lire hors ligne si le cĂąblage de la carte le permet).
Flux minimal UrJTAG avec un adaptateur 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>
Vous avez besoin du BSDL de lâappareil pour connaĂźtre lâordre des bits des registres de frontiĂšre. Attention, certains fournisseurs verrouillent les cellules de scan de frontiĂšre en production.
Cibles modernes et notes
- ESP32âS3/C3 incluent un pont USBâJTAG natif ; OpenOCD peut communiquer directement via USB sans sonde externe. TrĂšs pratique pour le triage et les dumps.
- Le dĂ©bogage RISCâV (v0.13+) est largement supportĂ© par OpenOCD ; prĂ©fĂ©rez SBA pour lâaccĂšs mĂ©moire lorsque le cĆur ne peut pas ĂȘtre arrĂȘtĂ© en toute sĂ©curitĂ©.
- De nombreux MCU mettent en Ćuvre lâauthentification de dĂ©bogage et les Ă©tats de cycle de vie. Si JTAG semble mort mais que lâalimentation est correcte, lâappareil peut ĂȘtre fusionnĂ© dans un Ă©tat fermĂ© ou nĂ©cessite une sonde authentifiĂ©e.
DĂ©fenses et durcissement (Ă quoi sâattendre sur des appareils rĂ©els)
- Désactivez ou verrouillez définitivement JTAG/SWD en production (par exemple, niveau 2 RDP STM32, eFuses ESP qui désactivent PAD JTAG, APPROTECT/DPAP NXP/Nordic).
- Exigez une authentification de dĂ©bogage (ARMv8.2âA ADIv6 Debug Authentication, dĂ©fi-rĂ©ponse gĂ©rĂ© par lâOEM) tout en conservant lâaccĂšs Ă la fabrication.
- Ne pas acheminer de pads de test faciles ; enterrez les vias de test, retirez/peuplement les résistances pour isoler TAP, utilisez des connecteurs avec codage ou des dispositifs à broches pogo.
- Verrouillage de dĂ©bogage Ă lâalimentation : placez le TAP derriĂšre un ROM prĂ©coce imposant un dĂ©marrage sĂ©curisĂ©.
Références
- 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
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- VĂ©rifiez les plans dâabonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.


