USB Keystrokes
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 सबमिट करें।
यदि आपके पास किसी keyboard के USB संचार वाला pcap है जो नीचे दिखाए गए जैसा है:
.png)
USB keyboards आमतौर पर HID boot protocol बोलते हैं, इसलिए host की तरफ हर interrupt transfer केवल 8 bytes लंबा होता है: एक byte modifier बिट्स के लिए (Ctrl/Shift/Alt/Super), एक reserved byte, और हर report में अधिकतम छह keycodes। इन bytes को डिकोड करना टाइप की गई सभी चीज़ों को पुनर्निर्मित करने के लिए काफी होता है।
USB HID रिपोर्ट मूल बातें
टिपिकल IN रिपोर्ट कुछ ऐसी दिखती है:
| Byte | Meaning |
|---|---|
| 0 | Modifier bitmap (0x02 = Left Shift, 0x20 = Right Alt, etc.). Multiple bits can be set simultaneously. |
| 1 | Reserved/padding but often reused by gaming keyboards for vendor data. |
| 2-7 | Up to six concurrent keycodes in USB usage ID format (0x04 = a, 0x1E = 1). 0x00 means “no key”. |
NKRO के बिना keyboards आमतौर पर तब byte 2 में 0x01 भेजते हैं जब छह से अधिक कीज़ दबाई जाती हैं ताकि “rollover” संकेतित किया जा सके। जब आपके पास केवल raw usb.capdata bytes हों तो इस लेआउट को समझना मददगार होता है।
PCAP से HID डेटा निकालना
Wireshark workflow
- डिवाइस को अलग करें: keyboard से आने वाले interrupt IN ट्रैफ़िक पर फ़िल्टर लगाएँ, जैसे
usb.transfer_type == 0x01 && usb.endpoint_address.direction == "IN" && usb.device_address == 3. - उपयोगी कॉलम जोड़ें:
Leftover Capture Dataफ़ील्ड (usb.capdata) और अपनी पसंदीदाusbhid.*फ़ील्ड्स (जैसेusbhid.boot_report.keyboard.keycode_1) पर right-click करके हर frame खोले बिना keystrokes को फॉलो करें। - खाली रिपोर्ट छुपाएँ: idle frames हटाने के लिए
!(usb.capdata == 00:00:00:00:00:00:00:00)लागू करें। - पोस्ट-प्रोसेसिंग के लिए एक्सपोर्ट करें:
File -> Export Packet Dissections -> As CSV, और बाद में reconstruction स्क्रिप्टिंग के लिएframe.number,usb.src,usb.capdata, औरusbhid.modifiersशामिल करें।
Command-line workflow
ctf-usb-keyboard-parser पहले से classic tshark + sed pipeline को automate कर देता है:
tshark -r ./usb.pcap -Y 'usb.capdata && usb.data_len == 8' -T fields -e usb.capdata | sed 's/../:&/g2' > keystrokes.txt
python3 usbkeyboard.py ./keystrokes.txt
नए कैप्चर में आप प्रति डिवाइस बैचिंग करके दोनों usb.capdata और अधिक समृद्ध usbhid.data फ़ील्ड रख सकते हैं:
tshark -r usb.pcapng -Y "usb.capdata || usbhid.data" -T fields -e usb.src -e usb.capdata -e usbhid.data | \
sort -s -k1,1 | \
awk '{ printf "%s", (NR==1 ? $1 : pre!=$1 ? "\n" $1 : "") " " $2; pre=$1 }' | \
awk '{ for (i=2; i<=NF; i++) print $i > "usbdata-" $1 ".txt" }'
वे per-device फ़ाइलें सीधे किसी भी decoder में डाल दी जाती हैं। यदि capture BLE keyboards से आया है जो GATT पर tunneled हैं, तो btatt.value && frame.len == 20 पर filter करें और decoding से पहले hex payloads को dump करें।
Decoding को स्वचालित करना
- ctf-usb-keyboard-parser तेज़ CTF चुनौतियों के लिए उपयोगी रहता है और पहले से ही repository में शामिल आता है।
- CTF-Usb_Keyboard_Parser (
main.py) मूल रूप से दोनोंpcapऔरpcapngफाइलों को parse करता है,LinkTypeUsbLinuxMmapped/LinkTypeUsbPcapको समझता है, और tshark की आवश्यकता नहीं है, इसलिए यह isolated sandboxes के अंदर अच्छी तरह काम करता है। - USB-HID-decoders keyboard, mouse, और tablet visualizers जोड़ता है। आप या तो
extract_hid_data.shhelper (tshark backend) याextract_hid_data.py(scapy backend) चला सकते हैं और फिर resulting text file को decoder या replay modules को feed करके keystrokes unfold होते हुए देख सकते हैं।
तेज़ Python decoder
#!/usr/bin/env python3
import sys
HID = {0x04:'a',0x05:'b',0x06:'c',0x07:'d',0x08:'e',0x09:'f',0x0a:'g',0x1c:'y',0x1d:'z',0x28:'\n'}
for raw in sys.stdin:
raw = raw.strip().replace(':', '')
if len(raw) != 16:
continue
keycode = int(raw[4:6], 16)
modifier = int(raw[0:2], 16)
if keycode:
char = HID.get(keycode, '?')
if modifier & 0x02:
char = char.upper()
sys.stdout.write(char)
इसे पहले डंप की गई साधारण hex लाइनों से फीड करें ताकि पूरे parser को environment में लाए बिना आप तुरंत एक मोटा पुनर्निर्माण प्राप्त कर सकें।
Troubleshooting tips
- यदि Wireshark
usbhid.*फील्ड भर नहीं रहा है, तो संभवतः HID report descriptor कैप्चर नहीं हुआ था। कैप्चर करते समय कीबोर्ड को फिर से प्लग करें या rawusb.capdataपर वापस लौटें। - Windows captures के लिए USBPcap extcap interface चाहिए; सुनिश्चित करें कि यह Wireshark अपग्रेड्स के बाद भी मौजूद है, क्योंकि extcaps गायब होने पर डिवाइस सूचियाँ खाली रह जाती हैं।
- किसी भी चीज़ को डिकोड करने से पहले हमेशा
usb.bus_id:device:interface(उदा.1.9.1) को correlate करें — एक से अधिक कीबोर्ड या स्टोरेज डिवाइस को मिलाने से बेतुके कीस्ट्रोक्स मिलते हैं।
References
- ctf-usb-keyboard-parser
- HackTheBox Deadly Arthropod write-up
- CTF-Usb_Keyboard_Parser
- USB-HID-decoders
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 सबमिट करें।


