【问题标题】:GetAsyncKeyState does not work at system startupGetAsyncKeyState 在系统启动时不起作用
【发布时间】:2013-11-02 14:57:48
【问题描述】:

今天我正在构建简单的键盘记录应用程序(不不不 - 不是你想的......)。我正在使用 GetAsyncKeyState(我知道我应该使用 SetWindowsHookEx,但是没有很多好的教程 - 而且我在 WinApi 中很烂),并且在自动启动时启动我的程序有问题。我将它添加到正确的注册表中,一切正常(程序在启动时启动),但 GetAsyncKeyState 无法读取任何密钥(如果我手动启动它就可以工作)。缩短代码:

HWND Stealth;
if(!AllocConsole()){
    Sleep(1000*5); 
}
while((Stealth = FindWindowA("ConsoleWindowClass", NULL))==NULL){
    Sleep(1000*5);
}
//ShowWindow(Stealth,0);
char i;
while (keylogger->working){
    for(i = 8; i <= 190; i++){
        if (GetAsyncKeyState(i) == -32767){
                         cout << i << endl; // No output here

}}}

为什么会存在这种行为,如何避免?是否与在 windows 启动的早期阶段分配控制台有关?

【问题讨论】:

  • 您没有告诉我们您是如何启动您的恶意软件程序
  • 从 Windows 资源管理器中正常双击。
  • 我很困惑。首先你说你正在使用自动启动。现在你说你从资源管理器开始。是哪个?
  • 我了解到您在问我如何以正常方式启动它 - 但如果它用于自动启动,我只需重新启动计算机 - 就像我认为我应该测试它在自动启动中的工作方式:)跨度>
  • 我不知道你在说什么

标签: winapi registry windows-7-x64


【解决方案1】:

GetAsyncKeyState() 仅适用于调用进程的键盘状态。如果您的意图是捕获其他进程中的击键,则需要使用 SetWindowsHookEx() 代替,并且您的挂钩必须实现为 DLL,以便可以将其注入其他进程。

【讨论】:

  • 这不意味着这根本不应该工作吗?如果从 Windows 资源管理器手动启动它实际上可以工作 - 当它与 Windows 一起启动时它会停止工作(通过自动启动)
猜你喜欢
  • 2020-05-20
  • 2018-05-14
  • 1970-01-01
  • 2016-05-26
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
相关资源
最近更新 更多