编辑: kieth | 2019-02-02 |
2048 个的时候,搜索内存中值为
2048 的地址,这时候会列出一系列 地址,如果太多,可在游戏中改变这个数值,如花掉
1 个金币,然后再搜索 2047,经过查 询之后最终定位到内存地址,然后直接修改这个地址对应的内容. 一个简单的防御方法就是使用偏移量来存储游戏中的关键数据,如我们的金币,拥有 两个属性,一个是显示用的属性,另一个是真实的金币数据,真实的金币数据可以是加上 一个随便定义的常量,如3388.当有
100 个金币的时候,显示属性的值是 100,而真实的 金币数据是 3488.正常情况下,每次修改金币的值应该是这样的: Money += Change;
但在防御状态下,修改金币的值应该是这样的: RealMoney += Change;
ShowM_oney = RealMoney - 3388;
相当于把真实的金币数据进行了一个简单的加密,但这个简单的加密可以有效地防止玩家 修改内存,金币赋值是通过 RealMoney 计算之后进行赋值,所以玩家修改 ShowMoney 显 示的金币数是无用的. 2.3 对资源的加密解密 对资源进行加密可以很好地防止资源被盗用,一般需要对游戏的图片、模型、配置、 脚本等资源进行加密,对于图片和脚本的加密,Cocos2d-x 提供了比较便捷的加密解密方 法,当然也可以使用 DES、3DES、AES 等常用的加密算法,甚至自己设计的加密算法来 对资源进行加密. 2.3.1 使用 TexturePacker 加密纹理 TexturePacker 是非常强大的图片打包工具,提供了强大的加密功能,在Cocos2d-x 中 可以通过一行简单的代码设置密钥,在加载 TexturePacker 加密过的图片时会自动解密, TexturePacker 使用的是安全高效的 xxtea 算法,但美中不足的是目前只支持.pvr.ccz 格式, 这个格式并不建议在 iOS 之外的平台使用.首先来了解一下如何加密,可以通过 TexturePacker 的界面工具和命令行工具进行加密,需要设置一个
32 位十六进制值的密钥. 在TexturePacker 左侧的输出设置面板中设置纹理格式为.pvr.ccz,然后单击 Content protection 旁边的小锁按钮,就会弹出密钥设置窗口(如图 2-4 所示),可以在编辑框中输 入密钥,或者单击 Create new key 按钮自动生成一个新的密钥,Clear/Disable 按钮可以清 除密码. 第2章加密解密 ・19・ 图2-4 TexturePacker 加密 通过 TexturePacker 的命令行工具, 在命令行中添加一个选项Ccontent-protection 即可,使用命令行工具可以很方便地在脚本中对图片进行批量处理.在TexturePacker 的官 网https://www.codeandweb.com/texturepacker/documentation 有命令行工具使用的详细介绍. 在代码中只需要添加一行代码,把密钥设置进去即可. ZipUtils::ccSetPvrEncryptionKey(0xd8479b9f, 0xd8961025, 0x419da14a, 0x81e5d801);
2.3.2 对Lua 脚本进行加密 Quick 提供了一个简单的脚本加密工具,可以在 Windows 和Mac 系统下使用,它可 以将 Lua 脚本编译、加密并压缩成一个 zip 包,在Cocos2d-x 中也可以很方便地使用加 密后的脚本,可以在 github 上面获取 Quick 的源码 https://github.com/chukong/quick- cocos2d-x. 在Quick 的bin 目录下可以找到 compile_scripts 脚本,在Windows 下是 compile_ scripts.bat,在Mac 系统下则是 compile_scripts.sh,在控制台中运行该脚本,传入对应的参 数即可.例如,执行 compile_scripts -i ..\welcome\src -o welcome.zip -e xxtea_zip -ek mykey, 即可将指定目录下的所有脚本编译打包为 zip 文档,并进行加密,如图 2-5 所示. 第1篇实用技术篇 ・20・ 图2-5 加密 Lua 脚本 compile_scripts 的选项有很多, 直接输入 compile_scripts 或compile_scripts -h 命令即可 显示帮助说明,如图 2-6 所示.常用选项的含义如下. ? i:指定源文件路径. ? -o:指定输出文件路径. ? -p:包前缀. ? -x:指定要排除的目录(不打包). ? -m:编译模式. ? -e:加密模式. ? -ek:加密密钥,设置了加密模式之后必须设置密钥. ? -es:加密签名,默认值为 XXTEA,意义不大. ? -ex:加密文件的扩展名(默认是.lua). ? -c:使用指定的配置来编译. ? -q:静默编译,不输出任何信息. 编译有以下