From iothackbot
Probes IoT/embedded targets for exposed SWD/JTAG debug interfaces via SEGGER J-Link. Detects OPEN, LOCKED, or DEAD debug ports and identifies silicon vendor from DPIDR/IDCODE.
How this skill is triggered — by the user, by Claude, or both
Slash command
/iothackbot:jtagprobeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are helping the user determine whether a target's on-chip debug interface is exposed via SWD or JTAG, using the `jtagprobe` tool. This drives a SEGGER J-Link physically wired to the target.
You are helping the user determine whether a target's on-chip debug interface is exposed via SWD or JTAG, using the jtagprobe tool. This drives a SEGGER J-Link physically wired to the target.
Three nested access layers are checked, and the target is classified into one of:
OPEN — DP responds, CPU halts, memory reads return plausible data. Full debugger control. Critical finding.LOCKED — DP/IDCODE accessible but memory reads fail or return readout-protection sentinels (0xFFFFFFFF). Indicates STM32 RDP, NXP CRP, Nordic APPROTECT, etc. are engaged. Still a finding — the port should not respond at all in production.DEAD — No DP/IDCODE response on any tested interface/speed. Debug fused off, pins not wired, or wrong target.JLinkExe on PATH — verify with which JLinkExe. If it is installed but not on PATH, point the tool at it with --jlink-binary /path/to/JLinkExe instead of relying on PATH.If JLinkExe cannot be found at all, tell the user to install SEGGER J-Link software from segger.com. Do not attempt to install it without explicit approval.
Default — sweep SWD then JTAG at 4000/1000/100 kHz, halt, read memory, classify:
jtagprobe
Save per-attempt JLinkExe logs as evidence (recommended for pentest writeups):
jtagprobe --evidence-dir ./evidence/jtagprobe-$(date +%Y%m%d-%H%M%S)
JSON for chaining:
jtagprobe --format json
Just run with defaults. The tool will:
jtagprobe --evidence-dir ./evidence
If the user knows the chip, pass --device for a more accurate halt/memory test. Use the same device strings J-Link accepts (STM32F407VG, nRF52840_xxAA, MK64FN1M0xxx12, etc.):
jtagprobe --device STM32F407VG
Some pirate-flagged boards or long ribbon cables need a slower clock. Limit the sweep:
jtagprobe --speeds 1000,100,10
If the target is in a state where halting would crash an active firmware path you care about (rare in pentests, common in live systems), stop after the connect probe:
jtagprobe --skip-memory
jtagprobe --interfaces SWD
jtagprobe --interfaces JTAG --speeds 4000,1000
The text format leads with the classification and reason:
CLASSIFICATION: LOCKED
DP/IDCODE accessible but CPU halt or memory read failed. Typical of RDP / CRP / APPROTECT engaged.
Vendor: STMicroelectronics
SW-DP DPIDR=0x2BA01477 partno=0xBA version=2 designer_identity=0x20
Access test:
Halted: True
CPUID @ 0xE000ED00 = 0x410FC241
0x08000000: 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF [all-0xFF, possible RDP]
Protection hint: STM32 RDP Level 1/2 (see RM, FLASH_OPTR bits 15:8).
Key signals:
0xFFFFFFFF flash reads after a successful halt = readout protection. Capture the DPIDR and document the protection mechanism.For a pentest finding under CWE-1191 (improper access control on debug interface) or CWE-1244 (asset exposed via debug):
jtagprobe invocation--evidence-dir for the appendixDefault assumption: they want both SWD and JTAG checked, full halt+memory test, and evidence captured. Run:
jtagprobe --evidence-dir ./evidence/jtagprobe-$(date +%Y%m%d-%H%M%S)
If JLinkExe isn't on PATH, stop and report that the SEGGER tools aren't installed.
--device is passed. Halt/memory access may succeed under a generic device even when the vendor-specific erase/unlock would not.--format json shows what was extracted.unlock commands separately with explicit authorization.npx claudepluginhub brownfinesecurity/iothackbot --plugin iothackbotReviews IoT device security including firmware analysis, hardware interface probing (UART/JTAG/SWD), bootloader validation, OTA updates, radio protocols, cloud APIs, and mobile companion apps.
Guides probe-rs embedded debug workflows: probe discovery, flashing, debugging, RTT I/O for ARM Cortex-M/RISC-V via CLI or MCP tools. For hardware bring-up or runtime diagnostics.
Flashes firmware to microcontrollers via SEGGER J-Link probe and captures RTT logs. Supports device detection, multi-interface (SWD/JTAG), and project config scanning.