关于资源加密的一点问题

使用quick的版本是:quick-cocos2dx-3.3rc1

lua代码使用下面这个进行加密
%QUICK_V3_ROOT%quick/bin/compile_scripts.bat -i ~dp0../src -o ~dp0…/encode/src -m files -e xxtea_chunk -ek zwsatan
控制台显示的配置如下:
config:
src = “C:\boomerv3\tools…/src”
output = “C:\boomerv3\tools…/encode/src”
prefix = “”
compile = “files”
encrypt = “xxtea_chunk”
key = “zwsatan”
sign = “XXTEA”
extname = “lua”

资源图片代码使用下面这个进行加密
%QUICK_V3_ROOT%quick/bin/pack_files.bat -i res -o encode/res -ek zwsatan
控制台显示配置如下:
config:
src = “res”
output = “encode/res”
prefix = “”
pack = “files”
key = “zwsatan”
sign = “XXTEA”

这两个加密的key和sign应该都是一样,key是zwsatan,sign是XXTEA
在AppDelegate中添加如下代码:
stack->setXXTEAKeyAndSign(“zwsatan”, strlen(“zwsatan”), “XXTEA”, strlen(“XXTEA”));

这里实际行为是,代码加密的是正常的,可以读取,但是资源图片加密以后,总是会报错如下:
LUA ERROR: ASSERT FAILED ON LUA EXECUTE: unsupport image format!

stack traceback:
: in function ‘create’
: in function ‘newSprite’
: in function ‘init’
: in function ‘ctor’
: in function ‘new’
: in function ‘testSkill’

这里看起来就像是,图片加密的有问题一样,但是图片加密的有问题,我用非加密的图片来使用,就可以正常运行
已经在论坛里看了好几篇相关资源加密的内容,依旧没有什么帮助,希望各位大大能提供一些帮助,感激不尽~

你看到的图片解密的修改相关文章应该是2.x版本的,因为需要修改不少地方,所以quick集成了载入图片时解密的代码。
3.0以后,图片是先从文件读入内存再解码的,入口只有一个地方,只需要在那里修改一下,从文件读入内存时先解密就可以了。quick3.3开始因为要尽量避免修改2dx引擎代码,所以没有添加这几句代码,你可以自己加一下。

这里,我实验了一个简单的工程,也不行,只是测试图片加密
%QUICK_V3_ROOT%quick/bin/pack_files.bat -i res -o encode/res -ek 2dxlua
这个key是AppDelegate模板中默认的key值,不知道是不是还有别的地方需要修改,教程里都没有提到过啊~
现在上传这个工程,其中res是加密的,res1是非加密的
现在把测试的代码上传上来,看看我是哪里写的有问题吗?

你好,3Q回答,我想问下,这个入口是在什么地方了

CCImage.cpp里的Image::initWithImageFile函数

你好,我看了下,是指在CCFileUtils.cpp中的getData这里,这里直接是fopen以后,读取所有内容,那么使用pack_files.bat这种方式的,应该在这里怎样做是先解密呢?
是在哪里将内容读取以后,调用xxtea_decrypt这个接口,来进行解密吗?

看来每次刷新都晚了几分钟,正好错过了这个时间~,我看了下,最终的文件内容读取还是来源于CCFileUtils中的getData,是指在这里的时候,将读到的内容,通过xxtea_decrypt来进行解密吗?
谢谢

嗯。你可以简单的把这里面的CCFileUtils的getFileData换成HelpFunc的getFileData

你好,我在oschina上,发现了你原来的帖子,看了下,发现直接用HelperFunc::getDatat替换掉FileUtils的getDataFromFile即可,但是目前出现了一些链接上的问题
HelperFunc位于Classes目录下,这个工程和CCImage的工程(libcocos2d)不是同一个,那个库怎么才能引用我需要的HelperFunc,总是报出符号错误,应该是链接没到,直接替换也会有不少问题,涉及到的部分代码均在Classes目录下,这个可以怎么解决吗?

把HelpFunc.h里的类定义修改一下试试:

class CC_DLL HelperFunc

太艰难了,最后把helperfunc.h/cpp拷贝到了libcocos2d工程下,把xxtea的内容直接放入helperfunc.cpp中,移除掉了HelperFunc中LueEngine的内容,总算编好了,测试是可以的,还是希望后面的版本,可以把这个内容整合下,HelperFunc现在在启动程序工程下,并不是个lib,加上导出符号,还是未定义的符号,自己这块估计也不太擅长,弄了,好久,谢谢 阳光七月 了,希望这个内容在以后版本,可以通过在AppDelegate中通过宏定义,或者是通过一些配置信息,可以直接采用解密的方式读取资源文件

s:3我也遇到你遇到过的问题啦。。求助一下。。

v3.x是要在Image::initWithImageFile加入解码代码吗

是的,自己加一下

因为HelperFunc在的工程(可执行程序)和CCImage在的工程(lib)无法关联,所以我的做法是,直接将HelperFunc.cpp/h拷贝到了CCImage同级目录下,加入工程,然后直接进行修改,这里同样拿不到CCLuaEngine,我就直接去掉了,因为使用CCLuaEngine也主要是为了从LuaStack中获取xxtea的key和sign,这里我是直接写死的,然后在稍微调下#include应该就好了,直接用HelperFunc:getData替换掉FileUtils::getInstance()->getDataFromFile

上面那样子就好了,这个稍微调下就好了,本来打算做外部依赖关联,不过这里很可惜的是会报循环依赖,目前我也没啥好方法,就是这样强加的

谢谢哈。。我也搞定了。。我这里能读到key和sign。。我想问一下这样的解密方式,json什么的能解密吗

貌似studio支持二进制导出。。谢谢啦

:4: :4: :4: :4: :4: :4: :4: :4: :4: :4: :4: :4: :4: :4: :4: :4: :4:

元旦出去玩了,没有看帖子,按这种方式,json应该是可以解的,不过我没怎么用过cocos studio,不能给啥帮助了

quick v3 将src打包成zip要怎么去用呢,还有src下有framework,这个要分离出来打包吗