1. 程式人生 > >quick-cocos2d-x原始檔編譯及加密詳解

quick-cocos2d-x原始檔編譯及加密詳解

quick-cocos2d-x是用lua指令碼來寫的,而lua是明文形式,如果不對指令碼進行處理,那麼我們所寫的程式碼將可能暴露給別人(apk和ipa都是簡單的zip包裝)。
quick-cocos2d-x框架為我們提供了一個可編譯和加密程式碼的工具compile_scripts.sh(
目前只提供了mac版 ),它位於quick-cocos2d-x/bin/compile_scripts.sh 。下面將對其進行詳細的介紹。 

一、安裝luajit 
lua指令碼的編譯是通過luajit來執行的,如果你之前沒有安裝過luajit的話,執行compile_scripts.sh會出現下面的提示: 
 
下面將介紹如何安裝luajit。

 
1、執行<path>/quick-cocos2d-x/bin/install_luajit.sh <path>為你具體的路徑,請自行替換 這個時候會執行luajit的構建操作。 
2、完成構建之後將進行安裝,安裝之前會叫你輸入系統賬戶密碼,如下圖: 
 
3、之後就是安裝過程了,完成之後會出現下圖這樣的介面: 
 
恭喜你完成了第一步。 

二、示例 
我們先來執行一個示例吧。這個將幫助你瞭解編譯的過程。 
我們做的很簡單,就是把程式碼編譯成一個zip包,並把它放置到res目錄下(framework_precompiled.zip也在此目錄)。 
1、在bash下,設定當前工作目錄到你遊戲的目錄下
,如:

1 cd /Users/myname/mygames/game01

2、執行 compile_scripts.sh 

1 /Users/myname/lua/tools/quick-cocos2d-x/bin/compile_scripts.sh -i scripts -o res/game.zip

生成會顯示出具體的資訊,如引數是什麼、原始碼資料夾地址、生成了什麼檔案,生成檔案的位置等等,如下圖: 
 
之後就會看到game.zip在res目錄下了,解壓(不是必須操作,只是為了看看裡面有什麼)之後發現: 
 
它生成了一個個的二進位制檔案,檔名已經包含了包名。 
到這裡你也一定會問,命令中-i,-o這些引數是什麼意思啊?還有哪些其它的引數啊

 ?下面我們將對其進行詳解。 

三、引數詳解 
compile_scripts.sh中帶有不少的引數,詳情如下: 
1、 -h 幫助。顯示引數的解釋及使用,英文的。 
2、-i 原始碼目錄 
3、-o 輸出檔案或目錄 
4、-p 包字首 
5、-x 不包含在內的包。如果你有些原始檔不想被編譯進去的話,將會用到這個引數,只能設定包(對應資料夾),不能指定到檔案多個包的話用,(逗號)隔開。示例:-x app.test,server,指的是app/test/.*,server/.* 這兩個目錄下的所有檔案都不會被編譯。
注:經測試,目前這個引數沒有作用,已報告給作者,請等待修復。
 
6、-m 編譯模式。有兩個值  
-m zip 預設,生成的是zip格式檔案; 
-m files 生成的是一個個檔案,不打包,這個時候-o引數指的就是輸出的目錄。 
7、-e 加密模式。可以對編譯後的檔案再進行 XXTEA 加密,有兩個值: 
-e xxtea_zip 對應-m zip,對打包後的zip格式檔案進行加密,之後再打包成zip格式。 
-e xxtea_chunk 對編譯後的檔案加密,最後打不打包取決於-m。 
注:xxtea_zip一定要與-m zip編譯模式對應,不然會提示出錯 
8、-ek 加密金鑰。對-e有效,且設定了-e之後一定要設定-ek。 
9、-es 加密簽名。對-e有效,預設值為"XXTEA",這個只是為了讓引擎知道檔案是否被加密過,意義不大,所以可不設定。 
下面是一個編譯及加密的例子:

1 compile_scripts.sh -i scripts -o res/game.zip -e xxtea_zip -ek aaa -es XT

10、-ex 編譯後的檔案的字尾名。對-m files有效,預設值為"lua"。 
11、-c 從一個檔案載入引數列表 
12、-q 生成過程不輸出資訊 

