【问题标题】:How (and why?) do memory editors work内存编辑器如何(以及为什么?)工作
【发布时间】:2018-04-10 21:32:47
【问题描述】:

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

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

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

【问题讨论】:

  • 操作系统适用于管理员,而不是相反。
  • "A process does typically not have the ability to access the memory of another one" - 为什么不呢?您可以随时直接写入内存地址。 "Why do they work?" - 通过修改其他进程的运行时值和指令。例如,如果正在运行的游戏将您的“分数”存储在内存地址中,您可以修改该内存地址的值以更改您的“分数”。
  • 我学习操作系统已经有一段时间了,但如果我没记错的话,并不是所有的“真实”内存地址都隐藏在虚拟内存地址后面并试图从任何不在虚拟内存地址内导致段错误?
  • @David:实际上,不,您不能只写入另一个进程的内存。您的程序必须要求操作系统写入另一个进程的内存。操作系统可以做到,因为它负责。

标签: memory-editing


【解决方案1】:

在 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 调用(以及其他),因此除非您的应用程序已被列入白名单,否则它可能会因此而被标记。

【讨论】:

  • 典型的合法用途是调试器,它需要改变被调试进程的内存。
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-17
    • 2011-03-20
    • 1970-01-01
    • 2014-10-02
    • 2013-12-19
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    相关资源
    最近更新 更多