【问题标题】:Basic key logging service fails to log keys in worker thread基本密钥记录服务无法在工作线程中记录密钥
【发布时间】:2016-05-04 22:49:49
【问题描述】:

最近我尝试从一个简单的键盘记录器开始尝试编程服务。原始代码非常粗糙,但是如果当前窗口处于焦点状态,它就可以工作。当我试图通过将记录器添加到服务来缓解此问题时,问题就开始了。但是,我想在不使用钩子的情况下记录密钥。这是工作线程:

    DWORD WINAPI ServiceWorkerThread(LPVOID lpParam){
    std::ofstream           File("Info.txt");
    char                    C = 0;
    // Periodically check if the service has been requested to stop
    while (WaitForSingleObject(g_ServiceStopEvent, 0) != WAIT_OBJECT_0){
        if(kbhit()){
            C = getch();
            File.open("Info.txt", std::fstream::out | std::fstream::app);
            File << C;
            File.close();
            Sleep(100);
            //The thread needs to sleep so that it won't eat CPU
            //Additionally people cannot type as fast as a computer can process data
        }
    }
    return ERROR_SUCCESS;
}

所有其他代码只是启动并处理服务。

【问题讨论】:

  • kbhitgetch 读取用户在程序的控制台窗口中键入的内容。作为一项服务,您的程序没有控制台窗口。
  • WaitForSingleObject(g_ServiceStopEvent, 0) != WAIT_OBJECT_0 对于可能只是测试线程安全布尔值的东西来说有点重量级。 while (not terminated)

标签: c++ multithreading logging service keylogger


【解决方案1】:

我想在不使用钩子的情况下记录密钥。

抱歉,但在服务中,您必须使用键盘挂钩,否则它无法检测到用户输入,因为它是在后台运行的非可视化进程。用户无需输入任何与服务直接相关的内容。

【讨论】:

  • 好的,谢谢,既然如此,我就只好屈服并使用钩子了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 2015-01-29
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
相关资源
最近更新 更多