【发布时间】:2020-09-13 22:04:16
【问题描述】:
OpenProcess 不返回 NULL 并返回似乎是有效句柄的内容。我正在运行启用 SE_DEBUG_PRIVILEGE,因此访问级别应该没问题。有什么帮助吗?
void* processHandle = OpenProcess(PROCESS_ALL_ACCESS, false, processID);
printf("%p\n", processHandle);
void* DLLPATH = VirtualAllocEx(processHandle, 0, (strlen(dllPATH) + 2), MEM_COMMIT, PAGE_READWRITE);
printf("%p\n", DLLPATH);
这一切看起来都很好,但是 VirtualAllocEx 抛出了一个无效的句柄错误。有帮助的小伙伴吗?为响应干杯!
编辑:我调试了我正在研究的程序,发现它试图关闭我创建的类似于反作弊的句柄。这就是导致无效句柄错误的原因(据我所知)。
【问题讨论】:
-
当我尝试在 Windows 10 x64 v1903, build 18362.836 上运行此代码时,我无法复制此代码。我正在对一个没有设置任何奇怪保护的用户模式应用程序执行此操作。您能否分享更多关于您尝试执行此操作的进程的详细信息,以及是否可能涉及任何保护,例如防病毒或反作弊模块?
-
我正在尝试将 dll 注入一个名为 Razer Synapse Service.exe 的进程中,该进程可能对其具有某种保护,因为它在进程资源管理器中显示为红色并查看 dll 快照其中我必须以管理员身份运行 Process Explorer(顺便说一句,我以管理员身份运行注入器本身并启用了 SE_DEBUG_PRIVALEGE)。仍然没有运气。如果我不得不猜测它是某种驱动程序。但是一件奇怪的事情是,当我将文件复制到另一个位置(如桌面)时,我可以使用 x64dbg 进行调试并做一些事情。我猜它有某种保护它的签名。
-
我通常无法使用 x64dbg btw 进行调试。
-
首先,
PROCESS_ALL_ACCESS请求的权限太多。注入 DLL 不需要那么多权限。其次,您没有显示验证VirtualAllocEx()正在报告ERROR_INVALID_HANDLE的代码,您显示的代码中没有错误处理,那么您怎么知道它实际上是这样做的?据我们所知,printf()可能会在您检索错误代码之前对其进行重置。请提供minimal reproducible example 展示您的真实代码。 -
根据我的 Process Explorer 副本,浅红色仅表示它是 NT 服务。