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

This commit is contained in:
Translator 2025-08-18 20:16:40 +00:00
parent 1627c06999
commit 04c1b2bb91

View File

@ -2,25 +2,117 @@
{{#include ../../banners/hacktricks-training.md}}
{{#ref}}
README.md
{{#endref}}
## JTAGenum
[**JTAGenum** ](https://github.com/cyphunk/JTAGenum) एक उपकरण है जिसे Raspberry PI या Arduino के साथ उपयोग किया जा सकता है ताकि एक अज्ञात चिप से JTAG पिन खोजने की कोशिश की जा सके।\
**Arduino** में, **2 से 11 तक के पिन को 10 पिनों से जोड़ें जो संभावित रूप से JTAG से संबंधित हैं**। Arduino में प्रोग्राम लोड करें और यह सभी पिनों को ब्रूटफोर्स करने की कोशिश करेगा यह पता लगाने के लिए कि क्या कोई पिन JTAG से संबंधित है और कौन सा प्रत्येक है।\
**Raspberry PI** में आप केवल **1 से 6 तक के पिन** का उपयोग कर सकते हैं (6 पिन, इसलिए आप प्रत्येक संभावित JTAG पिन का परीक्षण करते समय धीमे होंगे)।
[**JTAGenum**](https://github.com/cyphunk/JTAGenum) एक उपकरण है जिसे आप Arduino-संगत MCU या (प्रायोगिक रूप से) Raspberry Pi पर लोड कर सकते हैं ताकि अज्ञात JTAG पिनआउट्स को ब्रूट-फोर्स किया जा सके और यहां तक कि निर्देश रजिस्टरों को भी सूचीबद्ध किया जा सके।
### Arduino
- Arduino: डिजिटल पिन D2D11 को 10 संदिग्ध JTAG पैड/टेस्टपॉइंट्स से कनेक्ट करें, और Arduino GND को लक्ष्य GND से जोड़ें। यदि आप नहीं जानते कि रेल सुरक्षित है तो लक्ष्य को अलग से पावर करें। 3.3 V लॉजिक को प्राथमिकता दें (जैसे, Arduino Due) या 1.83.3 V लक्ष्यों को प्रॉब करते समय लेवल शिफ्टर/सीरीज रेजिस्टर्स का उपयोग करें।
- Raspberry Pi: Pi निर्माण में उपयोगी GPIOs की संख्या कम होती है (इसलिए स्कैन धीमे होते हैं); वर्तमान पिन मैप और प्रतिबंधों के लिए रिपॉजिटरी की जांच करें।
Arduino में, केबलों को जोड़ने के बाद (पिन 2 से 11 को JTAG पिन और Arduino GND को बेसबोर्ड GND से), **Arduino में JTAGenum प्रोग्राम लोड करें** और Serial Monitor में **`h`** भेजें (मदद के लिए कमांड) और आपको मदद देखनी चाहिए:
एक बार फ्लैश होने के बाद, 115200 बौड पर सीरियल मॉनिटर खोलें और मदद के लिए `h` भेजें। सामान्य प्रवाह:
- `l` लूपबैक खोजें ताकि झूठे सकारात्मक से बचा जा सके
- `r` यदि आवश्यक हो तो आंतरिक पुल-अप्स को टॉगल करें
- `s` TCK/TMS/TDI/TDO (और कभी-कभी TRST/SRST) के लिए स्कैन करें
- `y` बिना दस्तावेज़ वाले ऑपकोड्स को खोजने के लिए IR को ब्रूट-फोर्स करें
- `x` पिन राज्यों का बाउंड्री-स्कैन स्नैपशॉट
![](<../../images/image (939).png>)
![](<../../images/image (578).png>)
**"No line ending" और 115200baud** कॉन्फ़िगर करें।\
स्कैनिंग शुरू करने के लिए कमांड s भेजें:
![](<../../images/image (774).png>)
यदि आप एक JTAG से संपर्क कर रहे हैं, तो आप एक या एक से अधिक **लाइन FOUND! से शुरू होते हुए पाएंगे** जो JTAG के पिनों को इंगित करते हैं।
यदि एक मान्य TAP पाया जाता है, तो आप `FOUND!` से शुरू होने वाली पंक्तियाँ देखेंगे जो खोजे गए पिनों को इंगित करती हैं।
टिप्स
- हमेशा ग्राउंड साझा करें, और कभी भी अज्ञात पिनों को लक्ष्य Vtref से ऊपर न चलाएं। यदि संदेह हो, तो उम्मीदवार पिनों पर 100470 Ω सीरीज रेजिस्टर्स जोड़ें।
- यदि उपकरण SWD/SWJ का उपयोग करता है बजाय 4-वायर JTAG के, तो JTAGenum इसे पहचान नहीं सकता; SWD उपकरणों या SWJ-DP का समर्थन करने वाले एडाप्टर का प्रयास करें।
## Safer pin hunting and hardware setup
- पहले एक मल्टीमीटर के साथ Vtref और GND की पहचान करें। कई एडाप्टरों को I/O वोल्टेज सेट करने के लिए Vtref की आवश्यकता होती है।
- लेवल शिफ्टिंग: पुश-पुल सिग्नल के लिए डिज़ाइन किए गए द्विदिश लेवल शिफ्टर्स को प्राथमिकता दें (JTAG लाइन्स ओपन-ड्रेन नहीं हैं)। JTAG के लिए ऑटो-डायरेक्शन I2C शिफ्टर्स से बचें।
- उपयोगी एडाप्टर: FT2232H/FT232H बोर्ड (जैसे, Tigard), CMSIS-DAP, J-Link, ST-LINK (विक्रेता-विशिष्ट), ESP-USB-JTAG (ESP32-Sx पर)। न्यूनतम TCK, TMS, TDI, TDO, GND और Vtref से कनेक्ट करें; वैकल्पिक TRST और SRST।
## First contact with OpenOCD (scan and IDCODE)
OpenOCD JTAG/SWD के लिए de-facto OSS है। एक समर्थित एडाप्टर के साथ आप चेन को स्कैन कर सकते हैं और IDCODE पढ़ सकते हैं:
- 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"
```
Notes
- यदि आपको "सभी एक/शून्य" IDCODE मिलता है, तो वायरिंग, पावर, Vtref की जांच करें, और यह सुनिश्चित करें कि पोर्ट फ्यूज़/विकल्प बाइट्स द्वारा लॉक नहीं है।
- अज्ञात चेन को चालू करते समय मैनुअल TAP इंटरैक्शन के लिए OpenOCD निम्न-स्तरीय `irscan`/`drscan` देखें।
## CPU को रोकना और मेमोरी/फ्लैश को डंप करना
एक बार जब TAP पहचाना जाता है और एक लक्ष्य स्क्रिप्ट चुनी जाती है, तो आप कोर को रोक सकते हैं और मेमोरी क्षेत्रों या आंतरिक फ्लैश को डंप कर सकते हैं। उदाहरण (लक्ष्य, आधार पते और आकार समायोजित करें):
- इनिशियल के बाद सामान्य लक्ष्य:
```
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 को परिभाषित करती है।
## Boundaryscan tricks (EXTEST/SAMPLE)
यहां तक कि जब CPU डिबग एक्सेस लॉक हो, तब भी बाउंडरी-स्कैन अभी भी उजागर हो सकता है। UrJTAG/OpenOCD के साथ आप कर सकते हैं:
- SAMPLE का उपयोग करके सिस्टम चलने के दौरान पिन राज्यों का स्नैपशॉट लें (बस गतिविधि खोजें, पिन मैपिंग की पुष्टि करें)।
- EXTEST का उपयोग करके पिन को ड्राइव करें (जैसे, यदि बोर्ड वायरिंग अनुमति देती है तो MCU के माध्यम से बाहरी SPI फ्लैश लाइनों को पढ़ने के लिए बिट-बैंग करें)।
FT2232x एडाप्टर के साथ न्यूनतम UrJTAG प्रवाह:
```
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 की आवश्यकता है। ध्यान दें कि कुछ विक्रेता उत्पादन में सीमा-स्कैन सेल को लॉक कर देते हैं।
## आधुनिक लक्ष्य और नोट्स
- ESP32S3/C3 में एक मूल USBJTAG ब्रिज शामिल है; OpenOCD सीधे USB के माध्यम से बिना किसी बाहरी प्रॉब के बात कर सकता है। त्वरित जांच और डंप के लिए बहुत सुविधाजनक।
- RISCV डिबग (v0.13+) को OpenOCD द्वारा व्यापक रूप से समर्थित किया गया है; जब कोर को सुरक्षित रूप से रोका नहीं जा सकता है, तो मेमोरी एक्सेस के लिए SBA को प्राथमिकता दें।
- कई MCU डिबग प्रमाणीकरण और जीवनचक्र राज्यों को लागू करते हैं। यदि JTAG मृत प्रतीत होता है लेकिन पावर सही है, तो डिवाइस बंद स्थिति में फ्यूज हो सकता है या एक प्रमाणित प्रॉब की आवश्यकता हो सकती है।
## रक्षा और सख्ती (वास्तविक उपकरणों पर क्या अपेक्षा करें)
- उत्पादन में JTAG/SWD को स्थायी रूप से निष्क्रिय या लॉक करें (जैसे, STM32 RDP स्तर 2, ESP eFuses जो PAD JTAG को निष्क्रिय करते हैं, NXP/Nordic APPROTECT/DPAP)।
- निर्माण पहुंच रखते हुए प्रमाणित डिबग की आवश्यकता करें (ARMv8.2A ADIv6 डिबग प्रमाणीकरण, OEM-प्रबंधित चुनौती-प्रतिक्रिया)।
- आसान परीक्षण पैड को न रूट करें; परीक्षण वियास को दफन करें, TAP को अलग करने के लिए प्रतिरोधकों को हटा/भरा दें, कीइंग या पोगो-पिन फिक्स्चर के साथ कनेक्टर्स का उपयोग करें।
- पावर-ऑन डिबग लॉक: सुरक्षित बूट को लागू करने वाले प्रारंभिक ROM के पीछे TAP को गेट करें।
## संदर्भ
- OpenOCD उपयोगकर्ता मार्गदर्शिका JTAG कमांड और कॉन्फ़िगरेशन। https://openocd.org/doc-release/html/JTAG-Commands.html
- Espressif ESP32S3 JTAG डिबगिंग (USBJTAG, OpenOCD उपयोग)। https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/
{{#include ../../banners/hacktricks-training.md}}