入侵进程的地址空间
入侵进程的地址空间
入侵进程的地址空间
Hacking Address Spaces
进程 (状态机) 在 “无情执行指令机器” 上执行
状态机是一个封闭世界
但如果允许一个进程对其他进程的地址空间有访问权
?
意味着可以任意改变另一个程序的行为
听起来就很 cool
“入侵” 进程地址空间的例子
调试器 (gdb)
gdb 可以任意观测和修改程序的状态
入侵进程的地址空间
物理入侵进程地址空间
金手指:直接物理劫持内存
听起来很离谱,但 “卡带机” 时代的确可以做到!
今天我们有 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)
它就是专为游戏设计的 “调试器”
入侵进程的地址空间
入侵地址空间:“外挂” 才是终极的手段
做一个虚假的内存控制器
入侵进程的地址空间
“外挂”:另一个思路
采集视频信号
采集卡 (
MS2130
) + 树莓派 = 外挂
用魔法打败魔法
创造变得前所未有的容易
我能否用 FPGA 设计一个电路,收到视频流,以及来自 I/O 端口的 bound-box 绘图指令,把 bound-box 绘制到视频流上输出。