在哪里可以找到不同键盘布局的十六进制键盘扫描码列表?
我通过bash命令echo -ne
在(假)USB HID键盘上发送密钥代码,然后是转义的十六进制密钥扫描代码和HID设备:
echo -ne "\x00\x00\x00\x38\x00\x00\x00\x00" > /dev/hidg0
echo -ne "\x00\x00\x00\x00\x00\x00\x00\x00" > /dev/hidg0
表示美国键盘布局上的斜杠(/
)。
在键盘布局(CH)上,它是
echo -ne "\x00\x00\x00\x24\x00\x00\x00\x00" > /dev/hidg0
echo -ne "\x00\x00\x00\x00\x00\x00\x00\x00" > /dev/hidg0
斜线。所以我想必须存在所有这些的列表。 然而,我能够找到US layout的列表,但不能找到任何其他键盘布局的列表。
我知道第二行会停止键的输入,但我不太了解这些转义序列的语法。我知道,如果我将第一个\x00
更改为x02
,它将会转移"输入的密钥。但为什么还有6种改性剂?它们代表ctrl
,alt
,......?哪个代表哪个?
这种语法的文档非常酷。我还没能找到一个。
(我在Nexus 7 2012上使用Kali Nethunter)
答案 0 :(得分:35)
“扫描代码”(它们实际上是使用代码的索引)发布在usb.org上的第10章“键盘/键盘页面(0x07)”中的USB HID Usage Tables规范中。典型的键盘报告布局可以在附录B“引导接口描述符”的“{3}}”的“B.1协议1(键盘)”部分中找到。
将键盘报告格式描述为:
Byte 0: Keyboard modifier bits (SHIFT, ALT, CTRL etc)
Byte 1: reserved
Byte 2-7: Up to six keyboard usage indexes representing the keys that are
currently "pressed".
Order is not important, a key is either pressed (present in the
buffer) or not pressed.
请注意,USB规范未定义键盘布局。它只列出分配给特定键功能的使用代码。例如,字母“a”是使用代码0x04。如果你想要一个大写的“A”,那么你还需要设置Byte 0修饰符位来选择“Left Shift”(或“Right Shift”)。
报告缓冲区的确切格式取决于键盘插入USB端口时发送到主机的报告描述符,因此上面只是一个(非常典型的)示例。