金山游侠
金山游侠
金山游侠
Hacking Address Spaces
进程 (状态机) 在 “无情执行指令机器” 上执行
状态机是一个封闭世界
但如果允许一个进程对其他进程的地址空间有访问权
?
意味着可以任意改变另一个程序的行为
听起来就很 cool
一些 “入侵” 进程地址空间的例子
调试器 (gdb)
gdb 可以任意观测和修改程序的状态
Profiler (perf)
M3 中借助它理解程序的性能瓶颈
金山游侠
物理入侵进程地址空间
金手指:直接物理劫持内存
听起来很离谱,但 “卡带机” 时代的确可以做到!
今天我们有 Debug Registers 和
Intel Processor Trace
帮助系统工具 “合法入侵” 地址空间
金山游侠
物理入侵进程地址空间 (cont'd)
Game Genie: 一个 Look-up Table (LUT)
简单、优雅:当 CPU 读地址
a
a
a
时读到
x
x
x
,则替换为
y
y
y
Technical Notes
(
专利
,
How did it work?
)
金山游侠
物理入侵进程地址空间 (cont'd)
Game Genie as a Firmware
配置好 LUT、加载卡带上的代码 (像是一个 “Boot Loader”)
金山游侠
随着游戏越来越大……
地址空间那么大,哪个才是 “金钱”?
包含动态分配的内存,每次地址都不一样
思路:
Everything is a state machine
观察状态机的 trace,就知道哪个是金钱了
查找 + Filter
进入游戏时
exp
=
4950
\textrm{exp}= 4950
exp
=
4950
打了个怪
exp
=
5100
\textrm{exp} = 5100
exp
=
5100
符合
4950
→
5100
4950 \to 5100
4950
→
5100
变化的内存地址是
很少
的
好了,出门就是满级了
金山游侠
入侵进程地址空间:金山游侠
一招制胜
包含非常贴心的 “游戏内呼叫” 功能 (Hack DirectX)
它就是专为游戏设计的 “调试器”