(转)quick-cocos2d-x图片资源加密

摘要: 在quick-cocos2d-x上实现的一种图片资源加密的方法,现已经加入官方最新版本之中

###quick-x已经支持用XXTEA加密方式对脚本文件进行加密。在此基础上,自己做了一些工作,对图片资源进行了XXTEA加密,现分享给大家。 ###(2014.5.30加注:quick-x的2.2.3版本已经集成了我递交的pr,现在官方版本代码与文章中类似)

###首先我们要有对图片加密的工具。这个参考compile_scripts脚本,写一个用于加密的脚本就可以了。我自己写的脚本放在这里,大家可以下载使用。(之前没用过php,完全是照着廖大的脚本修改成的,有写得不好的地方还请多多包涵,呵呵)

###脚本使用的方法和compile_scripts脚本差不多,将zip包里的文件解压到quick-x的bin目录下就可以用了。

###在Windows命令行下,输入以下指令(请确认环境变量PATH里有quick-x的bin目录,否则需要自己加运行路径)

pack_files.bat -i olddir -o newdir -ek XXTEA -es tsts 

###以上指令是将olddir目录下的所有文件用XXTEA加密后,放到newdir目录下,其中加密密匙为XXTEA,加密记号为tsts。参数的定义与compile_scripts脚本类似,用-h也可以得到帮助,也不多说了。

###MAC下可以用pack_files.sh来加密。

###需要注意的是,现在只支持图片的加密。比如AllSprites.plist和AllSprites.png这样的一对纹理文件,只能加密png文件,plist文件加密后是用不了的。(注:现在已经支持plist文件,请看“后篇”里的内容)

###文件加密好以后,我们需要修改quick-x的平台代码,使得它能够读取加密后的文件。

###载入图片的函数是lib\cocos2d-x\cocos2dx\platform\CCImageCommon_cpp.h里面的CCImage::initWithImageFile()和CCImage::initWithImageFileThreadSafe()。再进一步看,这两个函数里都是使用CCFileUtils::sharedFileUtils()->getFileData()来获得文件数据的,我们只需要在获取数据时把文件数据解密即可。

###为此我们需要专门写一个新的getFileData()来代替调用。直接写一个是可以的,放在哪个文件里也不重要。因为我自己有一个HelperFunc模块,专门放自己增加的功能的,所以我就写在这里面了。文件里的相关代码如下:

HelperFunc.h

#ifndef Cocos2Dx_HelperFunc_h #define Cocos2Dx_HelperFunc_h NS_CC_BEGIN class CZHelperFunc { public: static unsigned char* getFileData(const char* pszFileName, const char* pszMode, unsigned long * pSize); }; NS_CC_END #endif //Cocos2Dx_HelperFunc_h 

HelperFunc.cpp

#include "cocos2d.h" extern "C" { #include "lua.h" #include "xxtea.h" } #include "CCLuaEngine.h" #include "HelperFunc.h" USING_NS_CC; unsigned char* CZHelperFunc::getFileData(const char* pszFileName, const char* pszMode, unsigned long * pSize) { unsigned long size; unsigned char* buf = CCFileUtils::sharedFileUtils()->getFileData(pszFileName, pszMode, &size); if (NULL==buf) return NULL; CCLuaStack* stack = CCLuaEngine::defaultEngine()->getLuaStack(); unsigned char* buffer = NULL; bool isXXTEA = stack && stack->m_xxteaEnabled; for (unsigned int i = 0; isXXTEA && i < stack->m_xxteaSignLen && i < size; ++i) { isXXTEA = buf[i] == stack->m_xxteaSign[i]; } if (isXXTEA) { // decrypt XXTEA xxtea_long len = 0; buffer = xxtea_decrypt(buf + stack->m_xxteaSignLen, (xxtea_long)size - (xxtea_long)stack->m_xxteaSignLen, (unsigned char*)stack->m_xxteaKey, (xxtea_long)stack->m_xxteaKeyLen, &len); delete []buf; buf = NULL; size = len; } else { buffer = buf; } if (pSize) *pSize = size; return buffer; } 

