Linux键盘事件捕获/dev/inputX

问题描述 投票:0回答:7

我试图捕获键盘事件。 例如我想从头开始深入研究键盘记录程序。 经过2个小时的战斗,我发现了以下内容

neel@pc1$ ls -l /dev/input/by-id
lrwxrwxrwx 1 root root 9 2010-05-05 21:33 usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-event-kbd -> ../event1
lrwxrwxrwx 1 root root 9 2010-05-05 21:33 usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-event-mouse -> ../event2
lrwxrwxrwx 1 root root 9 2010-05-05 21:33 usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-mouse -> ../mouse1

但是当我尝试

neel@pc1$ sudo cat /dev/input/usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-event-kbd

它什么也没产生 没有输出

经过更多搜索后,现在我想可能是 Xorg 中的某些东西阻止了它。

还有更多信息吗? 并在最后说我如何从该文件读取输入? 或者还有其他捕获键盘事件的方法吗??

linux linux-kernel linux-device-driver
7个回答
15
投票

你好,

我最近正在尝试完成类似的事情。

看看 logkeys 项目:

http://code.google.com/p/logkeys/

如果您下载源代码,并查看 logkeys.cc 文件,您将找到一种方法来自动检测键盘使用哪个 /dev/input/event。这将允许您从键盘读取原始扫描代码,无论当前哪个程序具有焦点。 logkeys 程序还展示了如何将扫描码转换为字符,以及其他有用的技巧。

希望这有帮助,

马库斯。


15
投票

/proc/bus/input/devices
文件进行简单的 grep 操作将产生插入机器的所有键盘:

 grep -E  'Handlers|EV=' /proc/bus/input/devices | \
 grep -B1 'EV=120013' | \
 grep -Eo 'event[0-9]+'

其中

EV=120013
是设备支持的事件的位掩码。正如这里所解释的。

这是在logkeys

中实现的方式

10
投票

您正在读取错误的设备。尝试所有 /dev/input/event* 或在 /var/log/Xorg.0.log 中查找用于键盘的设备。


10
投票

我建议使用 evtest 应用程序,它列出了所有输入设备并允许您监视它们的事件。


5
投票

感谢您提供有关

ls -l /dev/input/by-id
的线索,这对我很有帮助!.

defenderdz@defenderdz-pc:~$ ls -l /dev/input/by-id | grep kbd
lrwxrwxrwx 1 root root  9 nov.  28 14:04 usb-Logitech_USB_Receiver-event-kbd -> ../event7
lrwxrwxrwx 1 root root 10 nov.  29 00:33 usb-NOVATEK_USB_Keyboard-event-kbd -> ../event26
lrwxrwxrwx 1 root root  9 nov.  28 14:04 usb-SONiX_USB_DEVICE-event-kbd -> ../event3
defenderdz@defenderdz-pc:~$ 

'kbd' 是用于键盘设备的后缀(我连接了 3 个键盘)。

您的错误是您访问了错误的文件夹

/dev/input/
而不是
/dev/input/by-id

在我的示例中,正确的路径是:

defenderdz@defenderdz-pc:~$ sudo cat /dev/input/by-id/usb-NOVATEK_USB_Keyboard-event-kbd
���]�I���]�I���]�Ia���]�b���]�b���]�b���]�����]�����]��s���]����]����]����]�>
���]�>
 ���]�>
d���]�8
       ���]�8
              ���]�8
                    ���]�����]�����]��s���]H|���]H|���]H|���]�����]�� ���]��d���]Ǵ���]Ǵ ���]Ǵ

就你而言

neel@pc1$ sudo cat /dev/input/by-id/usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-event-kbd

我并不是说这是最好的解决方案,但它对我来说效果很好。 您甚至可以通过解析 ls 结果来创建键盘的自动检测...


0
投票

对于来这里寻找调试键盘问题的方法的人:尝试使用终端命令

xev
。它显示您的外围设备(键盘和鼠标)发出的所有输入事件。也可能对构建键盘记录器有用。


0
投票

我写了一篇关于如何使用 Vanilla Python 完成此任务的博客文章,其中还包括使用 Pynput 的线程版本。

这篇文章将教您如何解压结构体,以有状态的方式解析键盘输入,并将它们保存到磁盘(包括退格逻辑)。

这是我的红队食谱博客的一部分。在这里查看:https://github.com/0x00wolf/red-team-cookbook/tree/main/Arsenal/Linux-Keyloggers

© www.soinside.com 2019 - 2024. All rights reserved.