cocos2dx资源和脚本加密quick-lua3.3final
一、资源加密
版本号:Quick-Cocos2d-x 3.3 Final
调试工具:xCode
工程创建的时候选择的拷贝源码。
项目结构如图:

这个功能七月大神在很早之前就已经实现了,但是在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的搜索路径

$(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的搜索路径

$(LOCAL_PATH)/../../runtime-src/Classes/quick-src/
一定要注意格式哦。上面一行末尾如果没有 需要添加一个“\”
第三步
接下来就是加密图片了。
在引擎目录下/quick/bin/下面 有个pack_files.sh 我们就是用到这个东西来加密了。这个跟lua加密差不多。我简单说一下流程。
1.写一个配置文件.php的。很简单。

切记 记好你的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和签名的。切记!!!
cocos2dx资源和脚本加密quick-lua3.3final的更多相关文章
- 【Quick 3.3】资源脚本加密及热更新(一)脚本加密
[Quick 3.3]资源脚本加密及热更新(一)脚本加密 注:本文基于Quick-cocos2dx-3.3版本编写 一.脚本加密 quick框架已经封装好加密模块,与加密有关的文件在引擎目录/quic ...
- 【Quick 3.3】资源脚本加密及热更新(三)热更新模块
[Quick 3.3]资源脚本加密及热更新(三)热更新模块 注:本文基于Quick-cocos2dx-3.3版本编写 一.介绍 lua相对于c++开发的优点之一是代码可以在运行的时候才加载,基于此我们 ...
- 【Quick 3.3】资源脚本加密及热更新(二)资源加密
[Quick 3.3]资源脚本加密及热更新(二)资源加密 注:本文基于Quick-cocos2dx-3.3版本编写 一.介绍 在前一篇文章中介绍了代码加密,加密方式是XXTEA.对于资源文件来说,同样 ...
- Unity Mono脚本 加密
加密环境 引擎版本:Unity3D 5.3.4 及更高版本 (使用Mono而并非IL2CPP) 操作系统:CentOS 6.2(Final) 加密环境:Android.IOS(暂定) 加密对象:C#源 ...
- SWF加解密资源索引之加密混淆篇【转】
============================ SWF加解密资源索引之加密混淆篇 ============================ [心得] swf加密混淆器(带源码) http:/ ...
- 小白读iOS冗余资源扫描脚本
随着公司项目的不断功能迭代,项目的体积越来越大,各种瘦身策略迫在眉睫.由于平时使用Linux高级命令和 shell脚本的机会不多,之前学的知识一下子想起来很难.所有趁着这次看脚本,重新温习一下. 本文 ...
- iOS项目冗余资源扫描脚本
iOS项目冗余资源扫描脚本 随着iOS项目的版本不断迭代,app中冗余文件会越来越多,app size也持续增加,是时候需要对app冗余资源进行检测,对app进行瘦身. 使用方法: 1. 运行环境为m ...
- shell 脚本加密
日常编写shell脚本时会写一些账号和密码写入脚本内,但是不希望泄露账号密码,所以对shell脚本进行加密变成可执行文件. 主要使用 shc 对 Linux shell 脚本加密,shc是一个专业的加 ...
- shell脚本加密方式
--作者:飞翔的小胖猪 --创建时间:2021年5月17日 --修改时间:2021年5月17日 说明 shell作为Linux操作系统中原生的语言环境,由于其简单.便捷.可以移植等特性常被运维人员作为 ...
随机推荐
- Linux bash运维操作日志审计(单服务器)
目前公司有几台机器比较重要,需要把所有用户的操作记录下来,于是就是参照资料来完成 1. vim /etc/profile.d/oplogrc.sh logdir=/opt/oplog userdir= ...
- 数据块损坏(block corruption)
分为物理损坏和逻辑损坏-物理损坏一般指数据块头部不可以访问.数据块校验值不合法,数据块格式不再是oracle承认的格式-逻辑损坏一般是在物理性结构完整的情况下,数据的内容在含义上不正确,比如保存了不允 ...
- 到底UDP和TCP是什么个概念?
今天在论坛看到一牛人对tcp和udp的解释和区分,突然间恍然大悟. 以下全为拷贝. 在现实生活中,“要想富,先修路”:同时人总要“居有定所”,于是盖起了N多的房子.但是当你和同事商量好去做客的时候却发 ...
- php基础语法学习汇总
常量学习: <?php # function demo function sum($x,$y){ $z=$x+$y; return $z; } echo sum(1,2); #define de ...
- Ways to access Oracle Database in PostgreSQL
Today, organizations stores information(data) in different database systems. Each database system ha ...
- 树形dp Anniversary party(HDU1520)
题意:给出一棵树,(上下级关系)每个节点都有一个权值,要求选出一些节点满足这些节点任意连个点都不是直接的上下级关系,可以得到的最大权值是多少? 分析:对于每个点有两个状态选或者不选,用状态数组dp[u ...
- jquery 实现ajax 上传文件的功能(使用插件 ajaxfileupload)
js文件的下载地址 : http://files.cnblogs.com/wangqc/ajaxfileupload.js 页面代码: <html> <!-- 引入相关的js文 ...
- 为什么接口要规定成员变量必须是public static final的呢?(转)
在interface里面的变量默认都是public static final 的.所以可以直接省略修饰符: String param="ssm"://变量需要初始化 为什么接口要规 ...
- run()和star()区别
run()和star()区别 run()-->只是thread类的一个普通方法调用 star()-->用来启动线程,实现多线程运行
- 浅谈JavaScript计时器
JavaScript计时器 1.什么是JavaScript计时器? 在JavaScript中,我们可以在设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行. 2.计时器类型 一次性计时器:仅在 ...