Teclado USB numa captura
Um teclado USB manda cada tecla em 8 bytes, e uma captura do barramento USB mostra tudo o que foi digitado.
O Wireshark não captura só rede. No Linux, o módulo usbmon grava o tráfego do barramento USB, e o arquivo .pcapng resultante abre no Wireshark como qualquer captura. Um teclado é um dispositivo HID (Human Interface Device): de tempos em tempos o computador pergunta "alguma tecla?", e o teclado responde numa transferência do tipo interrupt (é daí que vem a ideia de "mapear as interrupções").
No modo mais simples (boot protocol), cada resposta tem 8 bytes:
| Byte | Conteúdo |
|---|---|
| 0 | modificadores, um bit por tecla: 01 Ctrl esq., 02 Shift esq., 04 Alt esq., 20 Shift dir. |
| 1 | reservado (sempre 0) |
| 2 a 7 | até 6 teclas apertadas ao mesmo tempo, pelo código da tabela HID |
Na tabela HID, 04 é a e vai até 1d = z; 1e a 27 são 1 a 0; 28 é Enter, 2a Backspace, 2c espaço. Um relatório só de zeros é a tecla sendo solta. Para listar no terminal:
tshark -r captura.pcapng -Y 'usb.transfer_type == 0x01 && usb.endpoint_address.direction == 1 && usbhid.data' -T fields -e usbhid.data
Para traduzir, conte só as teclas novas em cada relatório (quem digita rápido aperta a próxima antes de soltar a anterior) e aplique o Shift. Em Python, o essencial é um dicionário: {0x04: "a", 0x05: "b", ...} e ch.upper() quando mod & 0x22. A tabela completa está na especificação HID Usage Tables (abre em nova aba), seção Keyboard/Keypad.