【发布时间】:2010-10-28 21:46:02
【问题描述】:
大家好!
在深入 Google 数小时后,我终于来到了这里。我会直截了当:我即将“刷新”我的 C/C++ 技能并再次获得与非托管世界的经验。作为一项“基本”任务,我开发了一个小键盘记录器(仅包含 Windows API 的几行代码),但现在我想使用“隐形”功能对其进行扩展。因此,我将代码放入 Win32 DLL it's content you find here。您会注意到,其中有一个非常有问题的部分:
MSG msg;
BOOL bRet;
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
return FALSE;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
是的,这是一个普通的消息循环 - 在我的情况下会造成麻烦。我将此 DLL 注入“受害者”可执行文件(例如 VLC 媒体播放器)以欺骗 AV/应用程序防火墙,并且到目前为止它工作正常,注入本身完美地通过。现在来了大但是:当然,无休止的while循环现在冻结了整个目标应用程序(没有它,我的钩子回调永远不会被执行)这并不是真正的计划......在潜入MSDN库的一半并尝试了一个谷歌给了我很多“解决方案”;我放弃了。
是否有可能评估“受害者”进程的消息循环而不阻塞它自己的业务但提供我的键盘挂钩回调工作?
此致, 奈法瑞斯
【问题讨论】:
-
这样做会针对所有目标还是仅针对 VLC?
-
我收到“未知的粘贴 ID,它可能已过期或已被删除!”尝试查看 pastebin 代码时。
-
刚刚尝试使用 PuTTY、Thunderbird、无法注入 Windows 计算器、WinRAR 也崩溃、Notepad++ 崩溃……但它们都记录到指定文件,直到我用进程/任务杀死它们-经理。
-
对不起,我的错。我更正了 pastebin 链接。
-
“将代码注入另一个进程的三种方法”codeproject.com/KB/threads/winspy.aspx
标签: c++ c dll winapi code-injection