V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aiqier
V2EX  ›  程序员

为什么游戏修改器能修改其它程序的内存?

  •  
  •   aiqier · 2020-09-26 16:49:45 +08:00 · 3168 次点击
    这是一个创建于 1301 天前的主题,其中的信息可能已经有所发展或是发生改变。

    操作系统不是使用虚拟地址空间管理每个进程的内存,每个进程的内存空间是独立的,其它进程访问不到的么,那为啥可以写游戏修改器,修改游戏程序的内存变量。

    12 条回复    2020-09-27 10:01:57 +08:00
    kernelpanic
        2
    kernelpanic  
       2020-09-26 17:04:27 +08:00
    操作系统提供了 API 呗...
    lin07hui
        3
    lin07hui  
       2020-09-26 17:08:35 +08:00
    不是修改程序内存变量,是直接改写内存的内容(就像改硬盘内容)。
    找个制作游戏修改器教程看一下,或用一下这个 Cheat Engine 软件,就明了。
    nightwitch
        4
    nightwitch  
       2020-09-26 17:10:08 +08:00   ❤️ 1
    操作系统提供支持啊,不然调试器怎么去看进程的变量。
    Linux 下去查
    pread
    pwrite

    Windows 下查
    OpenProcess
    ReadProcessMemory
    WriteProcessMemory
    Huelse
        5
    Huelse  
       2020-09-26 17:42:22 +08:00
    肯定是系统提供了支持呀,想想 VS 里的堆栈内存追踪,你又没往你程序里写这些,总不至于编译器自动给你加进去吧
    reus
        6
    reus  
       2020-09-26 17:46:03 +08:00
    操作系统除了有隔离,也能让其他进程访问进程内存,例如调试器就是独立的进程
    thedrwu
        7
    thedrwu  
       2020-09-26 17:55:07 +08:00
    有权限可以直接读写,Read/WriteProcessMemory 。
    或者 DLL 直接挂到别的进程。
    Nitroethane
        8
    Nitroethane  
       2020-09-26 18:06:50 +08:00 via iPhone   ❤️ 1
    @nightwitch Linux 下是 ptrace 系统调用,不是 pread
    crclz
        9
    crclz  
       2020-09-26 18:09:17 +08:00   ❤️ 1
    分 2 种,一种 External,另一种 Internal 。
    External 的,使用 WindowsAPI OpenProcess ReadProcessMemory WriteProcessMemory 来操作内存。
    Internal 的,通过 dll 注入,直接附着到目标进程,就像在自己家里面一样,例如可以直接`player->health = 5000;`
    codehz
        10
    codehz  
       2020-09-26 18:25:06 +08:00 via Android
    @nightwitch pread pwrite 不是你想象的那个 p,直接读写应该是 /proc/xxx/mem,间接的可以 ptrace 进去读写
    virusdefender
        11
    virusdefender  
       2020-09-26 18:33:10 +08:00
    你可以理解为 gdb 一样的东西
    mazhan465
        12
    mazhan465  
       2020-09-27 10:01:57 +08:00
    除了直接读写指定进程内存,也可以通过替换动态链接库的方式 hook 进程,不过权限要求比较高
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3149 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:53 · PVG 18:53 · LAX 03:53 · JFK 06:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.