2nd 🩸

Brainf**k

The following command is used to extract USB data from a .pcapng file:

tshark -r usb1.pcapng -T fields -e usb.capdata > userdata.txt

To reconstruct the keyboard key presses from the extracted data, i write a script titled key.py. The expected result of the script is to simulate the key press process.

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":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\\t",
         "2c":"<SPACE>","2d":"-","2e":"=","2f":"[","30":"]","31":"\\\\",
         "32":"<NON>","33":";","34":"'","35":"<GA>","36":",","37":".",
         "38":"/","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","2b": "[tab]",
         "3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>",
         "44":"<F11>","45":"<F12>","2F":"[","53":"<NUM>", "54":"/", "55":"*", "56":"-", "57":"+","58":"<ENTER>", "59":"1", "5a":"2", "5b":"3", "5c":"4","5d":"5", "5e":"6", "5f":"7", "60":"8", "61":"9"}
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":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\\t","2c":"<SPACE>",
          "2d":"_","2e":"+","2f":"{","30":"}","31":"|","32":"<NON>","33":"\\"",
          "34":":","35":"<GA>","36":"<","37":">","38":"?","39":"<CAP>","3a":"<F1>",
          "3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>",
          "41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
output = []
keys = open('usbdata.txt')
for line in keys:
    try:
        if line[0]!='0' or (line[1]!='0' and line[1]!='2') or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0' or line[6:8]=="00":
             continue
        if line[6:8] in normalKeys.keys():
            output += [[normalKeys[line[6:8]]],[shiftKeys[line[6:8]]]][line[1]=='2']
        else:
            output += ['[unknown]']
    except:
        pass

keys.close()

flag=0
print("".join(output))
for i in range(len(output)):
    try:
        a=output.index('<DEL>')
        del output[a]
        del output[a-1]
    except:
        pass

for i in range(len(output)):
    try:
        if output[i]=="<CAP>":
            flag+=1
            output.pop(i)
            if flag==2:
                flag=0
        if flag!=0:
            output[i]=output[i].upper()
    except:
        pass

print ('output :' + "".join(output))
*/<NUM>74156/52<NUM>741/95389*/<NUM>74123<NUM>74123698/52<NUM>741/953*96321478/74274123698<NUM>741563123745963217412369874123691239874123/741963574153+<ENTER>123*/<NUM>789632189*/<NUM>7412389*/<NUM>74123123<NUM>741/89*-+<ENTER>74596321123<NUM>741953<NUM>/*978632174596321<NUM>7412369874123698/7419635<NUM>741/953*96321478/96

Based on the keyboard scancode table, the extracted key codes correspond to a numeric keypad.

Untitled

*/<NUM>74156:f
/52:i
<NUM>741/953:r
89*/<NUM>74123:e
<NUM>74123698:b
*96321478:d
/742:{
74123698:0 or o
<NUM>741563:h
123:_
74596321:y
7412369:u
9874123:c
/962:}
123:_
/7419635:a
*/<NUM>7896321:s
74153+<ENTER>:n
<NUM>741953:k
<NUM>/*9786321:3
<NUM>741/89*-+<ENTER>:m

By mapping the key presses according to the scancode table, you can draw a representation of the keyboard and determine the flag.

firebird{oh_y0u_can_see_my_k3yb0ard}