游戏安全的学习(1)—— CE 的基本用法

开始学习游戏安全了,后续跟着队爹搞 O 去。

Cheat Engine

简介

说到游戏安全就不得不提这个软件了,这个软件本质是一款内存调试器,但是它对内存搜索的便捷特性使得它很容易修改游戏的某些数值,成为入门游戏安全必备的一个软件。

CE练习关卡

CE 它内置了很多小游戏帮助我们快速入门 CE 这款软件,基础练习就不说了,我们直接来到游戏修改的这几关。可以在安装目录下找到 gtutorial-i386.exe 这个程序,这就是我们的练习关卡了,有三个经典的小游戏让我们修改。

第一关

一个射击游戏,那边有一个靶标,我们需要摧毁目标,提示说了,每射击五次目标会回血并且立刻处于无敌状态,并且是在第五发子弹射出去的瞬间生效,正常过关我们是很难的,那就考虑修改靶标的血量,找到这一块内存。

因为不知道伤害和血量,所以首次搜索使用未知的初始值去搜索,搜索类型为 4 字节。

每射出一发子弹打到目标,就搜一次减少的数值,如果四次打完还没有找到合适的值,那就打出第五发子弹然后去搜 增加的数值,随后再这样循环操作直到看到合适的值。

我们找到了一个初始值为 100 的值。

修改为 1 之后射击,通过。

第二关

这里很明显我们可以看到自己的血条,于是尝试改很大。方法就是每次都搜准确的数值,差不多两三次就能找到一个确定的结果,拉下来修改。

然后去射击两个靶标,发现其中一个目标摧毁之后,另一个目标玩不起了,3 秒倒计时直接发射巨型子弹瞬秒。

于是我们就只能考虑修改目标的血量,修改为1,然后快速消灭两个让它发射不了巨型子弹。

这里的思路还是一样的,未知的初始值 起手,然后每次射击打到目标就搜减少的数值,这样就能搜到两个结果,都改成 1 。

然后突然发现,一个死了之后另一个目标血量会加 30 左右,3秒内肯定很难消灭,但是因为巨型子弹飞行慢,所以可以在远处先把数值改成 1 之后再发射,那样的话也是我们先消灭目标,可以过关。

第三关

第三关就是一个跳台阶游戏,游戏说明说了要把所有台阶变绿色去解锁门,但是因为这三个怪物的存在,我们很难去跳完所有台阶,于是考虑修改坐标。坐标极有可能是浮点类型,但是也可能是整数类型,不清楚我们就得都考虑。因为坐标我们不知道,所以一开始得搜未知的初始值,然后我们可以左右来回移动去搜变化的值

这里有一个思路是:我们在跳跃的时候,x 坐标不会发生变化,所以我们可以在跳的过程中不断搜索未变化的值,于是很快就排查出来两个值

很明显,这么大不太可能是 int 类型,我们改为浮点类型显示看看。

发现第一个值就是我们的 x 坐标,并且移动可以看到在变化,中心点的位置为 0。

这里同样我们可以去找到 y 坐标,但是有一个省事的方法就是 x y 通常都是一起定义的,所以可以找找 x 的相邻内存看看有没有 y 的值,很幸运,x 往后偏移四个字节的地址就是 y 坐标。

很明显,能测出来左右两端的 x 分别是 -0.97 和 0.97,y 轴坐标是向下增长的,随便修改为一个负值可以让我们向上移动。

但是即使有了瞬移我们还是不能很好地通过这关,因为有那些怪物秒杀,所以我们可以想其它的安全的办法。

假设它有个计数器记录了我们当前已经变绿了多少块板子,那么我们就搜,然后多踩一块就再搜 +1 的值,能找到一个确切的值,这里需要注意一点就是最下面那块绿色的大板子它其实也会被计数,只是我们一开始就在那个板子上,所以可能会忽略这一个。

找到了计数器之后改成 12 发现那些刺全部都聚集到了门上,而且当时我在的那个位置还刚好在它的路径上,血溅我一脸,但是门确实解锁了。

然后在这里我们可以瞬移,把 x 改成 0.97 就可以过关了。


好,看到这个通知,感觉跟毕业了一样,泪目,下面就要去实战游戏安全项目了。