【问题标题】:Hiding a console window for Keylogger in C++在 C++ 中隐藏键盘记录器的控制台窗口
【发布时间】:2019-02-20 11:31:30
【问题描述】:

谁能解释以下代码,该代码用于在 c++ 中进行 Keylogger 项目时隐藏控制台窗口

void hide();
int main()
{
    hide();
    MSG Msg; 

    //IO::MKDir(IO::GetOurPath(true));

    //InstallHook();

    while (GetMessage(&Msg, NULL, 0, 0)) 
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }

    //MailTimer.Stop();
    return 0;
}

void hide()
{
    HWND stealth; 
    AllocConsole();
    stealth = FindWindowA("ConsoleWindowClass", NULL);
    ShowWindow(stealth, 0);
}

【问题讨论】:

  • 一开始是为了什么AllocConsole();?为了什么需要控制台?在系统中的第二个可以是任意数量的控制台窗口。结果代码错误且完全不正确
  • 请说明您的最终目标是理解此代码还是实际隐藏窗口。如果是后者,那么最好的方法是根本不创建窗口。
  • 看懂代码
  • @madhurachanna 它使用AllocConsole 创建一个控制台窗口,它使用FindWindow 获取该窗口的句柄,利用控制台窗口类是"ConsoleWindowClass" 的事实,然后它使用ShowWindow 隐藏控制台窗口。
  • 使用main 而不是WinMain 的事实意味着该应用程序是一个控制台应用程序,因此已经有一个控制台窗口,因此AllocConsole() 是多余的。并且应该使用GetConsoleWindow() 而不是FindWindow()。如果屏幕上同时有多个控制台窗口,则不能保证FindWindow() 找到正确的窗口。

标签: c++ windows-console keylogger


【解决方案1】:

让我们把它分解成更小的部分:

void hide();
int main()
{
    hide();
    MSG Msg; 

    //IO::MKDir(IO::GetOurPath(true));

    //InstallHook();

   while (GetMessage(&Msg, NULL, 0, 0))
   {
       TranslateMessage(&Msg);
       DispatchMessage(&Msg);
   }

上面的循环就是所谓的message pump。由于 windows GUI 程序是事件驱动的such a loop is the pattern 为您的 windows 进程处理传入的 windows 消息。由于您的程序将收到WM_QUIT 消息,GetMessage() 将返回FALSE 并且循环将退出。 TranslateMessage() 只是在那里将虚拟键消息转换为字符消息,以便在需要时进一步处理管道。 DispatchMessage() 是为了确保发送到特定窗口的消息能够到达该窗口的 WindowProc callback

    //MailTimer.Stop();
    return 0;
}

void hide()
{
    HWND stealth; 
    AllocConsole();

上面的最后一行是allocating a new console for the process.。如果您的进程已经有一个控制台,则此调用将失败,以返回零表示。

    stealth = FindWindowA("ConsoleWindowClass", NULL);

FindWindowA() 所做的是将窗口句柄 (HWND) 返回到具有指定类名和窗口名的窗口。这里使用它,同时省略名称(第二个参数)并仅指定类,在这种情况下,控制台窗口只能存在一个窗口,其类是"ConsoleWindowClass"

    ShowWindow(stealth, 0);
}

All this line does 隐藏了由正在传递的句柄标识的窗口,这是我们的控制台窗口,正如我们在 sn-p 中已经知道的那样。在这种情况下,第二个参数0SW_HIDE 的枚举值,因此在此行之后,控制台窗口将被隐藏。

【讨论】:

  • 问题是简单的还是问题的框架不好?
  • @madhurachanna 好吧,人们不应该因为这个问题很简单简单而真正投反对票。也就是说,有些人不可避免地会这样做。但是,这一票数可能与您没有详细说明您要询问的内容有关。如果此答案为您解决了问题,那么也许您可以查看哪些确切部分起到了作用,然后根据该问题编辑您的问题以使其更加集中。
猜你喜欢
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2011-04-20
  • 2019-07-22
  • 2012-10-14
相关资源
最近更新 更多