zoukankan      html  css  js  c++  java
  • cocos2dx资源和脚本加密quick-lua3.3final

    一、资源加密

    版本号:Quick-Cocos2d-x 3.3 Final

    调试工具:xCode

    工程创建的时候选择的拷贝源码。

    项目结构如图:

    QQ截图20150126150235.jpg

    这个功能七月大神在很早之前就已经实现了,但是在3.3版本中有几个小BUG,可能很多人不知道一直卡住了。我就在这儿从头到尾的流程都讲一次。

    道理很简单 主要就只用到quick-src/extra/approols/下面的HelperFunc这个类。

    我只做了图片的加密,plist未做。道理一样。我就只说图片的吧。

    第一步

    1.  由于cocos现在统一了资源读取,所以,找到CCImage.ccp这个类,导入HelperFunc头文件

    1
    #include "extra/apptools/HelperFunc.h"

    这个时候重要的来了,xcode报错。提示HelperFunc.h找不到。我查了半天最后才发现问题所在,原来是searchpath的路径官方填错了。按照图片步骤,添加quick-src的搜索路径

    QQ截图20150126150332.jpg

    $(SRCROOT)/../../runtime-src/Classes/quick-src

    这个时候,错误应该就消失了。

    2.找到 initWithImageFile 这个函数

    修改

    1
    Data data = FileUtils::getInstance()->getDataFromFile(_filePath);

    为:  

    1
     Data data = HelperFunc::getData(_filePath);

    这一步就是读取资源的时候通过七月大神封装好的类来解密。

    第二步

    这个时候android是编译不过去的。跟上面一样提示 找不到HelperFunc。

    可以通过改mk文件来处理。按照路径:

    你的项目/frameworks/cocos2d-x/cocos/Android.mk

    打开mk,在如图的位置添加quick-src的搜索路径

    QQ截图20150126150540.jpg

    $(LOCAL_PATH)/../../runtime-src/Classes/quick-src/

    一定要注意格式哦。上面一行末尾如果没有 需要添加一个“”

    第三步

    接下来就是加密图片了。

    在引擎目录下/quick/bin/下面 有个pack_files.sh 我们就是用到这个东西来加密了。这个跟lua加密差不多。我简单说一下流程。

    1.写一个配置文件.php的。很简单。

    QQ截图20150126150700.jpg

    切记 记好你的key和签名!!!后面还会用到。

    我比较懒,没有新写一个demo。用的项目的,所以关键部位*****。不过不重要。忘谅解。

    2.终端执行 pack_files.sh -c 你的php路径.php 如果没有报啥错,这一步就算完成了。我的输出路径填的就是项目res下。如果不是,把加密好的图片拷贝覆盖进去就OK。

    第四步

    最后在AppDelegate.ccp 添加:

    stack->setXXTEAKeyAndSign("你的key", strlen("你的key"), "你的签名", strlen("你的签名"));

    到了这一步,基本大功告成了。跑起来试试吧。真机哦。如果想要在模拟器上也支持加密,需要打开player项目 重复第一步 第四部照做一次,再编译一个player。

    二、脚本加密

    如果只是实现加密,这个更简单了。

    在引擎目录下/quick/bin/下面 compile_scripts.sh  这个东西就是我们需要的。他接受好几种加密方式,我一般只用到xxtea_zip 和 xxtea_chunk 这两种。前一种是把lua脚本压缩成一个zip,为这个zip加密。后一种是为每个脚本加密,然后再压缩一次。都差不多。

    终端进入 /quick/bin/这个目录,执行 ./compile_scripts.sh -i 你的脚本的目录(比如我的/Users/bkbl/Documents/game/src) -o 加密后文件的输出目录(比如我的/Users/bkbl/Documents/game/res/game.zip) -e (加密方式 xxtea_chunk 或者 xxtea_zip ) -es 签名(比如 XXTEA) -ek 密钥(也就是KEY 比如 adadada) 

    只要代码没错误,这儿也不会报错。我的输出路径是我项目res下。如果不是 拷贝进去。

    最后在AppDelegate.ccp 添加

    stack->setXXTEAKeyAndSign("你的key", strlen("你的key"), "你的签名", strlen("你的签名"));

    比如:

    1
    stack->setXXTEAKeyAndSign("adadada"strlen("adadada"), "XXTEA"strlen("XXTEA"));

    读取这个zip

    1
    stack->loadChunksFromZIP("res/game.zip");

    修改下面

    1
    engine->executeScriptFile(ConfigParser::getInstance()->getEntryFile().c_str());

    的函数为

    1
    stack->executeString("require 'main'");

    搞定!!!非常傻瓜式的。再次感谢Quick团队!

    如果你同时做了脚本和资源加密 一定要用一套key和签名的。切记!!!

  • 相关阅读:
    关于同余最短路
    【水】关于 __attribute__
    题解【AtCoder
    一些简单图论问题
    浅谈简单动态规划
    关于博客园主题(美化博客园)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第47章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第46章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第45章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第44章 读书笔记(待更新)
  • 原文地址:https://www.cnblogs.com/zhangfeitao/p/4528103.html
Copyright © 2011-2022 走看看