dll只向某些进程注入
dll injects only to some processes
我一直在尝试制作简单游戏的训练器,所以我制作了dll(我知道我可以用exe来做,但仍然想用dll),所以我做了非常简单的DllMain:
#include "main.h"
#include <iostream>
#include <Windows.h>
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved) {
if (dwReason == DLL_PROCESS_ATTACH) {
AllocConsole();
freopen("CONOUT$", "w", stdout);
std::cout << "DDDD";
FreeConsole();
}
else if (dwReason == DLL_PROCESS_DETACH) {
return 0;
}
return TRUE;
}
我使用了3种不同的注射器,所有的注射器似乎都只注射到少数过程中(如4/5),而不为其他人工作。有什么想法吗?
您应该检查使用的注入方法失败的原因(例如,whcih API调用返回错误)。注入可能会失败,因为注入器进程对目标进程没有足够的权限。然而,DLL注入方法可能有其他限制:
-
通过Windows Hooks的注入仅在与注入器运行在同一桌面上的进程上生效。此外,DLL是由惰性算法注入的——只有在进程需要的情况下(如果使用WH_GETMESSAGE钩子,则目标进程在收到消息之前不会注入)。AFAIR您还需要一个32位的注入器和DLL来注入32位进程,以及64位的注入器和DLL注入64位进程。
-
只有当目标线程进入能够处理挂起的APC的状态时,才能通过用户APC进行注入。并非所有线程都这样做。
-
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows注册表项下的AppInit_DLL值允许您将DLL注入所有同时加载user32.DLL的进程。如果启用了安全引导,此方法似乎在Windos 8及更高版本上根本不起作用。也可以以只加载签名DLL的方式配置系统。
-
在Vista及更高版本上,如果我没记错的话,CreateRemoteThread方法可能会遇到跨越会话边界的问题(RtlCreateUserThread应该可以解决这个问题)。然而,当您开始在某些进程的地址空间内创建用户线程时,它们可能会非常不愉快(意味着它们挂起或崩溃)。
此外,游戏保护软件可能会阻止您的注射尝试。
所以,你的问题有很多可能的原因。您应该告诉我们您尝试了哪些注入方法,结果如何,以及注入器进程是否以管理权限运行。
确保您没有将32位DLL注入64位进程,反之亦然,这是行不通的。
- Windows 将标准的 C 文件结构注入到正在运行的进程中
- 读取进程内存多级指针(DLL 注入)
- 当我将 DLL 注入现有进程时,DLLMain 不执行任何操作
- 如何获取 dll 注入到的进程的名称
- 如何使用 std::in 和 getline() 检测后台进程中从 bash 注入的输入
- 使用参数调用远程进程中的函数(注入的 DLL)
- 是否可以注入一个进程并获取给定的句柄,然后使用它们注入另一个进程
- 从注入进程的 DLL 调用函数并更改指针函数的地址
- Dll 注入 - 在另一个进程中编写本机代码
- 注入的DLL主循环使进程崩溃
- 将x86代码注入x64进程
- 如何将dll注入另一个进程
- 将托管 dll 注入本机进程
- 是否可以从外部进程注入和执行应用程序
- 如何执行注入到进程中的应用程序
- 检测窗口上的进程内存注入(反黑客)
- 进程执行前的 DLL 注入
- 从运行的进程注入DLL后弹出
- 向远程进程注入DLL并显示信息
- dll只向某些进程注入