四、修改 AppDelegate .cpp 
我們編譯了程式碼,並且把main.lua檔案也包含進去了,我們要修改c++中的程式碼才能讓程式正常執行。這個在 AppDelegate .ccp檔案中修改,把applicationDidFinishLaunching ()方法改成如下:

01 bool AppDelegate::applicationDidFinishLaunching()
02 {
03 ...
04
05 CCLuaStack *pStack = pEngine->getLuaStack();
06
07 // 如果設定了 -e 和 -ek 要加上下面這句
08 // pStack->setXXTEAKeyAndSign("aaa", 3);
09 // 如果設定了 -e 和 -ek -es 則要加上下面這句
10 pStack->setXXTEAKeyAndSign("aaa", 3, "XT", 2);
11 // load framework
12 pStack->loadChunksFromZip("res/framework_precompiled.zip");
13 pStack->loadChunksFromZip("res/game.zip");
14 pStack->executeString("require 'main'");
15
16 return true;
17 }

注意:一直有朋友不太注意,
pStack->setXXTEAKeyAndSign("aaa", 3, "XT", 2);
這一句的第二和第四個引數都是前一個引數的長度,並不是固定值,如可以這樣
pStack->setXXTEAKeyAndSign("abcd", 4, "SIGNCODE", 8);

最後需要注意的是:編譯釋出程式的時候要記得把原始碼資料夾從專案中移除(不是刪除,只是不包含進專案裡),不然一切都白費了

到此整個過程結束,我們的程式碼已經被很好的保護起來了。

相關推薦

quick-cocos2d-x原始檔編譯加密

quick-cocos2d-x是用lua指令碼來寫的,而lua是明文形式,如果不對指令碼進行處理,那麼我們所寫的程式碼將可能暴露給別人(apk和ipa都是簡單的zip包裝)。 quick-cocos2d-x框架為我們提供了一個可編譯和加密程式碼的工具compile_scr

quick-cocos2d-x 多解析度適配

http://quick.cocoachina.com/?p=1436 多種解析度的適配一直都是一個蛋疼的問題,各家公司可能都有自己的一套方案。今天我為大家介紹的是我們在多款遊戲裡實踐後的解決方案,相對來說成本和實現難度都較低,效果也很不錯。 多種解析度適配的原理

Cocos2dX遊戲開發之CCTableView(十一)(附原始碼)

本來很早就想寫關於CCTableView的文章,但是在基本功能實現之後呢,專案需求增加導致對這個控制元件的研究必須更加深入一點. 好的,現在開始介紹一下這個控制元件,在Cocos2d—X引擎中,這是一個仿製iOS裡面的NSTableView的一個控制元件。 S1,使用這個

RxJava2.x的整合用法

目錄 主頁 中文資料 Rxjava是什麼 首先要了解什麼是觀察者 Android 開發中一個比較典型的例子是點選監聽器 OnClickListener 。對設定 OnClickListener 來說, View 是被

Elasticsearch6.2.2 X-Pack部署使用

X-Pack已經開源,預計Elasticsearch6.3版本會全面整合,不再收費。 趕緊體驗一下強大的X-pack吧! 1、 X-Pack 概覽 X-Pack 簡介 1)利用 X-Pack 拓展可能性。 X-Pack 是集成了多種便捷功能的單個外

tinyxml在linux和windows下的編譯使用

一:摘要1.XML全稱EXtensible Markup Language,翻譯為可擴充套件標記語言,XML檔案通常就是一個文字檔案,可以使用任何編碼2.TinyXML是一個開源的C++用來處理XML的第三方庫 二:說明1. 2. 部落格內容及所有程式碼均是在該版本下編譯

(轉)quick-cocos2d-x圖片資源加密(續)

player AD sign 信息 text 語句 osc osi pan 摘要: 對在quick-cocos2d-x上實現的資源加密方法的補充 前篇: quick-cocos2d-x圖片資源加密 讓quick-cocos2d-x支持加密的plist文件 通過前篇的

(轉)quick-cocos2d-x圖片資源加密

做了 zip ali tran -o AD nor lena s2d 摘要: 在quick-cocos2d-x上實現的一種圖片資源加密的方法,現已經加入官方最新版本之中 ###quick-x已經支持用XXTEA加密方式對腳本文件進行加密。在此基礎上,自己做了一些工作,對

