内存编辑器如何(以及为什么?)工作
How (and why?) do memory editors work
Cheat Engine 等内存编辑器能够读取其他进程的内存并进行修改。
他们是怎么做到的?(代码片段会很有趣!)一个进程通常没有能力访问另一个进程的内存,我听说过的唯一情况是 sub-processes/threading,但内存编辑器通常与目标进程没有任何关系。
它们为什么起作用?除了使用它来破解其他进程之外,这种能力在什么情况下有用,为什么操作系统不简单地禁止不相关的进程相互读取内存?
在 Windows,通常用于更改另一个进程的内存的函数称为 WriteProcessMemory:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms681674(v=vs.85).aspx
如果您在 Cheat Engine source code 中搜索 WriteProcessMemory,您可以在他们的 Pascal 代码和 C 内核代码中找到它。它需要 PROCESS_VM_WRITE 和 PROCESS_VM_OPERATION 访问进程,这基本上意味着您需要 运行 作弊引擎作为管理员。
WriteProcessMemory 可用于您想要更改另一个进程的 运行time 行为的任何时候。有合法用途,例如 Cheat Engine 或 ModOrganizer,当然还有很多非法用途。值得一提的是,防病毒软件通常经过训练可以查找此 API 调用(以及其他调用),因此除非您的应用程序已被列入白名单,否则它可能会因此被标记。
操作系统通常公开系统调用,允许用户空间程序使用所述系统调用检查目标进程的内存。
例如,linux内核支持ptrace
系统调用。此系统调用主要由众所周知的调试器 gdb
和流行的系统调用跟踪实用程序使用,例如 strace
.
ptrace 系统调用允许检查目标进程的内存内容、代码注入、寄存器操作等等。如果您有兴趣了解更多信息,我建议将 this 作为资源。
在 Linux 上,您可以从 gdb 中 运行 一个二进制文件,或者附加到一个进程。对于后者,您需要提升权限。还有其他保护措施试图限制您可以使用 ptrace 执行的操作,例如提到的 here.
在Windows上,您可以按顺序使用以下函数实现相同的效果:OpenProcess、GetProcAddress、VirtualAllocEx、WriteProcessMemory 和CreateRemoteThread。如果您有兴趣了解更多信息,我建议将 this 作为资源。您可能需要提升权限才能在较新的 Windows 版本上执行此操作。
Cheat Engine 等内存编辑器能够读取其他进程的内存并进行修改。
他们是怎么做到的?(代码片段会很有趣!)一个进程通常没有能力访问另一个进程的内存,我听说过的唯一情况是 sub-processes/threading,但内存编辑器通常与目标进程没有任何关系。
它们为什么起作用?除了使用它来破解其他进程之外,这种能力在什么情况下有用,为什么操作系统不简单地禁止不相关的进程相互读取内存?
在 Windows,通常用于更改另一个进程的内存的函数称为 WriteProcessMemory:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms681674(v=vs.85).aspx
如果您在 Cheat Engine source code 中搜索 WriteProcessMemory,您可以在他们的 Pascal 代码和 C 内核代码中找到它。它需要 PROCESS_VM_WRITE 和 PROCESS_VM_OPERATION 访问进程,这基本上意味着您需要 运行 作弊引擎作为管理员。
WriteProcessMemory 可用于您想要更改另一个进程的 运行time 行为的任何时候。有合法用途,例如 Cheat Engine 或 ModOrganizer,当然还有很多非法用途。值得一提的是,防病毒软件通常经过训练可以查找此 API 调用(以及其他调用),因此除非您的应用程序已被列入白名单,否则它可能会因此被标记。
操作系统通常公开系统调用,允许用户空间程序使用所述系统调用检查目标进程的内存。
例如,linux内核支持ptrace
系统调用。此系统调用主要由众所周知的调试器 gdb
和流行的系统调用跟踪实用程序使用,例如 strace
.
ptrace 系统调用允许检查目标进程的内存内容、代码注入、寄存器操作等等。如果您有兴趣了解更多信息,我建议将 this 作为资源。
在 Linux 上,您可以从 gdb 中 运行 一个二进制文件,或者附加到一个进程。对于后者,您需要提升权限。还有其他保护措施试图限制您可以使用 ptrace 执行的操作,例如提到的 here.
在Windows上,您可以按顺序使用以下函数实现相同的效果:OpenProcess、GetProcAddress、VirtualAllocEx、WriteProcessMemory 和CreateRemoteThread。如果您有兴趣了解更多信息,我建议将 this 作为资源。您可能需要提升权限才能在较新的 Windows 版本上执行此操作。