1. 程式人生 > >quick-cocos2d-x 加密全過程解析

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

最近有好幾個朋友在問我quick指令碼和資源加密的相關問題,看來很多人還是有不解的地方,現在就詳細介紹一下,免得各位折騰許久。
1. 對資源和指令碼加密的操作,本文就不介紹,直接執行幾個命令列就搞定,具體可以參考官方的教程。
2. 對指令碼的解密也很簡單,直接在按照官方說的設定的key和簽名即可,不用再修改任何程式碼。
3. 資源解密,這個修改的地方有點多。首先匯入標頭檔案搜尋路徑,$(SRCROOT)/../../runtime-src/Classes/quick-src
3.1 單個圖片的解密,修改CCImage.cpp檔案,
3.1.1 匯入標頭檔案,#include "extra/apptools/HelperFunc.h"

3.1.2 找到函式 bool Image::initWithImageFile(const std::string& path)
        修改Data data = FileUtils::getInstance()->getDataFromFile(_filePath); 為Data data = HelperFunc::getData(_filePath);
        此時就完成了單個圖片的解密過程。
3.2 csb檔案解密,修改CSLoader.cpp檔案,
3.2.1 匯入標頭檔案,#include "extra/apptools/HelperFunc.h"
3.2.2 找到函式Node* CSLoader::nodeWithFlatBuffersFile(const std::string &fileName)

        修改Data buf = FileUtils::getInstance()->getDataFromFile(fullPath);為Data buf = HelperFunc::getData(fullPath);
        此時就完成了對csb檔案的解密過程。
3.3 plist檔案解密,修改CCFileUtils-apple.mm    特別注意,本文是針對xcode修改的,Android修改原理差不多
3.3.1 匯入標頭檔案,#include "extra/apptools/HelperFunc.h"
3.3.2 找到函式 ValueMap FileUtilsApple::getValueMapFromFile(const std::string& filename)

        替換NSDictionary* dict = [NSDictionary dictionaryWithContentsOfFile:path];為以下程式碼
        Data buf = HelperFunc::getData(filename);
        NSData *data = [[[NSData alloc] initWithBytes:buf.getBytes() length:buf.getSize()] autorelease];
        NSPropertyListFormat format;
        NSString *error;
        NSMutableDictionary *dict = (NSMutableDictionary *)[
                                                         NSPropertyListSerialization propertyListFromData:data
                                                         mutabilityOption:NSPropertyListMutableContainersAndLeaves
                                                         format:&format
                                                         errorDescription:&error];
         此時就完成對plist檔案的解密過程。