代码注入式游戏修改器的优化问题
我们玩单机游戏时,游戏难度可能过大, 或者游戏已经比较熟练,想要增加游戏的玩法,这时候可以使用修改器。 内存式游戏修改器主要对游戏内存修改 修改时有两种方式,一是定时对内存数值进行修改。实现类似锁定的效果。 这样方案需要程序时刻运行。一旦关闭游戏中的数值,例如生命值等就会产生变动。 需要注意的是,修改网络游戏和有反作弊机制的游戏,除了使游戏臃肿,没有别的好处。且有数据失去同步的风险。 第二种方案则是对程序的代码进行修改。例如将 子弹数减1修改为子弹数加1,一旦进行射击操作,子弹就会增加。 由于程序代码可能是动态加载。当你进行射击时代码才会加载入内存。想要修改代码,就必须找到代码的位置。 代码位置会变化但是代码是不变的,我们只要搜索一段独一无二的代码,就可以找到位置。 我们把这段代码叫做特征码。搜索特征码时如果代码加载时偏移量大于特征码,直接暴力搜索即可。 如果代码加载时偏移量小于特征码,可以使用kmp算法,或者bm算法搜索。 搜索时注意,内存读取函数运行较慢,但是读取数据量大小对运行速度影响小。我们可以将大量数据读取入缓存中。 这样可以减少内存读取函数的调用次数,当使用40kb缓存时,仅读取1000次左右就可以完成搜索,时间为400ms。 除了用缓存来加速外,我们也可以缩小内存搜索范围,通过多次重开游戏,发现内存位置是 0XXXXXX1到4XXXXXX1之间