好吧,标题总结了我的问题,但我会详细说明。我一直认为任何没有管理员权限运行的进程都不应该能够访问任何其他进程的内存空间,当然也不应该能够停止它的执行。
但是,使用在非特权帐户下运行的 Visual Studio,我可以附加到在同一帐户下运行的某些进程并对其进行调试。为什么这可能?操作系统不应该阻止这种情况吗?
在此先感谢和欢呼
好吧,标题总结了我的问题,但我会详细说明。我一直认为任何没有管理员权限运行的进程都不应该能够访问任何其他进程的内存空间,当然也不应该能够停止它的执行。
但是,使用在非特权帐户下运行的 Visual Studio,我可以附加到在同一帐户下运行的某些进程并对其进行调试。为什么这可能?操作系统不应该阻止这种情况吗?
在此先感谢和欢呼
为了访问任何其他进程的内存空间,我们需要使用PROCESS_VM_READ|PROCESS_VM_OPERATION|PROCESS_VM_WRITE
.. 打开进程,因为这不是强制性的需要SE_DEBUG_PRIVILEGE
- 如果进程在与调试器相同的会话中运行,则具有相同的令牌 - 通常它是安全描述符 ( DACL
) 让我们为此调试器打开它。这是完全可以预料的。所以这里的问题 - 我们可以打开具有完全访问权限的进程进行调试吗?如果这个“对等”进程(在同一用户下运行,具有相同权限)- 为什么不呢?
并来自DebugActiveProcess函数
调试器必须对目标进程具有适当的访问权限,并且它必须能够为PROCESS_ALL_ACCESS 打开进程。 如果目标进程是使用授予调试器不完全访问权限的任何内容的安全描述符创建的,则DebugActiveProcess可能会失败。如果调试进程授予并启用了SE_DEBUG_NAME权限,则它可以调试任何进程。
并从你自己的评论 - 除了受保护的进程,如果只有你的调试器在调用 DebugActiveProcess时也受保护的进程(具有不少于保护级别)(是的,这也可以调试受保护的进程)