首先声明,这个方法思路很简单,破解起来估计也很快,适合要求比较低的新手朋友们一起使用。
【思路】
1.在程序发布之前,把所有图片用自己写的方法加密,加密采用读取字节流,然后修改一定的字节,再另存为,这个图片就无法正常预览了,这样起码能阻止小部分盗图者。
2.程序中修改cocos2dx源码,设置一个开关,方便有些不需要加密的程序无需再次修改源码。开启开关后,cocos2dx读取资源的时候逆向解密。
【加密资源】
我自己用C#写了个小工具,把文件夹拖进去就会自动遍历所有图片,然后就可以加密。加密方法我只采用了最简单的加减法,哈哈,要求比较低嘛。
这个工具的源码我放在了GitHub,我第一次使用GitHub,不太会用,哈哈,英文比较水,大家可以去下载源码:
https://github.com/winterfeel/ImgEncoder
代码我都加了简单的注释,软件比较简单,大家可以自己改。
【修改cocos2dx源码】
然后就是修改cocos2dx源码,我的是2.2.3。3.x的估计差不多吧。。。
在cocos2dx-2.2.x\cocos2dx\platform
在文件 "CCFileUtils.h"
中加入如下代码:
bool ifEncoded;//解密开关
const char *_key;
void setKey(const char *key);
在文件 "CCFileUtils.cpp"的 init() 方法中添加如下代码:
ifEncoded=false;//默认不开启解密
再新增一个新的方法,设置秘钥
void CCFileUtils::setKey(const char *key)
{
ifEncoded=true;
_key=key;
}
最后就是最重要的,在读取文件数据函数里面添加解密方法:
在 getFileData 方法的 "return pBuffer;"前面加上:
if(ifEncoded)
{
for (int i = 0; i < 16; i++)
{
buffer[i] -= _key[i];
}
}
最后,在你的游戏中, AppDelegate.cpp的 applicationDidFinishLaunching() 方法中加入:
CCFileUtils::sharedFileUtils()->setKey("000000000000000");
即可进行解密
【总结】
这个仅仅是我个人使用的最简单的加密实现方式,因为找遍了百度也没找到什么合适的方法,要么太难,要么有局限性,只好自己写个简单的方法玩玩了。测试了下,在安卓和ios下都可以成功。主要还是提供给大家一个思路,至于具体的加密方法,各式各样大家自己发挥吧~哈哈,有什么问题,或者我写的有什么问题的大家都可以留言!
----灯灯