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

This commit is contained in:
Translator 2025-08-18 20:17:18 +00:00
parent 068b9a54e6
commit e2cbe38192

View File

@ -2,25 +2,119 @@
{{#include ../../banners/hacktricks-training.md}}
{{#ref}}
README.md
{{#endref}}
## JTAGenum
[**JTAGenum** ](https://github.com/cyphunk/JTAGenum)είναι ένα εργαλείο που μπορεί να χρησιμοποιηθεί με ένα Raspberry PI ή ένα Arduino για να προσπαθήσει να βρει τα JTAG pins από ένα άγνωστο τσιπ.\
Στο **Arduino**, συνδέστε τα **pins από 2 έως 11 σε 10pins που ενδεχομένως ανήκουν σε ένα JTAG**. Φορτώστε το πρόγραμμα στο Arduino και θα προσπαθήσει να βρει με brute force όλα τα pins για να δει αν κάποιο από αυτά ανήκει σε JTAG και ποιο είναι το καθένα.\
Στο **Raspberry PI** μπορείτε να χρησιμοποιήσετε μόνο **pins από 1 έως 6** (6pins, οπότε θα προχωρήσετε πιο αργά δοκιμάζοντας κάθε πιθανό JTAG pin).
[**JTAGenum**](https://github.com/cyphunk/JTAGenum) είναι ένα εργαλείο που μπορείτε να φορτώσετε σε ένα συμβατό MCU Arduino ή (πειραματικά) σε ένα Raspberry Pi για να κάνετε bruteforce άγνωστες συνδέσεις JTAG και ακόμη και να καταγράψετε καταχωρητές εντολών.
### Arduino
- Arduino: συνδέστε τις ψηφιακές ακίδες D2D11 σε έως 10 υποψήφιες ακίδες/testpoints JTAG, και το GND του Arduino στο GND του στόχου. Τροφοδοτήστε το στόχο ξεχωριστά εκτός αν γνωρίζετε ότι η γραμμή είναι ασφαλής. Προτιμήστε λογική 3.3 V (π.χ., Arduino Due) ή χρησιμοποιήστε έναν μετατροπέα επιπέδου/σειριακούς αντιστάτες όταν ελέγχετε στόχους 1.83.3 V.
- Raspberry Pi: η κατασκευή του Pi εκθέτει λιγότερες χρησιμοποιήσιμες GPIOs (έτσι οι σαρώσεις είναι πιο αργές); ελέγξτε το repo για τον τρέχοντα χάρτη ακίδων και περιορισμούς.
Στο Arduino, μετά τη σύνδεση των καλωδίων (pin 2 έως 11 στα JTAG pins και Arduino GND στη βάση GND), **φορτώστε το πρόγραμμα JTAGenum στο Arduino** και στο Serial Monitor στείλτε ένα **`h`** (εντολή για βοήθεια) και θα πρέπει να δείτε τη βοήθεια:
Αφού αναβοσβήσετε, ανοίξτε τον σειριακό παρατηρητή στα 115200 baud και στείλτε `h` για βοήθεια. Τυπική ροή:
- `l` βρείτε loopbacks για να αποφύγετε ψευδώς θετικά
- `r` εναλλάξτε τις εσωτερικές pullups αν χρειάζεται
- `s` σαρώστε για TCK/TMS/TDI/TDO (και μερικές φορές TRST/SRST)
- `y` bruteforce IR για να ανακαλύψετε μη τεκμηριωμένες εντολές
- `x` στιγμιότυπο boundaryscan των καταστάσεων ακίδων
![](<../../images/image (939).png>)
![](<../../images/image (578).png>)
Ρυθμίστε **"No line ending" και 115200baud**.\
Στείλτε την εντολή s για να ξεκινήσετε τη σάρωση:
![](<../../images/image (774).png>)
Αν επικοινωνείτε με ένα JTAG, θα βρείτε μία ή περισσότερες **γραμμές που ξεκινούν με FOUND!** υποδεικνύοντας τα pins του JTAG.
Αν βρεθεί έγκυρο TAP, θα δείτε γραμμές που ξεκινούν με `FOUND!` που υποδεικνύουν ανακαλυφθείσες ακίδες.
Συμβουλές
- Μοιραστείτε πάντα το έδαφος και μην οδηγείτε άγνωστες ακίδες πάνω από το Vtref του στόχου. Αν έχετε αμφιβολίες, προσθέστε σειριακούς αντιστάτες 100470 Ω στις υποψήφιες ακίδες.
- Αν η συσκευή χρησιμοποιεί SWD/SWJ αντί για 4wire JTAG, το JTAGenum μπορεί να μην το ανιχνεύσει; δοκιμάστε εργαλεία SWD ή έναν προσαρμογέα που υποστηρίζει SWJDP.
## Ασφαλέστερη αναζήτηση ακίδων και ρύθμιση υλικού
- Εντοπίστε πρώτα το Vtref και το GND με ένα πολύμετρο. Πολλοί προσαρμογείς χρειάζονται το Vtref για να ρυθμίσουν την τάση I/O.
- Μετατροπή επιπέδου: προτιμήστε διευθυντικούς μετατροπείς επιπέδου σχεδιασμένους για σήματα pushpull (οι γραμμές JTAG δεν είναι opendrain). Αποφύγετε τους αυτόματους μετατροπείς κατεύθυνσης I2C για JTAG.
- Χρήσιμοι προσαρμογείς: FT2232H/FT232H boards (π.χ., Tigard), CMSISDAP, JLink, STLINK (ειδικοί προμηθευτές), ESPUSBJTAG (σε ESP32Sx). Συνδέστε τουλάχιστον TCK, TMS, TDI, TDO, GND και Vtref; προαιρετικά TRST και SRST.
## Πρώτη επαφή με OpenOCD (σάρωση και IDCODE)
Το OpenOCD είναι το defacto OSS για JTAG/SWD. Με έναν υποστηριζόμενο προσαρμογέα μπορείτε να σαρώσετε την αλυσίδα και να διαβάσετε IDCODEs:
- Γενικό παράδειγμα με έναν JLink:
```
openocd -f interface/jlink.cfg -c "transport select jtag; adapter speed 1000" \
-c "init; scan_chain; shutdown"
```
- ESP32S3 ενσωματωμένο USBJTAG (δεν απαιτείται εξωτερικός ανιχνευτής):
```
openocd -f board/esp32s3-builtin.cfg -c "init; scan_chain; shutdown"
```
Σημειώσεις
- Εάν λάβετε "όλα 1/0" IDCODE, ελέγξτε την καλωδίωση, την τροφοδοσία, το Vtref και ότι η θύρα δεν είναι κλειδωμένη από ασφάλειες/επιλογές.
- Δείτε το OpenOCD χαμηλού επιπέδου `irscan`/`drscan` για χειροκίνητη αλληλεπίδραση TAP κατά την εκκίνηση άγνωστων αλυσίδων.
## Σταμάτημα της CPU και εκφόρτωση μνήμης/flash
Αφού αναγνωριστεί το TAP και επιλεγεί ένα σενάριο στόχου, μπορείτε να σταματήσετε τον πυρήνα και να εκφορτώσετε περιοχές μνήμης ή εσωτερικό flash. Παραδείγματα (προσαρμόστε τον στόχο, τις βασικές διευθύνσεις και τα μεγέθη):
- Γενικός στόχος μετά την αρχικοποίηση:
```
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 (προτιμήστε SBA όταν είναι διαθέσιμο):
```
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, προγραμματίστε ή διαβάστε μέσω του βοηθού OpenOCD:
```
openocd -f board/esp32s3-builtin.cfg \
-c "program_esp app.bin 0x10000 verify exit"
```
Tips
- Χρησιμοποιήστε `mdw/mdh/mdb` για να ελέγξετε τη μνήμη πριν από μεγάλες εκφορτώσεις.
- Για αλυσίδες πολλαπλών συσκευών, ρυθμίστε το BYPASS σε μη στόχους ή χρησιμοποιήστε ένα αρχείο πλακέτας που ορίζει όλα τα TAPs.
## Τεχνάσματα boundary-scan (EXTEST/SAMPLE)
Ακόμα και όταν η πρόσβαση αποσφαλμάτωσης της CPU είναι κλειδωμένη, το boundary-scan μπορεί να είναι ακόμα εκτεθειμένο. Με το UrJTAG/OpenOCD μπορείτε να:
- SAMPLE για να αποθηκεύσετε τις καταστάσεις των ακίδων ενώ το σύστημα λειτουργεί (βρείτε δραστηριότητα λεωφόρου, επιβεβαιώστε την αντιστοίχιση ακίδων).
- EXTEST για να οδηγήσετε ακίδες (π.χ., bit-bang εξωτερικές γραμμές SPI flash μέσω του MCU για να τις διαβάσετε εκτός σύνδεσης αν το καλωδίωμα της πλακέτας το επιτρέπει).
Ελάχιστη ροή UrJTAG με προσαρμογέα 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>
```
Πρέπει να έχετε το BSDL της συσκευής για να γνωρίζετε τη σειρά των bits των καταχωρητών ορίου. Προσοχή, ορισμένοι προμηθευτές κλειδώνουν τα κύτταρα ανίχνευσης ορίου στην παραγωγή.
## Σύγχρονοι στόχοι και σημειώσεις
- ESP32S3/C3 περιλαμβάνουν μια εγγενή γέφυρα USBJTAG; Το OpenOCD μπορεί να επικοινωνεί απευθείας μέσω USB χωρίς εξωτερικό αισθητήρα. Πολύ βολικό για τριχοτόμηση και dumps.
- Η αποσφαλμάτωση RISCV (v0.13+) υποστηρίζεται ευρέως από το OpenOCD; προτιμήστε το SBA για πρόσβαση στη μνήμη όταν ο πυρήνας δεν μπορεί να σταματήσει με ασφάλεια.
- Πολλοί MCU υλοποιούν αυθεντικοποίηση αποσφαλμάτωσης και καταστάσεις κύκλου ζωής. Εάν το JTAG φαίνεται νεκρό αλλά η τροφοδοσία είναι σωστή, η συσκευή μπορεί να έχει συγκολληθεί σε κλειστή κατάσταση ή να απαιτεί έναν αυθεντικοποιημένο αισθητήρα.
## Άμυνες και σκληραγώγηση (τι να περιμένετε σε πραγματικές συσκευές)
- Μόνιμα απενεργοποιήστε ή κλειδώστε το JTAG/SWD στην παραγωγή (π.χ., STM32 RDP επίπεδο 2, ESP eFuses που απενεργοποιούν το PAD JTAG, NXP/Nordic APPROTECT/DPAP).
- Απαιτήστε αυθεντικοποιημένη αποσφαλμάτωση (ARMv8.2A ADIv6 Debug Authentication, OEM-διαχειριζόμενη πρόκληση-απάντηση) διατηρώντας την πρόσβαση στην παραγωγή.
- Μην διαδρομείτε εύκολες δοκιμαστικές επιφάνειες; θάψτε τις δοκιμαστικές vias, αφαιρέστε/καλύψτε αντιστάτες για να απομονώσετε το TAP, χρησιμοποιήστε συνδέσμους με κλειδώματα ή fixtures pogo-pin.
- Κλείδωμα αποσφαλμάτωσης κατά την τροφοδοσία: κλείστε το TAP πίσω από πρώιμο ROM που επιβάλλει ασφαλή εκκίνηση.
## Αναφορές
- OpenOCD Users Guide JTAG Commands and configuration. https://openocd.org/doc-release/html/JTAG-Commands.html
- Espressif ESP32S3 JTAG debugging (USBJTAG, OpenOCD usage). https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/
{{#include ../../banners/hacktricks-training.md}}