很多游戏开发者一直以为网络游戏的数据是在服务器上的。你怎么改都无济于事,修改客户端内存只是修改了显示,自己骗自己呢。

事实上打钱工作室的兄弟调试游戏经验 都可写一本《外挂入门之内存修改》,序就写着的,掩耳盗铃。

掩耳盗铃

原为掩耳盗钟。掩:遮盖;盗:偷。把耳朵捂住偷铃铛,以为自己听不见别人也会听不见,比喻自欺欺人。

《吕氏春秋·自知》:“范氏之亡也,百姓有得钟者.欲负而走,则钟大不可负;以椎毁之,钟况然有音.恐人闻之而夺己也,遽掩其耳.恶人闻之,可也;恶己自闻之,悖矣。”


内存修改工具的代表

CE 全名:Cheat Engine,它允许你修改你的游戏或软件内存数据。它包括16进制编辑,反汇编程序,内存查找工具。
与同类修改工具相比,它具有强大的反汇编功能,且自身附带了外挂制作工具,可以用它直接生成外挂。

修改内存数值流程编辑

  1. 运行CE。
  2. 运行游戏。
  3. 打开游戏进程。
  4. 首次搜索一个数值。
  5. 回游戏中让这个数值增加或减少。
  6. 回CE按数值增减的情况再次搜索。
  7. 重复5和6直到得到一个或很少的几个结果。
  8. 在这几个结果中判断哪一个是真正的结果。
  9. 修改数值或锁定数值。

换成程序猿能听得懂的就是
在你写的代码中所有变量里以值的方式搜索定位内存地址,然后修改测试服务器端的逻辑Bug.

一般测试者都会找带有数据相关的系统为入口进行参数检查测试,计算溢出测试,逻辑Bug测试等等.

举个例子:

《X武神》的福利大厅中资源追回功能,可追回的次数可以修改为负数,这是你会发现钻石在增加(参数合适性未检查).

《XX王座》的好友赠送功能,修改道具数量,同样的道具放4份,就可以复制道具(逻辑Bug)。

商城购买时,修改数量为很大时,计算溢出而只花很少的钱买很多很多的商品(计算溢出)。

防御之策

这里不讨论服务器的是与非,咱来聊一聊客户端如何应对内存修改.

上面提到CE的工作原理,那对应的方案就内存加密或内存保护,让你搜不到你想找的数值就没法改了吧.

自己编写一个Int32包装类,
提供一个Set方法,方法做加密处理
提供一个Get方法,方法做解密处理

重要的数据,切换为此类实现,这样CE等内存修改工具就无用武之地了.

CE可基于数值精确搜索,也可以增加了减少了的方式模糊搜索,所以我们不能只是简单的把数值加上一个定值。

加密方案仁者见仁,智者见智,不宜过于复杂,不要影响性能为前提,更不要掩耳盗铃。

转载请注明原地址: http://blog.noark.xyz/article/2017/6/6/戏说网络游戏外挂之内存挂/