quickquick-cocos2d-x匯入sproto並重新編譯player

Windows系統下。quick-cocos2d-x-master 因為一些原因要使用sproto,所以需要匯入sproto並編譯一個新的player。 1、獲取sproto。這裡你可以選擇在github搜尋skynet專案,然後在\lualib-src下sproto資料

quick-cocos2d-x中的ListView

在quick-cocos2dx中建立ListView的大步驟有2步: 1 建立一個ListView 2 建立ListView的Items 首先是建立一個ListView,ListView的建立與PageView一致,new 後面跟table,因此建立的引數順序是沒有問題的。

quick-cocos2d-x 圖片資源加密

quick-x已經支援用XXTEA加密方式對指令碼檔案進行加密。在此基礎上,自己做了一些工作,對圖片資源進行了XXTEA加密,現分享給大家。 (2014.5.30加註:quick-x的2.2.3版本已經集成了我遞交的pr,現在官方版本程式碼與文章中類似) 首先我們要有

quick-cocos2d-x 加密全過程解析

最近有好幾個朋友在問我quick指令碼和資源加密的相關問題,看來很多人還是有不解的地方,現在就詳細介紹一下,免得各位折騰許久。1. 對資源和指令碼加密的操作,本文就不介紹,直接執行幾個命令列就搞定,具體可以參考官方的教程。2. 對指令碼的解密也很簡單,直接在按照官方說的設定

[quick-cocos2d-x lua學習] 官網之多解析度適配

感覺官網的這篇文章很不錯,為了自己日後檢視方便,就轉過來了~ 下面是正題: 多種解析度的適配一直都是一個蛋疼的問題,各家公司可能都有自己的一套方案。今天我為大家介紹的是我們在多款遊戲裡實踐後的解決方案,相對來說成本和實現難度都較低,效果也很不錯。 多種解析度適配的

Cocos2d-x教程(32)-quick-cocos2d-x 加密

歡迎加入Cocos2d-x 交流群:193411763轉載時請註明原文出處 :http://blog.csdn.net/u012945598/article/details/38870705開發環境:Xcode 5.0 + quick-cocos2d-x-2.2.5如果開發者

quick-cocos2d-x教程1:在window上創建第一個項目文件夾,並制作helloworld

項目 編碼 rip pla 命令模式 utf-8 cape tps quick 說明:此教程是針對cocos2dx 2.0系列的,3.0的版本號,如今還沒有公布出來。 1)首先從github.com把這個項目下載到本地。然後裝到d盤的根文件夾,並設置文件夾路徑為d:\

quick-cocos2d-x教程7:程序框架內framework文件夾分析

cocos2dx 網絡相關 ini 分析 bug audio 細致 bsp cocos2d-x framework是整個框架執行時的實現代碼。所以一定要細致看這個文件夾的文件。我們先從framework文件夾中的init.lua分析起走。 init.lua文件裏,框架

linux下開發,解決cocos2d-x編譯出現的一個小問題, undefined reference to symbol &#39;pthread_create@@GLIBC_2.2.5&#39;

water span x86 code bject data- ace 技術分享 inux 解決cocos2d-x中編譯出現的一個小問題 對於cocos2d-x 2.×中編譯中,若頭文件裏引入了#include "cocos-ext.h",在進行C++編譯的時候會遇到例

quick-cocos2d-x遊戲開發【2】——項目結構分析、創建新場景

fileutil 遊戲 log world plain ack 設計 avi sca 創建完一個新項目之後,我們能夠簡單的看一看這個項目的文件組成,有這麽一個文件層次結構 幾個proj.*目錄就不用說了,是相應的平臺的解決方式,res專門存放我們的遊戲資源

安裝Sublime配合quick-cocos2d-x開發

reg exists asc star ipp orm attr tracking trac 下載地址 Sublime下載地址 安裝 Package Control 在Sublime中,按Ctrl+~打開控制臺,輸入: Subli

quick-cocos2d-x教程3:程序框架內文件夾分析之docs文件夾

我們 項目執行 2.3 cocos dsc pro title explorer deb 如今我們分析框架中的docs文件夾。看看這個文檔文件夾中,究竟放了那些對我們實用的東西。 docs文件夾分析 UPGRADE_TO_2_2_3.md 就是講升級的變化。