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

This commit is contained in:
Translator 2025-08-18 20:17:06 +00:00
parent c3555146d2
commit d720958130

View File

@ -2,25 +2,117 @@
{{#include ../../banners/hacktricks-training.md}}
{{#ref}}
README.md
{{#endref}}
## JTAGenum
[**JTAGenum** ](https://github.com/cyphunk/JTAGenum), bilinmeyen bir çipten JTAG pinlerini bulmak için Raspberry PI veya Arduino ile kullanılabilecek bir araçtır.\
**Arduino**'da, **2'den 11'e kadar olan pinleri JTAG'a ait olabilecek 10 pinle bağlayın**. Programı Arduino'ya yükleyin ve JTAG'a ait olan pinleri bulmak için tüm pinleri brute force ile denemeye çalışacaktır.\
**Raspberry PI**'da yalnızca **1'den 6'ya kadar olan pinleri** kullanabilirsiniz (6 pin, bu nedenle her potansiyel JTAG pinini test ederken daha yavaş ilerleyeceksiniz).
[**JTAGenum**](https://github.com/cyphunk/JTAGenum), bilinmeyen JTAG pin düzenlerini zorlamak ve hatta talimat kayıtlarını numaralandırmak için bir Arduino uyumlu MCU veya (deneysel olarak) bir Raspberry Pi'ye yükleyebileceğiniz bir araçtır.
### Arduino
- Arduino: dijital pinleri D2D11'i 10'a kadar şüpheli JTAG pad/test noktalarına bağlayın ve Arduino GND'yi hedef GND'ye bağlayın. Hedefi ayrı bir şekilde besleyin, aksi takdirde rayın güvenli olduğunu bilmiyorsanız. 3.3 V mantığını tercih edin (örneğin, Arduino Due) veya 1.83.3 V hedefleri incelerken bir seviye dönüştürücü/seri dirençler kullanın.
- Raspberry Pi: Pi yapısı daha az kullanılabilir GPIO sunar (bu nedenle taramalar daha yavaştır); güncel pin haritası ve kısıtlamalar için repoyu kontrol edin.
Arduino'da, kabloları bağladıktan sonra (pin 2'den 11'e kadar JTAG pinlerine ve Arduino GND'yi ana kart GND'ye bağlayarak), **JTAGenum programını Arduino'ya yükleyin** ve Seri Monitörde **`h`** (yardım komutu) gönderin ve yardım metnini görmelisiniz:
Yüklendikten sonra, 115200 baud hızında seri monitörü açın ve yardım için `h` gönderin. Tipik akış:
- `l` yanlış pozitifleri önlemek için döngü geri dönüşlerini bulun
- `r` gerekiyorsa dahili pull-up'ları değiştirin
- `s` TCK/TMS/TDI/TDO (ve bazen TRST/SRST) için tarama yapın
- `y` belgelenmemiş opcode'ları keşfetmek için IR'yi zorlayın
- `x` pin durumlarının sınır tarama anlık görüntüsü
![](<../../images/image (939).png>)
![](<../../images/image (578).png>)
**"No line ending" ve 115200baud** ayarlarını yapın.\
Tarama başlatmak için s komutunu gönderin:
![](<../../images/image (774).png>)
Eğer bir JTAG ile iletişim kuruyorsanız, JTAG pinlerini belirten **FOUND!** ile başlayan bir veya daha fazla **satır bulacaksınız**.
Geçerli bir TAP bulunursa, keşfedilen pinleri gösteren `FOUND!` ile başlayan satırlar göreceksiniz.
İpuçları
- Her zaman toprak paylaşın ve bilinmeyen pinleri hedef Vtref'in üzerine çıkarmayın. Şüphe durumunda, aday pinlerde 100470 Ω seri dirençler ekleyin.
- Cihaz 4 telli JTAG yerine SWD/SWJ kullanıyorsa, JTAGenum bunu tespit edemeyebilir; SWD araçlarını veya SWJDP'yi destekleyen bir adaptörü deneyin.
## Daha güvenli pin avlama ve donanım kurulumu
- Öncelikle bir multimetre ile Vtref ve GND'yi belirleyin. Birçok adaptör, I/O voltajını ayarlamak için Vtref'e ihtiyaç duyar.
- Seviye kaydırma: itme-çekme sinyalleri için tasarlanmış iki yönlü seviye dönüştürücüler tercih edin (JTAG hatlarıık-drenaj değildir). JTAG için otomatik yönlendirme I2C dönüştürücülerden kaçının.
- Kullanışlı adaptörler: FT2232H/FT232H kartları (örneğin, Tigard), CMSISDAP, JLink, STLINK (satıcıya özgü), ESPUSBJTAG (ESP32Sx üzerinde). En azından TCK, TMS, TDI, TDO, GND ve Vtref'i bağlayın; isteğe bağlı olarak TRST ve SRST.
## OpenOCD ile ilk temas (tarama ve IDCODE)
OpenOCD, JTAG/SWD için de-facto OSS'dir. Desteklenen bir adaptör ile zinciri tarayabilir ve IDCODE'ları okuyabilirsiniz:
- JLink ile genel bir örnek:
```
openocd -f interface/jlink.cfg -c "transport select jtag; adapter speed 1000" \
-c "init; scan_chain; shutdown"
```
- ESP32S3 yerleşik USBJTAG (harici prob gerektirmez):
```
openocd -f board/esp32s3-builtin.cfg -c "init; scan_chain; shutdown"
```
Notlar
- "tüm birler/sıfırlar" IDCODE alırsanız, kablolamayı, gücü, Vtref'i kontrol edin ve portun sigortalar/seçenek baytları tarafından kilitlenmediğinden emin olun.
- Bilinmeyen zincirleri başlatırken manuel TAP etkileşimi için OpenOCD düşük seviyeli `irscan`/`drscan`'e bakın.
## CPU'yu Durdurma ve Bellek/Flash Dump'lama
TAP tanındıktan ve bir hedef betik seçildikten sonra, çekirdeği durdurabilir ve bellek bölgelerini veya dahili flash'ı dökebilirsiniz. Örnekler (hedefi, temel adresleri ve boyutları ayarlayın):
- Başlatmadan sonra genel hedef:
```
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 (mümkünse SBA'yı tercih edin):
```
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 yardımcı programı aracılığıyla programla veya oku:
```
openocd -f board/esp32s3-builtin.cfg \
-c "program_esp app.bin 0x10000 verify exit"
```
Tips
- Uzun dökümlerden önce belleği kontrol etmek için `mdw/mdh/mdb` kullanın.
- Çoklu cihaz zincirleri için, hedef olmayanlarda BYPASS ayarlayın veya tüm TAP'leri tanımlayan bir kart dosyası kullanın.
## Boundary-scan hileleri (EXTEST/SAMPLE)
CPU hata ayıklama erişimi kilitli olsa bile, boundary-scan hala açığa çıkabilir. UrJTAG/OpenOCD ile şunları yapabilirsiniz:
- Sistem çalışırken pin durumlarını anlık görüntülemek için SAMPLE kullanın (veri yolu aktivitesini bulun, pin eşlemesini doğrulayın).
- Pinleri sürmek için EXTEST kullanın (örneğin, kart bağlantısı izin veriyorsa, harici SPI flash hatlarını MCU aracılığıyla bit-bang ile okuyun).
FT2232x adaptörü ile minimal UrJTAG akışı:
```
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>
```
Bölge kayıt bit sıralamasını bilmek için cihaz BSDL'ye ihtiyacınız var. Bazı satıcıların üretimde sınır tarama hücrelerini kilitlediğine dikkat edin.
## Modern hedefler ve notlar
- ESP32S3/C3, yerel bir USBJTAG köprüsü içerir; OpenOCD, harici bir prob olmadan doğrudan USB üzerinden iletişim kurabilir. Tahlil ve dökümler için çok kullanışlı.
- RISCV hata ayıklama (v0.13+) OpenOCD tarafından geniş ölçüde desteklenmektedir; çekirdek güvenli bir şekilde durdurulamadığında bellek erişimi için SBA'yı tercih edin.
- Birçok MCU, hata ayıklama kimlik doğrulaması ve yaşam döngüsü durumları uygular. JTAG ölü görünüyorsa ancak güç doğruysa, cihaz kapalı bir duruma kilitlenmiş olabilir veya kimlik doğrulaması yapılmış bir prob gerektirebilir.
## Savunmalar ve güçlendirme (gerçek cihazlarda ne beklenir)
- Üretimde JTAG/SWD'yi kalıcı olarak devre dışı bırakın veya kilitleyin (örneğin, STM32 RDP seviye 2, PAD JTAG'ı devre dışı bırakan ESP eFuses, NXP/Nordic APPROTECT/DPAP).
- Üretim erişimini korurken kimlik doğrulamalı hata ayıklama gerektirin (ARMv8.2A ADIv6 Hata Ayıklama Kimlik Doğrulaması, OEM yönetimli zorluk-cevap).
- Kolay test pad'leri yönlendirmeyin; test vias'larını gömün, TAP'ı izole etmek için dirençleri çıkarın/doldurun, anahtarlama veya pogo-pin aparatları ile konektörler kullanın.
- Güç açma hata ayıklama kilidi: TAP'ı güvenli önyüklemeyi zorlayan erken ROM'un arkasında kapatın.
## Referanslar
- OpenOCD Kullanıcı Kılavuzu JTAG Komutları ve yapılandırma. https://openocd.org/doc-release/html/JTAG-Commands.html
- Espressif ESP32S3 JTAG hata ayıklama (USBJTAG, OpenOCD kullanımı). https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/
{{#include ../../banners/hacktricks-training.md}}