Translated ['src/todo/hardware-hacking/jtag.md'] to sw

This commit is contained in:
Translator 2025-08-18 20:16:36 +00:00
parent ee2b034f88
commit 867d2390e6

View File

@ -2,25 +2,119 @@
{{#include ../../banners/hacktricks-training.md}}
{{#ref}}
README.md
{{#endref}}
## JTAGenum
[**JTAGenum** ](https://github.com/cyphunk/JTAGenum)ni chombo kinachoweza kutumika na Raspberry PI au Arduino kutafuta kujaribu pini za JTAG kutoka kwa chip isiyojulikana.\
Katika **Arduino**, ung'anishe **pini kutoka 2 hadi 11 kwa pini 10 zinazoweza kuwa za JTAG**. Pakia programu kwenye Arduino na itajaribu kujaribu nguvu zote za pini ili kuona kama pini yoyote ni ya JTAG na ambayo ni kila moja.\
Katika **Raspberry PI** unaweza kutumia tu **pini kutoka 1 hadi 6** (pini 6, hivyo utachukua muda mrefu zaidi kujaribu kila pini inayoweza kuwa ya JTAG).
[**JTAGenum**](https://github.com/cyphunk/JTAGenum) ni chombo ambacho unaweza kupakia kwenye MCU inayofaa na Arduino au (kwa majaribio) Raspberry Pi ili kujaribu pinouts za JTAG zisizojulikana na hata kuhesabu register za maagizo.
### Arduino
- Arduino: ung'anishe pini za dijitali D2D11 kwa hadi 10 za JTAG zinazoshukiwa/punkti za mtihani, na GND ya Arduino kwa GND ya lengo. Pata nguvu kwa lengo tofauti isipokuwa unajua reli ni salama. Prefer 3.3 V logic (mfano, Arduino Due) au tumia level shifter/resistors za mfululizo unapochunguza malengo ya 1.83.3 V.
- Raspberry Pi: toleo la Pi lina GPIO chache zinazoweza kutumika (hivyo skana ni polepole); angalia repo kwa ramani ya pini ya sasa na vizuizi.
Katika Arduino, baada ya kuunganisha nyaya (pini 2 hadi 11 kwa pini za JTAG na GND ya Arduino kwa GND ya baseboard), **pakia programu ya JTAGenum kwenye Arduino** na katika Monitor ya Serial tuma **`h`** (amri ya msaada) na unapaswa kuona msaada:
Mara tu unapoflash, fungua monitor ya serial kwa 115200 baud na tuma `h` kwa msaada. Mchakato wa kawaida:
- `l` pata loopbacks ili kuepuka positives za uwongo
- `r` badilisha pullups za ndani ikiwa inahitajika
- `s` scan kwa TCK/TMS/TDI/TDO (na wakati mwingine TRST/SRST)
- `y` bruteforce IR kugundua opcodes zisizorekodiwa
- `x` snapshot ya boundaryscan ya hali za pini
![](<../../images/image (939).png>)
![](<../../images/image (578).png>)
Sanidi **"No line ending" na 115200baud**.\
Tuma amri s kuanza skanning:
![](<../../images/image (774).png>)
Ikiwa unawasiliana na JTAG, utaona moja au kadhaa **mistari inayoanisha na FOUND!** ikionyesha pini za JTAG.
Ikiwa TAP halali imepatikana utaona mistari inayaanza na `FOUND!` ikionyesha pini zilizogunduliwa.
Vidokezo
- Daima shiriki ardhi, na usiendeshe pini zisizojulikana juu ya Vtref ya lengo. Ikiwa una shaka, ongeza resistors za mfululizo 100470 Ω kwenye pini za wagombea.
- Ikiwa kifaa kinatumia SWD/SWJ badala ya JTAG ya nyaya 4, JTAGenum huenda kisigundue; jaribu zana za SWD au adapter inayounga mkono SWJDP.
## Uwindaji wa pini salama na usanidi wa vifaa
- Tambua Vtref na GND kwanza kwa kutumia multimeter. Adapta nyingi zinahitaji Vtref kuweka voltage ya I/O.
- Level shifting: pendelea level shifters za pande mbili zilizoundwa kwa ishara za pushpull (michakato ya JTAG si wazi-drain). Epuka level shifters za I2C za autodirection kwa JTAG.
- Adapta zinazofaa: bodi za FT2232H/FT232H (mfano, Tigard), CMSISDAP, JLink, STLINK (maalum kwa muuzaji), ESPUSBJTAG (juu ya ESP32Sx). Unganisha angalau TCK, TMS, TDI, TDO, GND na Vtref; hiari TRST na SRST.
## Mawasiliano ya kwanza na OpenOCD (scan na IDCODE)
OpenOCD ni OSS ya defacto kwa JTAG/SWD. Kwa adapter inayounga mkono unaweza skana mnyororo na kusoma IDCODEs:
- Mfano wa jumla na JLink:
```
openocd -f interface/jlink.cfg -c "transport select jtag; adapter speed 1000" \
-c "init; scan_chain; shutdown"
```
- ESP32S3 iliyojumuishwa USBJTAG (hakuna kipimo cha nje kinachohitajika):
```
openocd -f board/esp32s3-builtin.cfg -c "init; scan_chain; shutdown"
```
Notes
- Ikiwa unapata "sifuri/mmoja zote" IDCODE, angalia wiring, nguvu, Vtref, na kwamba bandari haijafungwa na fuses/option bytes.
- Tazama OpenOCD lowlevel `irscan`/`drscan` kwa ajili ya mwingiliano wa manual wa TAP unapofungua minyororo isiyojulikana.
## Kusimamisha CPU na kutupa kumbukumbu/flash
Mara tu TAP inapokubaliwa na script ya lengo imechaguliwa, unaweza kusimamisha msingi na kutupa maeneo ya kumbukumbu au flash ya ndani. Mifano (badilisha lengo, anwani za msingi na saizi):
- Lengo la jumla baada ya kuanzisha:
```
openocd -f interface/jlink.cfg -f target/stm32f1x.cfg \
-c "init; reset halt; mdw 0x08000000 4; dump_image flash.bin 0x08000000 0x00100000; shutdown"
```
- RISCV SoC (prefa SBA inapopatikana):
```
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"
```
- ESP32S3, programu au soma kupitia msaada wa OpenOCD:
```
openocd -f board/esp32s3-builtin.cfg \
-c "program_esp app.bin 0x10000 verify exit"
```
Tips
- Tumia `mdw/mdh/mdb` kuthibitisha kumbukumbu kabla ya dumps ndefu.
- Kwa minyororo ya vifaa vingi, weka BYPASS kwenye zisizo lengo au tumia faili ya bodi inayofafanua TAP zote.
## Hila za boundary-scan (EXTEST/SAMPLE)
Hata wakati ufikiaji wa debug wa CPU umefungwa, boundary-scan bado inaweza kuwa wazi. Kwa UrJTAG/OpenOCD unaweza:
- SAMPLE kuchukua picha za hali za pini wakati mfumo unafanya kazi (pata shughuli za basi, thibitisha ramani ya pini).
- EXTEST kuendesha pini (mfano, bit-bang mistari ya SPI flash ya nje kupitia MCU ili kuisoma mtandaoni ikiwa wiring ya bodi inaruhusu).
Minimal UrJTAG flow with an FT2232x adapter:
```
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>
```
Unahitaji kifaa BSDL ili kujua mpangilio wa bit za register za mpaka. Kuwa makini kwamba wauzaji wengine wanaweza kufunga seli za uchunguzi wa mpaka katika uzalishaji.
## Malengo ya kisasa na maelezo
- ESP32S3/C3 inajumuisha daraja la USBJTAG la asili; OpenOCD inaweza kuzungumza moja kwa moja kupitia USB bila kipimo cha nje. Ni rahisi sana kwa uchambuzi na dump.
- Ufuatiliaji wa RISCV (v0.13+) unasaidiwa sana na OpenOCD; pendelea SBA kwa ufikiaji wa kumbukumbu wakati kiini hakiwezi kuzuiwa kwa usalama.
- MCU nyingi zinafanya uthibitisho wa ufuatiliaji na hali za mzunguko. Ikiwa JTAG inaonekana kufa lakini nguvu ni sahihi, kifaa kinaweza kuwa kimeunganishwa katika hali iliyofungwa au kinahitaji kipimo kilichothibitishwa.
## Ulinzi na kuimarisha (kila unachoweza kutarajia kwenye vifaa halisi)
- Zima kabisa au fungia JTAG/SWD katika uzalishaji (mfano, STM32 RDP kiwango 2, ESP eFuses zinazozuia PAD JTAG, NXP/Nordic APPROTECT/DPAP).
- Hitaji uthibitisho wa ufuatiliaji (ARMv8.2A ADIv6 Uthibitisho wa Ufuatiliaji, changamoto-ujibu inayosimamiwa na OEM) huku ukihifadhi ufikiaji wa utengenezaji.
- Usipange pad za mtihani rahisi; ficha vias za mtihani, ondoa/jaza upinzani ili kutenga TAP, tumia viunganishi vyenye funguo au vifaa vya pogopin.
- Kufunga ufuatiliaji wa nguvu: funga TAP nyuma ya ROM ya mapema inayolazimisha kuanza salama.
## Marejeleo
- OpenOCD Users Guide Amri za JTAG na usanidi. https://openocd.org/doc-release/html/JTAG-Commands.html
- Espressif ESP32S3 Ufuatiliaji wa JTAG (USBJTAG, matumizi ya OpenOCD). https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/
{{#include ../../banners/hacktricks-training.md}}