• cocos2d-x lua 加密


    1. usage: cocos luacompile [-h] [-v] [-s SRC_DIR_ARR] [-d DST_DIR] [-e]  
    2.                         [-k ENCRYPTKEY] [-b ENCRYPTSIGN] [--disable-compile]  
    3.   
    4. 对 lua 文件进行加密和编译为字节码的处理。  
    5.   
    6. optional arguments:  
    7.   -h, --help            show this help message and exit  
    8.   -v, --verbose         更多输出信息。  
    9.   -s SRC_DIR_ARR, --src SRC_DIR_ARR  
    10.                         指定需要编译的 lua  
    11.                         文件路径,支持指定多个路径。  
    12.   -d DST_DIR, --dst DST_DIR  
    13.                         指定输出文件的路径。  
    14.   -e, --encrypt         开启 XXTEA 加密功能。  
    15.   -k ENCRYPTKEY, --encryptkey ENCRYPTKEY  
    16.                         指定 XXTEA 加密功能的 key 字段。  
    17.   -b ENCRYPTSIGN, --encryptsign ENCRYPTSIGN  
    18.                         指定 XXTEA 加密功能的 sign 字段。  
    19.   --disable-compile     关闭编译为字节码的功能。  

        我们主要用到-s,-d,-e,-k,-b以及--disable-compile这几个参数:

        -s就是你需要加密的lua脚本所在的目录。

        -d就是逆需要将加密后的lua脚本放置的目录。

        -e是开启XXTEA加密功能,如果不用这个参数,后面的也就不用了,这样子做是编译为字节码。

        -k是在-e开启的情况下使用,XXTEA加密算法的key字段,这个自己定,不要太长,但越复杂越好。

        -b是在-e开启的情况下使用,XXTEA加密算法的sign字段,这个自己定,不要太长,但越复杂越好。

        --disable-compile是关闭字节码编译。为什么要加这个?因为现有的cocos引擎使用的是luajit来编译字节码,它仅支持32位,不支持64位的机子(截止至2017.01数据),而苹果官方要求上传的app必须兼容arm64的机子,因此只能选择XXTEA加密,这种加密方式也是很不错的,算法小巧,在没有key和sign的情况下不易被破解,兼容32和64位,是目前用cocos开发唯一可取的加密方式。

        这个命令举个例子:

    [plain] view plain copy
    1. cocos luacompile -s /Users/xxx/src -d /Users/xxx/src0 -e -k testtt -b signnn --disable-compile  

        这条demo就是对src的所有lua脚本做key=testtt,sign=signnn的XXTEA加密,并关闭字节码编译。请注意,如果项目中除了lua脚本外,还有其他一些文件,比如plist,json,xml这些,是不会被编译的,实际跑的时候记得拷贝过去,保持源文件和目标文件具有一致性,否则会有问题的。

    mytest

    Lua 脚本加密

    1.cocos luacompile -s /Users/wangchengcheng/Documents/SelfZone/Cocos/MyGame/src -d /Users/wangchengcheng/Documents/SelfZone/Cocos/MyGame/gametools -e -k mygamekey -b mygamesign --disable-compile

    2.项目中使用

    bool AppDelegate::applicationDidFinishLaunching()
    {
    // set default FPS
    Director::getInstance()->setAnimationInterval(1.0 / 60.0f);

    // register lua module
    auto engine = LuaEngine::getInstance();
    if(!m_bInitLuaEngine){
    ScriptEngineManager::getInstance()->setScriptEngine(engine);
    lua_State* L = engine->getLuaStack()->getLuaState();
    lua_module_register(L);
    register_custom_function(L);
    register_all_packages();
    m_bInitLuaEngine = true;
    }

    setMySearchPath();

    LuaStack* stack = engine->getLuaStack();
    // default key "2dxLua"
    // default sign "XXTEA"
    string mygamekey = "2dxLua";
    string mygamesign = "XXTEA";
    bool useSelfEncrypt = true;
    if(useSelfEncrypt){
    mygamekey = "mygamekey";
    mygamesign = "mygamesign";
    }

    stack->setXXTEAKeyAndSign(mygamekey.c_str(), strlen(mygamekey.c_str()), mygamesign.c_str(), strlen(mygamesign.c_str()));
    if (engine->executeScriptFile("main.lua"))
    {
    return false;
    }
    return true;
    }

  • 相关阅读:
    【scala语言入门】二、匿名函数
    【scala语言入门】 一、apply与unapply
    关于timeOut超时后是否会回滚的思考
    [算法]-插入排序
    【oenCV系列】 写视频
    【Opencv系列】
    Factory Method模式精解(C++版本)
    Template Method模式精解(C++版本)
    Adapter模式精解(C++版本)
    迭代器模式精解(C++版本)
  • 原文地址:https://www.cnblogs.com/cci8go/p/7765842.html
Copyright © 2020-2023  润新知