0

我在 Delphi 中使用 VirtualAllocEx 在外部进程中保留内存,如下所示:

var
 p : pointer;
begin
 p := VirtualAllocEx(Process, nil, SizeOf(Integer), MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
end;

ProcessHandle 之前已经打开PROCESS_ALL_ACCESS过。

之后,我的程序将一个简单的整数值写入分配的地址,如下所示:

WriteProcessMemory(Process, p, @MyInteger, SizeOf(Integer), BytesWritten);

由于地址存储在p- 我可以保存地址以将其用于另一个应用程序。另一个应用程序必须再次打开外部进程才能访问/写入外部进程中的地址。

我现在的问题是:谁/什么可以在外国进程中读/写这个地址?

每个进程都允许写吗?每个进程都允许读取吗?只有具有管理员权限的进程才有读/写权限吗?

感谢您的回答。

4

3 回答 3

3

任何拥有授予读写访问权限的进程句柄的人都可以读取或写入内存。请参阅: PROCESS_VM_READPROCESS_VM_WRITE。因此,最终,这取决于您如何获得进程的句柄以及该进程的 DACL。

如果您创建了进程或启用了 SeDebugPrivilege,您通常可以获得所有访问权限。当您调用 时OpenProcess,您必须指定您想要的访问类型,它会根据进程的安全描述符检查该请求。

于 2012-10-31T20:31:42.363 回答
2

如果没记错的话,Windows 会将其归类为调试。

无论如何,您都可以调试自己的进程。

如果您被授予(并启用),您可以调试其他用户的进程SeDebugPrivilege

请注意,将 SeDebugPrivilege 授予帐户基本上也使该帐户成为管理员帐户- 即,如果已授予 SeDebugPrivilege,则使用该帐户的人基本上可以做他们想做的任何事情,并为他们自己选择任何其他权限。Ergo:除非您真的需要,否则不要授予它(除非您正在做诸如调试系统服务进程之类的事情,否则您可能不会这样做)。

于 2012-10-31T20:16:33.810 回答
1

默认情况下,任何具有兼容完整性级别的东西都可以使用ReadProcessMemoryWriteProcessMemory。这意味着完整性级别大于或等于目标进程的完整性级别。

于 2012-10-31T20:15:18.720 回答