0

诸如 Cheat Engine 之类的内存编辑器能够读取其他进程的内存并对其进行修改。

他们是怎么做到的?(代码片段会很有趣!)一个进程通常没有能力访问另一个进程的内存,我听说的唯一情况是在子进程/线程中,但是在内存中编辑器通常与目标进程没有任何关系。

他们为什么工作?除了使用它来破解其他进程之外,这种能力在什么情况下有用,为什么操作系统不简单地禁止不相关的进程读取彼此的内存?

4

2 回答 2

2

在 Windows 上,通常用于更改另一个进程的内存的函数称为 WriteProcessMemory:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms681674(v=vs.85).aspx

如果您在作弊引擎源代码中搜索 WriteProcessMemory,您可以在他们的 Pascal 代码和 C 内核代码中找到它。它需要 PROCESS_VM_WRITE 和 PROCESS_VM_OPERATION 访问进程,这基本上意味着您需要以管理员身份运行 Cheat Engine。

WriteProcessMemory 可在您想要更改另一个进程的运行时行为时使用。有合法用途,例如 Cheat Engine 或ModOrganizer,当然还有很多非法用途。值得一提的是,防病毒软件通常经过培训以查找此 API 调用(以及其他),因此除非您的应用程序已被列入白名单,否则它可能会因此而被标记。

于 2017-10-29T23:26:40.563 回答
2

操作系统通常公开系统调用,允许用户空间程序使用所述系统调用检查目标进程的内存。

例如,linux内核支持ptrace系统调用。此系统调用主要由众所周知的调试器gdb和流行的系统调用跟踪实用程序(例如strace.

ptrace 系统调用允许检查目标进程的内存内容、代码注入、寄存器操作等等。如果您有兴趣了解更多信息,我建议将此作为资源。

在 Linux 上,您可以在 gdb 中运行二进制文件,也可以附加到进程。在后者的情况下,您需要提升权限。还有其他保护措施试图限制您可以使用 ptrace 执行的操作,例如此处提到的保护措施。

在 Windows 上,您可以通过依次使用以下函数来实现相同的效果:OpenProcess、GetProcAddress、VirtualAllocEx、WriteProcessMemory 和 CreateRemoteThread。如果您有兴趣了解更多信息,我建议将此作为资源。您可能需要提升权限才能在较新的 Windows 版本上执行此操作。

于 2017-10-29T23:27:40.187 回答