区分键盘记录器中的密码和其他类型的键盘输入

Differentiating between password and other kind of keyboard inputs in a keylogger

本文关键字:键盘 其他 类型 输入 密码 记录器      更新时间:2023-10-16

我正在为Windows编写一个键盘记录器。我打算用GetAsyncKeyState(KEY)和一个隐藏的控制台来获取按下的键。确定按键后,我将使用 GetForegroundWindow 获取当前聚焦窗口,并确定按下按键时哪个程序位于顶部。我还希望能够区分密码的按键和其他类型的输入。有没有办法做到这一点?如何?

我不是在编写恶意软件。这是针对高级编程课程的作业。

如果前台应用使用标准 Win32 UI 控件,请尝试以下操作:

  • 使用GetForegroundWindow()获取前景窗口的HWND
  • 然后使用"GetWindowThreadProcessId()"和"GetGUIThreadInfo()"获取前景窗口当前聚焦的子控件。
  • 然后使用GetClassName()检查它是否是标准EDIT控件(在某些 UI 框架中,此检查可能会失败!可能需要使用 UI 自动化 API 来检测控件类型)
  • 然后使用GetWindowLong/Ptr()检查它是否应用了ES_PASSWORD样式。

但是,如果前台应用未使用标准 Win32 UI 控件,和/或自定义绘制它们等,则所有投注都将关闭。