6

The CryptProtectMemory API in the DPAPI allows you to pass the CRYPTPROTECTMEMORY_SAME_PROCESS flag, which prevents other processes from decrypting the memory. One way around this would be to use OpenProcess, WriteProcessMemory, and CreateRemoteThread to inject code into the target process and have it call CryptUnprotectMemory, thus decrypting the memory and leaking it to the other process.

Assuming both processes are running under the context of the same limited privilege user (i.e. not an administrator) on Windows Vista or later, is this still possible? I was under the impression that process memory write operations were denied to limited users, regardless of the process ACL, but I may be wrong.

4

2 回答 2

2

Windows 尊重进程 ACL,默认情况下,这允许访问正在运行进程的用户以及本地系统帐户和用户的登录会话 SID。管理员可以使用 SeDebugPrivilege 绕过此 ACL。

否则,您需要成为管理员才能调试自己的代码。

您可以更改进程 ACL,但由于通常(IIRC)当前用户是进程所有者,我不确定您是否可以阻止当前用户上下文中的另一个进程将其更改回来。此外,由于这些进程很可能在同一个桌面上运行,因此无论如何您都会受到粉碎攻击

于 2013-01-28T00:55:21.217 回答
2

您没有描述需要使用代码注入的确切场景。如果在没有管理权限的情况下运行的操作进程创建另一个关于CreateProcess的进程,例如,一个拥有所有权限的新进程的句柄(PROCESS_ALL_ACCESSPROCESS_INFORMATION 。例如,您可以在此处阅读以下内容hProcess

CreateProcess函数 返回的句柄具有对进程对象的PROCESS_ALL_ACCESS访问权限。

因此,应该只保留从返回的处理程序CreateProcess并且在您需要完全访问子进程之前不要关闭它。这样,您将拥有调用CreateRemoteThreadWriteProcessMemory所需的 PROCESS_CREATE_THREAD、PROCESS_QUERY_INFORMATION、PROCESS_VM_OPERATION、PROCESS_VM_WRITE 和 PROCESS_VM_READ 访问权限。

所以你的问题的答案是:“是的,在一些额外的条件下是可能的”。

于 2013-02-02T10:44:57.373 回答