我是否需要调整令牌权限才能成功调用CreateRemoteThread?

我正在为我的应用程序开发一个debugging工具来帮助我诊断死锁。 该应用程序运行在我的客户端机器上,因此我期望有广泛的操作系统,安全策略等。

我正在使用的技术是在目标应用程序中实现一个函数,该函数为所有线程生成堆栈跟踪以及其他诊断信息。 然后将其写入内存映射文件。 我还创build了一个实用程序应用程序,用于触发创build诊断报告,然后从内存映射文件中读取它。

由于目标应用程序预计会死机,因此实用程序无法发送消息来触发诊断收集。 相反,我正在使用CreateRemoteThread以便我可以确保获得一个活动的线程来完成这项工作。

请注意,这与通常使用LoadLibrary作为CreateRemoteThread的线程处理程序的DLL注入方法不同。 我的线程proc是目标应用程序的入口点。 所以,我不需要调用WriteProcessMemory

我已经实现了这一点,并在我的testing环境中运行良好。 根据CreateRemoteThread的文档,我需要一个具有以下访问权限的进程句柄:

PROCESS_CREATE_THREADPROCESS_QUERY_INFORMATIONPROCESS_VM_OPERATIONPROCESS_VM_WRITEPROCESS_VM_READ

所以,当我调用OpenProcess时,我传递了这些标志。

现在,最后,对于我的问题:为了使OpenProcess调用成功,我需要哪些权限?

在我的testing环境(Windows 7,启用UAC,pipe理员用户),我只遇到一个默认的令牌没有遇到任何问题。 在调用OpenProcess之前,我已经看到了获取SE_DEBUG_NAME特权的各种示例代码。 我的猜测是,进行DLL注入时需要WriteProcessMemory ,而且我不需要这个权限。 是否有情况需要调整我的令牌的特权?

我对Windows的安全性一无所知,所以我真的很感激任何人的智慧!

通常,如果目标进程在与调试器相同的上下文环境(即,以同一用户)运行,则OpenProcess或CreateRemoteThread不需要任何权限。

如果目标进程以其他用户身份运行,或者进程权限已被修改,则可能需要在调用OpenProcess之前启用SE_DEBUG_NAME。 此特权允许您打开任何进程,绕过分配给进程的安全权限。 (这与备份/恢复权限允许您绕过文件和目录的安全权限的方式类似。)

有些应用程序会修改自己的进程权限,例如,用户不能使用任务管理器来终止进程。 在这种情况下,这是你自己的代码,所以这不会是一个问题。 原则上可以使用其他软件(例如防病毒软件)修改您的进程的权限,但是我从来没有听说过这种情况,所以您可能不需要担心启用SE_DEBUG_NAME。