###因为上面代码里直接使用了CCLuaStack里的密匙等数据,所以要修改一下lib\cocos2d-x\scripting\lua\cocos2dx_support\CCLuaStack.h,把里面的几个属性改成公有的才能调用。当然我这是偷懒了,安全的做法应该是加几个取值的方法,呵呵。

public:
  bool  m_xxteaEnabled;
  char *m_xxteaKey; int m_xxteaKeyLen; char *m_xxteaSign; int m_xxteaSignLen; 

###另外,我们需要在程序启动时设置一下密匙和标记,这就要修改AppDelegate.cpp里的AppDelegate::applicationDidFinishLaunching(),在下面这句:

CCLuaStack *pStack = pEngine->getLuaStack();

###这句后面加上:

pStack->setXXTEAKeyAndSign("XXTEA", strlen("XXTEA"), "tsts", strlen("tsts")); 

###注意最新版本的quick-x里,player的AppDelegate.cpp修改的地方是StartupCall::startup()函数。

###现在把CCImageCommon_cpp.h里的CCFileUtils::sharedFileUtils()->getFileData改为CZHelperFunc::getFileData就可以了。当然,必须包含HelperFunc.h这个头文件才能编译通过。

###(注:initWithImageFileThreadSafe函数里有一段代码是在Android平台上使用getFileDataForAsync来取文件内容,我开始这里没做修改也能在Android上正常运行,可能是因为我没使用到这一载入功能。其实这段代码可以直接去掉,都用CZHelperFunc::getFileData来处理就好。最简单的修改是将“#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)"改成"#if 0"就可以了)

###经过以上修改,quick-x就能够使用加密后的图片资源了。但这只解决了Windows平台(player)和Android平台,其他的修改请看续篇。

后篇: 让quick-cocos2d-x支持加密的plist文件 quick-cocos2d-x图片资源加密(续)

 

原文地址:https://my.oschina.net/SunLightJuly/blog/184061

转载于:https://www.cnblogs.com/wodehao0808/p/9104378.html

Cocos2d-x客户端资源加密 安卓打包的apk文件只是做了简单的压缩,通过解压缩可以获取资源文件,如果不想图片资源被别人看到,那么可以对图片进行加密cocos2d-x提供了xxtea加密和解密算法,先将图片进行加密,这样就打不开图片了,然后在CCImage解析图片候进行解密即可。 一、加密 用下面两个python脚本,对图片进行加密。 ################################## 阅读详情

相关推荐

Cocos2d-x 游戏资源(图片、XML、TXT等)打包加密 之 解密读取

Cocos2d-x 游戏资源(图片、XML、TXT等)打包加密 之 解密读取

xxtea加密工具 附c++源码

cocos2dx lua开发,发布app,图片资源加密和代码加密方法,附上具体详细代码和工具。读者有一些c++知识更能读懂,也支持傻瓜式照搬,附带已经生成好的加密exe文件

png图片结构分析及加密破解技术

png图片的结构 及相关加密原理

【原创教程】Quick-Cocos2d-x的资源加密

在实际开发中,我们开发的游戏在发布候往往需要把资源加密。如果我们自己来做这些操作的话,无疑是一项很繁琐的工作。好在Quick中给我们提供了完整的一套解决方案。 在Quick中提供了两个加密的脚本,一个是对lua脚本进行加密的脚本,另外一个是对图片资源进行加密的脚本。 我们打开Quick引擎下的bin目录,能够看到一些脚本,其中4个脚本是加密用的。 compile_scripts.b

linking530的专栏 2111

Quick-Cocos2dx-Community发布加密资源文件

在 3.6 中,新增加Quick-Cocos2dx-Community/quick/bin/encrypt_res/encrypt_res,用于加密图片资源。下面展示如何在发布游戏的候使用encrypt_res加密资源。示例环境:引擎版本:Quick-Cocos2dx-Community 3.6演示平台:Mac with Xcode on iOSencrypt_res使用过程如下:打开Termi...

