JTAG
Reading time: 6 minutes
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: 
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure: 
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
 - Junte-se ao đŹ grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter đŠ @hacktricks_live.
 - Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositĂłrios do github.
 
JTAGenum
JTAGenum Ă© uma ferramenta que vocĂȘ pode carregar em um MCU compatĂvel com Arduino ou (experimentalmente) em um Raspberry Pi para forçar a descoberta de pinagens JTAG desconhecidas e atĂ© enumerar registradores de instrução.
- Arduino: conecte os pinos digitais D2âD11 a atĂ© 10 pads/testpoints JTAG suspeitos, e o GND do Arduino ao GND do alvo. Alimente o alvo separadamente, a menos que vocĂȘ saiba que a linha Ă© segura. Prefira lĂłgica de 3,3 V (por exemplo, Arduino Due) ou use um conversor de nĂvel/resistores em sĂ©rie ao sondar alvos de 1,8â3,3 V.
 - Raspberry Pi: a construção do Pi expÔe menos GPIOs utilizåveis (portanto, as varreduras são mais lentas); verifique o repositório para o mapa de pinos atual e restriçÔes.
 
Uma vez gravado, abra o monitor serial a 115200 baud e envie h para ajuda. Fluxo tĂpico:
lencontrar loopbacks para evitar falsos positivosralternar pullâups internos se necessĂĄriosescanear para TCK/TMS/TDI/TDO (e Ă s vezes TRST/SRST)yforçar IR para descobrir opcodes nĂŁo documentadosxinstantĂąneo de boundaryâscan dos estados dos pinos
.png)
.png)
.png)
Se um TAP vĂĄlido for encontrado, vocĂȘ verĂĄ linhas começando com FOUND! indicando pinos descobertos.
Dicas
- Sempre compartilhe o terra e nunca acione pinos desconhecidos acima do Vtref do alvo. Se tiver dĂșvidas, adicione resistores em sĂ©rie de 100â470 Ω nos pinos candidatos.
 - Se o dispositivo usar SWD/SWJ em vez de JTAG de 4 fios, o JTAGenum pode nĂŁo detectĂĄ-lo; tente ferramentas SWD ou um adaptador que suporte SWJâDP.
 
Caça a pinos mais segura e configuração de hardware
- Identifique Vtref e GND primeiro com um multĂmetro. Muitos adaptadores precisam de Vtref para definir a tensĂŁo de I/O.
 - ConversĂŁo de nĂvel: prefira conversores de nĂvel bidirecionais projetados para sinais pushâpull (as linhas JTAG nĂŁo sĂŁo openâdrain). Evite conversores I2C de direção automĂĄtica para JTAG.
 - Adaptadores Ășteis: placas FT2232H/FT232H (por exemplo, Tigard), CMSISâDAP, JâLink, STâLINK (especĂficos do fornecedor), ESPâUSBâJTAG (no ESP32âSx). Conecte no mĂnimo TCK, TMS, TDI, TDO, GND e Vtref; opcionalmente TRST e SRST.
 
Primeiro contato com OpenOCD (varredura e IDCODE)
OpenOCD Ă© o OSS de fato para JTAG/SWD. Com um adaptador suportado, vocĂȘ pode escanear a cadeia e ler IDCODEs:
- Exemplo genĂ©rico com um JâLink:
 
openocd -f interface/jlink.cfg -c "transport select jtag; adapter speed 1000" \
-c "init; scan_chain; shutdown"
- ESP32âS3 USBâJTAG embutido (nenhuma sonda externa necessĂĄria):
 
openocd -f board/esp32s3-builtin.cfg -c "init; scan_chain; shutdown"
Notas
- Se vocĂȘ receber um IDCODE "todos uns/zeros", verifique a fiação, a energia, o Vtref e se a porta nĂŁo estĂĄ bloqueada por fusĂveis/opçÔes de bytes.
 - Veja OpenOCD 
irscan/drscande baixo nĂvel para interação manual com TAP ao iniciar cadeias desconhecidas. 
Parando a CPU e despejando memĂłria/flash
Uma vez que o TAP Ă© reconhecido e um script de destino Ă© escolhido, vocĂȘ pode parar o nĂșcleo e despejar regiĂ”es de memĂłria ou flash interno. Exemplos (ajuste o alvo, endereços base e tamanhos):
- Alvo genérico após a inicialização:
 
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 (prefira SBA quando disponĂvel):
 
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, programar ou ler via helper OpenOCD:
 
openocd -f board/esp32s3-builtin.cfg \
-c "program_esp app.bin 0x10000 verify exit"
Tips
- Use 
mdw/mdh/mdbpara verificar a integridade da memĂłria antes de dumps longos. - Para cadeias de mĂșltiplos dispositivos, defina BYPASS em nĂŁo-alvos ou use um arquivo de placa que defina todos os TAPs.
 
Truques de boundary-scan (EXTEST/SAMPLE)
Mesmo quando o acesso de depuração da CPU estĂĄ bloqueado, o boundary-scan ainda pode estar exposto. Com UrJTAG/OpenOCD vocĂȘ pode:
- SAMPLE para capturar estados dos pinos enquanto o sistema estå em execução (encontrar atividade no barramento, confirmar mapeamento de pinos).
 - EXTEST para acionar pinos (por exemplo, bit-bang linhas SPI externas via o MCU para lĂȘ-las offline se a fiação da placa permitir).
 
Fluxo mĂnimo do UrJTAG com um adaptador 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>
VocĂȘ precisa do BSDL do dispositivo para conhecer a ordem dos bits do registrador de limite. Cuidado, pois alguns fornecedores bloqueiam cĂ©lulas de boundary-scan na produção.
Alvos modernos e notas
- ESP32âS3/C3 incluem uma ponte USBâJTAG nativa; OpenOCD pode se comunicar diretamente via USB sem uma sonda externa. Muito conveniente para triagem e dumps.
 - O debug RISCâV (v0.13+) Ă© amplamente suportado pelo OpenOCD; prefira SBA para acesso Ă memĂłria quando o nĂșcleo nĂŁo puder ser interrompido com segurança.
 - Muitos MCUs implementam autenticação de debug e estados de ciclo de vida. Se o JTAG parecer morto, mas a energia estiver correta, o dispositivo pode estar fundido em um estado fechado ou requerer uma sonda autenticada.
 
Defesas e endurecimento (o que esperar em dispositivos reais)
- Desative permanentemente ou bloqueie JTAG/SWD na produção (por exemplo, nĂvel 2 RDP STM32, eFuses ESP que desativam PAD JTAG, APPROTECT/DPAP NXP/Nordic).
 - Exija autenticação de debug (ARMv8.2âA ADIv6 Autenticação de Debug, desafio-resposta gerenciado por OEM) enquanto mantĂ©m o acesso de fabricação.
 - Não roteie pads de teste fåceis; enterre vias de teste, remova/popule resistores para isolar TAP, use conectores com chaves ou fixaçÔes de pinos pogo.
 - Bloqueio de debug na inicialização: proteja o TAP atrås de um ROM inicial que impÔe o boot seguro.
 
ReferĂȘncias
- 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
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: 
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure: 
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
 - Junte-se ao đŹ grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter đŠ @hacktricks_live.
 - Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositĂłrios do github.
 
HackTricks