【发布时间】: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