1072

详解Quick-Cocos2d-x 加密

本文开发环境:Xcode 5.0 + Quick-Cocos2d-x v2.2.5 如果开发者不想让游戏中的资源或脚本文件轻易的暴露给其他人,一般会采用对文件进行加密的方式来保护文件或资源被盗用。Quick-Cocos2d-x 为开发者提供了xxtea加密算法,用来对脚本文件及资源进行加密加密对象大体分为如下几种: 1. 对脚本/资源文件本身加密 2. 将脚本/资源文件压缩成zip,对zi

linking530的专栏 2258

quick-cocos2d-x图片资源加密

quick-x已经支持用XXTEA加密方式对脚本文件进行加密。在此基础上,自己做了一些工作,对图片资源进行了XXTEA加密,现分享给大家。 首先我们要有对图片加密的工具。这个参考compile_scripts脚本,写一个用于加密的脚本就可以了。我自己写的脚本放在这里,大家可以下载使用。(之前没用过php,完全是照着廖大的脚本修改成的,有写得不好的地方还请多多包涵,呵呵) 脚本使用的方法

记录一下学习笔记和看到值得记录的文章 2082

quick-cocos2d-x 图片资源加密

quick-x已经支持用XXTEA加密方式对脚本文件进行加密。在此基础上,自己做了一些工作,对图片资源进行了XXTEA加密,现分享给大家。 (2014.5.30加注:quick-x的2.2.3版本已经集成了我递交的pr,现在官方版本代码与文章中类似) 首先我们要有对图片加密的工具。这个参考compile_scripts脚本,写一个用于加密的脚本就可以了。我自己写的脚本放在这里,大家可以

Astor的专栏 2116

quick-cocos2d-x图片资源加密

###quick-x已经支持用XXTEA加密方式对脚本文件进行加密。在此基础上,自己做了一些工作,对图片资源进行了XXTEA加密,现分享给大家。 ###(2014.5.30加注:quick-x的2.2.3版本已经集成了我递交的pr,现在官方版本代码与文章中类似) ###首先我们要有对图片加密的...

chensuo0353的博客 279

xxtea decrypt破解工具

是一个可以解密xxtea加密的lua代码文件的工具。适用于cocos-lua、quick-cocos

quick-x 图片资源加密

本文源自:http://my.oschina.net/SunLightJuly/blog/184061 quick-x已经支持用XXTEA加密方式对脚本文件进行加密。在此基础上,自己做了一些工作,对图片资源进行了XXTEA加密,现分享给大家。 (2014.5.30加注:quick-x的2.2.3版本已经集成了我递交的pr,现在官方版本代码与文章中类似) 首先我们要有对

wang_we的专栏 1110

quick-cocos2d-x图片资源加密()

前篇: 通过前篇的修改,我们已经能够在Windows平台的player,以及Android上使用加密的常见格式(png、jpg等)图片资源了。不过,在MAC上的player,以及IOS上,加载资源调用的是另外的代码,所以我们需要另外作修改。 首先来修改Mac上的Player代码。我们这次要修改的是lib\cocos2d-x\cocos2dx\platform\mac目录下的CCIm

wtuetnsrmh的专栏 776

quick-cocos2d-x 脚本和资源加密

一、脚本加密 如果只是实现加密,这个更简单了。 在引擎目录下/quick/bin/下面 compile_scripts.bat  这个东西就是我们需要的。他接受好几种加密方式,我一般只用到xxtea_zip 和 xxtea_chunk 这两种。前一种是把lua脚本压缩成一个zip,为这个zip加密。后一种是为每个脚本加密,然后再压缩一次(包会比前一种大)。其他都差不多。

houjia159的专栏 4397
上一篇: ubuntu18.04安装后没有wifi图标,并且无法安装wifi驱动
下一篇: nginx--之日志分割
weixin_30949361
博客等级 码龄11年 103粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值