自问自答,抛砖引玉。
所谓内存修改软件,指的是类似于『金山游侠』或者更早的 fpe 等等。而所谓的 3D 游戏,指的是大概 2005 年之后的大型游戏,或者以同时期的 xbox360/ps3 作为分界线。
内存修改软件的工作原理:
本质上此类软件是一种特化的调试器(debugger),通过中断软件运行获取内存快照,之后对快照做对比判断内存变化。
内存修改软件的失效原因:
1. 硬件更新,操作系统内存模型进步。
2. DRM 防盗版机制的普及。
3. 3D 游戏开发技术演进。
操作系统内存模型的进步:
早期的 16bit 系统就不讨论了。Win9x 的改进是 Kernel/User 空间划分,WinXP 之后过渡到 32/64bit,改进了内存映射机制。Win7 之后的进步主要是内存模型安全方面的,添加依赖 cpu 硬件特性的 DEP 功能,改善虚拟化支持。整个操作系统内存模型的演变体围绕的思路就是,进程隔离、K/U 隔离和执行权限隔离,应用程序崩溃几乎不会影响整体系统的稳定性。
对于内存修改类软件的影响主要是,中断用户态程序进行调试需要通过操作系统的特殊调用,某些如 ASLR 的机制会影响进程的内存数据分布,增加了调试的难度。
DRM 机制对于内存修改软件的影响:
本质上内存修改软件是 debugger,而 debugg 是破解 DRM 的最主要的机制。多数 DRM 对于 debugger 都会有相应的保护措施,甚至是贯穿整个程序运行的指令混淆等等。特别是 2005 之后数字发行逐渐流行,多数游戏都会带有 DRM 机制。
游戏开发模式的转变:
之所以强调 2005 和 xbox360/ps3 这个时间点是因为,支持真 3D 技术的硬件能力终于得到了普及,而 3D 游戏的开发远比 2.5D/2D 游戏复杂,所需要的人力物力资源影响了整个游戏界的开发模式,3D 引擎应运而生。为了提高开发效率,让非程序人员参与到游戏开发中,多数游戏引擎都附带有 scripting 模块。
技术上 scripting 是一种虚拟机,游戏运行的过程中,脚本化的代码会实时编译成二进制代码,插入到游戏主逻辑指令当中。从调试的调度上说,原始的快照比对功能变得毫无价值了,即使能追踪到某些特定内存地址,也多数是某种参考而非游戏逻辑的一部分。
PS 现在的单机游戏修改技术:以 cheat engine 为例
针对 DRM 机制,不使用 windows 自带 debug 机制,采用 veh/seh 作为中断接口。
内置 lua 解释器,在游戏进程中动态修改和执行指令。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.