#!/usr/bin/env python #tshark -r bingbing.pcap -T fields -e usb.capdata > usbdata.txt import sys import os DataFileName = "usbdata.txt" presses = [] normalKeys = {"04": "a", "05": "b", "06": "c", "07": "d", "08": "e", "09": "f", "0a": "g", "0b": "h", "0c": "i", "0d": "j", "0e": "k", "0f": "l", "10": "m", "11": "n", "12": "o", "13": "p", "14": "q", "15": "r", "16": "s", "17": "t", "18": "u", "19": "v", "1a": "w", "1b": "x", "1c": "y", "1d": "z", "1e": "1", "1f": "2", "20": "3", "21": "4", "22": "5", "23": "6", "24": "7", "25": "8", "26": "9", "27": "0", "28": "", "29": "", "2a": "", "2b": "\t", "2c": "", "2d": "-", "2e": "=", "2f": "[", "30": "]", "31": "\\", "32": "", "33": ";", "34": "'", "35": "", "36": ",", "37": ".", "38": "/", "39": "", "3a": "", "3b": "", "3c": "", "3d": "", "3e": "", "3f": "", "40": "", "41": "", "42": "", "43": "", "44": "", "45": ""} shiftKeys = {"04": "A", "05": "B", "06": "C", "07": "D", "08": "E", "09": "F", "0a": "G", "0b": "H", "0c": "I", "0d": "J", "0e": "K", "0f": "L", "10": "M", "11": "N", "12": "O", "13": "P", "14": "Q", "15": "R", "16": "S", "17": "T", "18": "U", "19": "V", "1a": "W", "1b": "X", "1c": "Y", "1d": "Z", "1e": "!", "1f": "@", "20": "#", "21": "$", "22": "%", "23": "^", "24": "&", "25": "*", "26": "(", "27": ")", "28": "", "29": "", "2a": "", "2b": "\t", "2c": "", "2d": "_", "2e": "+", "2f": "{", "30": "}", "31": "|", "32": "", "33": "\"", "34": ":", "35": "", "36": "<", "37": ">", "38": "?", "39": "", "3a": "", "3b": "", "3c": "", "3d": "", "3e": "", "3f": "", "40": "", "41": "", "42": "", "43": "", "44": "", "45": ""} def main(): # check argv if len(sys.argv) != 2: print("Usage : ") print(" python UsbKeyboardHacker.py data.pcap") print("Tips : ") print(" To use this python script , you must install the tshark first.") print(" You can use `sudo apt-get install tshark` to install it") exit(1) # get argv pcapFilePath = sys.argv[1] # get data of pcap os.system("tshark -r %s -T fields -e usb.capdata > %s" % (pcapFilePath, DataFileName)) # read data with open(DataFileName, "r") as f: for line in f: presses.append(line[0:-1]) # handle result = "" for press in presses: Bytes = press.split(":") if Bytes[0] == "00": if Bytes[2] != "00": result += normalKeys[Bytes[2]] elif Bytes[0] == "20": # shift key is pressed. if Bytes[2] != "00": result += shiftKeys[Bytes[2]] else: print("[-] Unknow Key : %s" % (Bytes[0])) print("[+] Found : %s" % (result)) # clean the temp data os.system("rm ./%s" % (DataFileName)) if __name__ == "__main__": main()