【问题标题】:Differentiating between password and other kind of keyboard inputs in a keylogger区分键盘记录器中的密码和其他类型的键盘输入
【发布时间】:2017-07-05 15:16:56
【问题描述】:

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

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

【问题讨论】:

  • 显示一个带有复选框的窗口。用户输入密码时必须检查。
  • 我正在编写一个键盘记录器,因此用户甚至不会知道他的键盘输入已被记录
  • @AmirQasemi manni66 的评论显然是在开玩笑。
  • 您知道这是一个密码,因为重点是密码输入控件。你如何确定这取决于你,但从密码管理员出错的频率来看,我会说这并不容易。

标签: c++ winapi keylogger


【解决方案1】:

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

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

但是,如果前台应用程序没有使用标准 Win32 UI 控件,和/或自定义绘制它们等,那么所有的赌注都没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多