1. 程式人生 > >cocos lua 加密與解密 混淆 (版本cocos3.4)

cocos lua 加密與解密 混淆 (版本cocos3.4)

1.0 cocos luacompile 用法

我用的普通的cocos2d lua,沒用quick,quick好像可以對整個資源包括影象和音訊都加密,打包成zip。但我沒用quick.看了下luacompile 的 help,比較簡單啊。

先在專案根目錄下建立了一個out的資料夾,然後就用這個命令試了下:

cocos luacompile -s src/  -d out/

比預想的順利,在out目錄下看到了很多luac檔案。正如命令裡說的,支援子目錄。網上說luac還是會被反編譯。就加上了key。

cocos luacompile -s src/ -d out/ -e -k testKey123456 -b testSign123456

還需要在AppDelegate.cpp檔案的 applicationDidFinishLaunching方法中加入setXXTEAKeyAndSign。這點它那個luacompile 的help就沒提了,這是第一個坑。

LuaStack* stack = engine->getLuaStack();
    stack->setXXTEAKeyAndSign("testKey123456", strlen("testKey123456"), "testSign123456", strlen("testSign123456"));

    if (engine->executeScriptFile("src/main.lua"
)) { return false;

2.不支援64bit

第二個坑馬上來了:剛開始在IPhone4S模擬器執行好好的,IPhone5s就漆黑一片了。原來這樣把lua編譯後,雖然速度變快了,但還未支援64位系統,據說cocos2d 年底會給出luajit 64位解決方案,因為蘋果要求的啊。

然後因為這個問題我卡了一會兒。網上搜了了也沒什麼結果,都推薦使用Quick。遊戲都寫完了,轉Quick有點麻煩。

突然注意到luacompile help中最後一個選項:–disable-compile ,然後把命令改成下面這種:

cocos luacompile -s src/ -d out
/ -e -k testKey123456 -b testSign123456 --disable-compile


也是出來luac檔案,但只是簡單用XXTEA加密。這樣小遊戲完全夠用了。

查閱效果圖:
1408611270727806.png


1408611358113894.png


1408611473430844.png


專案測試:
 
    /// decode:
    const char * key = "testKey123456";
    int keylen = (int)strlen(key);
    const char * sign = "testSign123456";
    int signlen = (int)strlen(sign);
    Data srcInfo = FileUtils::getInstance()->getDataFromFile("BugAnt.luac");
    //decode:
    xxtea_long len = 0;
    unsigned char * result = xxtea_decrypt(srcInfo.getBytes() + signlen,
                                           (xxtea_long)srcInfo.getSize() - signlen,
                                           (unsigned char* )key,
                                           (xxtea_long)keylen,
                                           &len);
    printf("\n result: %s \n len; %ld",result,len);
讀取正常;