JTAG
Reading time: 7 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
JTAGenum
JTAGenum एक उपकरण है जिसे आप Arduino-संगत MCU या (प्रायोगिक रूप से) Raspberry Pi पर लोड कर सकते हैं ताकि अज्ञात JTAG पिनआउट को ब्रूट-फोर्स किया जा सके और यहां तक कि निर्देश रजिस्टरों को भी सूचीबद्ध किया जा सके।
- Arduino: डिजिटल पिन D2–D11 को 10 संदिग्ध JTAG पैड/टेस्टपॉइंट्स से कनेक्ट करें, और Arduino GND को लक्ष्य GND से कनेक्ट करें। यदि आप नहीं जानते कि रेल सुरक्षित है तो लक्ष्य को अलग से पावर करें। 3.3 V लॉजिक को प्राथमिकता दें (जैसे, Arduino Due) या 1.8–3.3 V लक्ष्यों को प्रॉब करते समय लेवल शिफ्टर/सीरीज रेजिस्टर्स का उपयोग करें।
- Raspberry Pi: Pi निर्माण में उपयोगी GPIOs की संख्या कम होती है (इसलिए स्कैन धीमे होते हैं); वर्तमान पिन मैप और प्रतिबंधों के लिए रिपॉजिटरी की जांच करें।
एक बार फ्लैश होने के बाद, 115200 बौड पर सीरियल मॉनिटर खोलें और मदद के लिए h
भेजें। सामान्य प्रवाह:
l
लूपबैक खोजें ताकि गलत सकारात्मकता से बचा जा सकेr
यदि आवश्यक हो तो आंतरिक पुल-अप को टॉगल करेंs
TCK/TMS/TDI/TDO (और कभी-कभी TRST/SRST) के लिए स्कैन करेंy
बिना दस्तावेज़ वाले ऑपकोड खोजने के लिए IR को ब्रूट-फोर्स करेंx
पिन राज्यों का बाउंड्री-स्कैन स्नैपशॉट
यदि एक मान्य TAP पाया जाता है, तो आप FOUND!
से शुरू होने वाली पंक्तियाँ देखेंगे जो खोजे गए पिनों को इंगित करती हैं।
टिप्स
- हमेशा ग्राउंड साझा करें, और कभी भी अज्ञात पिनों को लक्ष्य Vtref से ऊपर न चलाएं। यदि संदेह हो, तो उम्मीदवार पिनों पर 100–470 Ω सीरीज रेजिस्टर्स जोड़ें।
- यदि डिवाइस 4-वायर JTAG के बजाय SWD/SWJ का उपयोग करता है, तो 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 के लिए डि-फैक्टो OSS है। एक समर्थित एडाप्टर के साथ आप चेन को स्कैन कर सकते हैं और IDCODE पढ़ सकते हैं:
- J-Link के साथ सामान्य उदाहरण:
openocd -f interface/jlink.cfg -c "transport select jtag; adapter speed 1000" \
-c "init; scan_chain; shutdown"
- ESP32‑S3 में अंतर्निहित USB‑JTAG (कोई बाहरी प्रॉब की आवश्यकता नहीं):
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"
- RISC‑V 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"
- ESP32‑S3, OpenOCD हेल्पर के माध्यम से प्रोग्राम या पढ़ें:
openocd -f board/esp32s3-builtin.cfg \
-c "program_esp app.bin 0x10000 verify exit"
Tips
mdw/mdh/mdb
का उपयोग करें ताकि लंबे डंप से पहले मेमोरी की जांच की जा सके।- मल्टी-डिवाइस चेन के लिए, गैर-लक्ष्यों पर BYPASS सेट करें या एक बोर्ड फ़ाइल का उपयोग करें जो सभी TAPs को परिभाषित करती है।
Boundary‑scan 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 की आवश्यकता है। ध्यान दें कि कुछ विक्रेता उत्पादन में सीमा-स्कैन सेल को लॉक कर देते हैं।
आधुनिक लक्ष्य और नोट्स
- ESP32‑S3/C3 में एक मूल USB‑JTAG ब्रिज शामिल है; OpenOCD सीधे USB के माध्यम से बिना किसी बाहरी प्रॉब के बात कर सकता है। त्वरित जांच और डंप के लिए बहुत सुविधाजनक।
- RISC‑V डिबग (v0.13+) को OpenOCD द्वारा व्यापक रूप से समर्थित किया गया है; जब कोर को सुरक्षित रूप से रोका नहीं जा सकता है, तो मेमोरी एक्सेस के लिए SBA को प्राथमिकता दें।
- कई MCU डिबग प्रमाणीकरण और जीवनचक्र राज्यों को लागू करते हैं। यदि JTAG मृत प्रतीत होता है लेकिन पावर सही है, तो डिवाइस बंद स्थिति में फ्यूज हो सकता है या एक प्रमाणित प्रॉब की आवश्यकता हो सकती है।
रक्षा और हार्डनिंग (वास्तविक उपकरणों पर क्या अपेक्षा करें)
- उत्पादन में JTAG/SWD को स्थायी रूप से बंद या लॉक करें (जैसे, STM32 RDP स्तर 2, ESP eFuses जो PAD JTAG को बंद करते हैं, NXP/Nordic APPROTECT/DPAP)।
- निर्माण पहुंच रखते हुए प्रमाणित डिबग की आवश्यकता करें (ARMv8.2‑A ADIv6 डिबग प्रमाणीकरण, OEM-प्रबंधित चुनौती-प्रतिक्रिया)।
- आसान परीक्षण पैड को रूट न करें; परीक्षण वियास को दफन करें, TAP को अलग करने के लिए प्रतिरोधकों को हटा/भरा दें, कीइंग या पोगो-पिन फिक्स्चर के साथ कनेक्टर्स का उपयोग करें।
- पावर-ऑन डिबग लॉक: सुरक्षित बूट को लागू करने वाले प्रारंभिक ROM के पीछे TAP को गेट करें।
संदर्भ
- OpenOCD उपयोगकर्ता मार्गदर्शिका – JTAG कमांड और कॉन्फ़िगरेशन. https://openocd.org/doc-release/html/JTAG-Commands.html
- Espressif ESP32‑S3 JTAG डिबगिंग (USB‑JTAG, OpenOCD उपयोग). https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।