quick-lua中腳本和資源的加密

一、資源加密

版本號: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和簽名的。切記!!!


論壇原帖地址:

http://www.cocoachina.com/bbs/read.php?tid-282754-page-1.html

http://www.cocoachina.com/bbs/read.php?tid-282762.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章