金山游侠

金山游侠

2024 南京大学《操作系统:设计与实现》
金山游侠

Hacking Address Spaces

进程 (状态机) 在 “无情执行指令机器” 上执行

  • 状态机是一个封闭世界
  • 但如果允许一个进程对其他进程的地址空间有访问权
    • 意味着可以任意改变另一个程序的行为
      • 听起来就很 cool

一些 “入侵” 进程地址空间的例子

  • 调试器 (gdb)
    • gdb 可以任意观测和修改程序的状态
  • Profiler (perf)
    • M3 中借助它理解程序的性能瓶颈
2024 南京大学《操作系统:设计与实现》
金山游侠

物理入侵进程地址空间

金手指:直接物理劫持内存

  • 听起来很离谱,但 “卡带机” 时代的确可以做到!

center

  • 今天我们有 Debug Registers 和 Intel Processor Trace
  • 帮助系统工具 “合法入侵” 地址空间
2024 南京大学《操作系统:设计与实现》
金山游侠

物理入侵进程地址空间 (cont'd)

Game Genie: 一个 Look-up Table (LUT)

center

2024 南京大学《操作系统:设计与实现》
金山游侠

物理入侵进程地址空间 (cont'd)

Game Genie as a Firmware

  • 配置好 LUT、加载卡带上的代码 (像是一个 “Boot Loader”)

center

2024 南京大学《操作系统:设计与实现》
金山游侠

随着游戏越来越大……

地址空间那么大,哪个才是 “金钱”?

  • 包含动态分配的内存,每次地址都不一样
  • 思路:Everything is a state machine
    • 观察状态机的 trace,就知道哪个是金钱了

查找 + Filter

  • 进入游戏时 exp=4950\textrm{exp}= 4950
  • 打了个怪 exp=5100\textrm{exp} = 5100
  • 符合 495051004950 \to 5100 变化的内存地址是很少
    • 好了,出门就是满级了
2024 南京大学《操作系统:设计与实现》
金山游侠

入侵进程地址空间:金山游侠

一招制胜

  • 包含非常贴心的 “游戏内呼叫” 功能 (Hack DirectX)

center

它就是专为游戏设计的 “调试器”

2024 南京大学《操作系统:设计与实现》