内存编辑器如何(以及为什么?)工作

时间:2017-10-29 23:08:01

标签: memory-editing

Cheat Engine等内存编辑器能够读取其他进程的内存并进行修改。

他们是如何做到的?(代码片段会很有趣!)一个进程通常无法访问另一个进程的内存,我所听到的唯一情况是在子进程中/ threading,但内存编辑器通常与目标进程无关。

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

2 个答案:

答案 0 :(得分:2)

在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访问进程,这基本上意味着你需要以管理员身份运行Cheat Engine。

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

答案 1 :(得分:2)

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

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

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

在Linux上,您可以从gdb中运行二进制文件,也可以附加到进程。如果是后者,则需要提升权限。还有其他保护措施试图限制你可以用ptrace做什么,例如提到的here

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