对于一个弱联网或者单机游戏,可以从以下方面去破解:
1、找得到存档文件的,直接破解修改存档文件。
2、找不到存档文件,就在游戏运行时借助一些软件来修改数值,比如用各种修改器手游助手来修改金币。
3、找不到存档文件、数值还修改不了,就直接反编译,Java就看Java、C#就看IL、C++就看汇编。
文章转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
好了,防破解我们也从以上方面来做 (或者还有其它的)。
首先我们可以聪明一点,存档名字不要写成SaveData、Config、Cundang、等这种很傻瓜的名字。难道存档文件就不能命名为mp3、jpg吗?把存档文件扔到一堆jpg里面,这是简单有效的方法。
然后就是加密,字节偏移 、上上下下左左右右交换都可以。只要自己能认得出来。
首先我们要明白市面上各种修改器的原理,随便哪一款修改器都是教你先找到一个数值,比如金币 5000,然后搜索这个数值,再去改变这个数值,再搜索改变后的数值。
那么对应于这种方式,我们要做的就是,让 显示的数据 和 我们实际用于计算的数据 并不一样。比如玩家攻击力是100,那么我从存在存档中的就写 101,然后计算伤害的时候用
101 -1 =100 这样去计算,但是显示在屏幕上的还是 100 。这样玩家用修改器去搜索 100 这个数值。然后攻击力 +1 的时候显示101,但是其实我们的变量中存储的是 102.自然就搜索不到了。
下面我用Unity做的一个Demo,然后用烧饼修改器来测试修改数据,测试 不加密 和 加密 ( 指的就是上面的 100+1 ) 的 情况。
文章转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
首先Unity的工程下载:
http://pan.baidu.com/s/1hqD4yyg
然后下面是用来测试的普通场景的代码:
下面是用来测试 加密的代码:
对比上面的两个代码,就会明白这次加密的原理。
好了,下面是我用烧饼修改器测试的结果。
破解不加密游戏开始,攻击力初始为0
点击 普通赋值 ,赋值 100
用烧饼修改器搜索 100
搜索到很多值为 100 的内存地址
返回游戏,点击 修改伤害值 按钮,数值 + 1 =101.
再次搜索 101
这次只搜索到 2 个值为 101 的数据。我们把这两个数据都进行修改 为 7777 。
提示修改成功,同时我们看到游戏中显示的数值变了,那么数据是否真的变了。
回到游戏,再次点击 修改伤害值,显示 7778 。
至此游戏已经被修改破解。
破解加密游戏开始,初始值为 0
点击 加密赋值 ,给初始攻击 100
然后在烧饼修改器中搜索 100
搜索到很多个
返回游戏 ,点击 修改伤害值 后,伤害值显示为 101 。
继续在烧饼修改器中搜索 101 。
只搜索到1个。
我们修改成 66666。
提示修改成功,但是我们看到,游戏中的数据并没有变化。
返回游戏,点击 修改伤害值 ,发现一切正常。
破解加密失败。
文章转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
为什么普通的能搜索到 2 个101,而加密的只能搜索到 1个 101?
因为加密的游戏,在那个时候,的确只有一个数据是101,就是屏幕显示的。存储用于计算的数值,是 102 。修改器修改的只是用于屏幕显示的一个数字,而且修改之后马上又被真实的数值替换了。所以并没有修改成功。
3、对于反编译游戏代码的,我们可以对代码进行混淆加密。
Unity反编译重新打包的流程,看下面的日记。
话说如果真有高人来破解你的游戏,不管怎么做,都会被破解掉的。我们能做的就是尽量增大破解难度。或者,做成网络游戏。
版权声明:本文转自http://blog.csdn.net/huutu 转载请带上 http://www.thisisgame.com.cn
原文地址:http://blog.csdn.net/huutu/article/details/46835839