cocos2dx 3.xLua脚本加密解密
2016-03-30 10:13
766 查看
使用LUA脚本开发游戏有着诸多的优势,动态更新,不需要考虑内存和数据类型等等。但是LUA脚本的安全性问题却似的许多开发者非常苦恼。
我这两天因为LUA脚本加密的问题苦恼了好久,经过了两天的努力,竟然在Cocos2d的官方找到了一套完整的解决方案,在此介绍给大家希望有所帮助。
正文开始:
首先,我们要先对LUA脚本进行编译、加密和签名。有幸的是,我们不需要自己去进行:
[cpp] view
plain copy
cocos luacompile -s /Users/archer/Desktop/CocosPro/CocosLuaGameNetTest001/src -d /Users/archer/Desktop/CocosPro/CocosLuaGameNetTest001/src/erc -e -k Archer -b XXTEAScript
其中:
-s 是lua脚本所在路径
-d 是编译好的lua脚本存放路径(编译后的lua脚本会变成.luac不用担心原来的lua脚本文件被覆盖)
-e 表示对脚本进行加密
-k 是脚本加密的KEY
-b 是脚本加密的签名(Cocos2d通过检查是否有签名来判断脚本是否需要解密运行)
[cpp] view
plain copy
cocos luacompile -s ./projects/MyLuaGame/src -d ./projects/MyLuaGame/src -e -k MyLuaKey -b MyLuaSign
然后查看帮助是:
[cpp] view
plain copy
cocos luacompile -h
参数详细说明:
在对脚本编译和加密的工作完成后,我们还需要在AppDelegate中,设置下脚本解密的KEY和Sign。
打开AppDelegate.cpp文件,大约56行位置:
[cpp] view
plain copy
<span style="font-size: 18px;"> </span> auto engine = LuaEngine::getInstance();
ScriptEngineManager::getInstance()->setScriptEngine(engine);
LuaStack* stack = engine->getLuaStack();
stack->setXXTEAKeyAndSign("Archer", strlen("Archer"), "XXTEAScript", strlen("XXTEAScript"));//这里
//register custom function
//LuaStack* stack = engine->getLuaStack();
//register_custom_function(stack->getLuaState());
#if (COCOS2D_DEBUG>0)
if (startRuntime())
return true;
#endif
stack->setXXTEAKeyAndSign("Archer",strlen("Archer"),"XXTEAScript",strlen("XXTEAScript"));
两个Archer的位置是KEY(即编译时的-k),两个XXTEAScript的地方是SIGN(即编译时的-b)
好了就是这样,感谢大家的关注。
最后一步不要忘,移除没有加密的*.lua文件~只包含编译之后的luac就够了~
PS:菜鸟第一次推荐到主页,大神们看看就好,轻喷……不要狠心打击一个菜鸟的积极性……
重要更新![2014.12.19]
由于iphone6 和 5s的 64位架构上是不支持luajit编译的,所以只能使用lua脚本运行,不能用luajit编译后的字节码。
所以需要在 上边命令后加一行 --disable-compile 以禁止cocos工具将lua进行编译,这样就只通过xxtea加密代码,但是不编译啦~妥妥的!
示例:
[cpp] view
plain copy
cocos luacompile -s /Users/archerpeng/Documents/CocosProjects/CocosProjectLuaXXteaTest/src -d /Users/archerpeng/Documents/CocosProjects/CocosProjectLuaXXteaTest/src -e -k Archer -b XXTEAScript --disable-compile
如果你所用的版本没有--disable-compile 这个参数
可以下载最新版本的cocos 然后拷贝一个过去,路径是:
/cocos2d-x-3.3/tools/cocos2d-console/plugins/project_compile/project_compile.py
我这两天因为LUA脚本加密的问题苦恼了好久,经过了两天的努力,竟然在Cocos2d的官方找到了一套完整的解决方案,在此介绍给大家希望有所帮助。
正文开始:
首先,我们要先对LUA脚本进行编译、加密和签名。有幸的是,我们不需要自己去进行:
[cpp] view
plain copy
cocos luacompile -s /Users/archer/Desktop/CocosPro/CocosLuaGameNetTest001/src -d /Users/archer/Desktop/CocosPro/CocosLuaGameNetTest001/src/erc -e -k Archer -b XXTEAScript
其中:
-s 是lua脚本所在路径
-d 是编译好的lua脚本存放路径(编译后的lua脚本会变成.luac不用担心原来的lua脚本文件被覆盖)
-e 表示对脚本进行加密
-k 是脚本加密的KEY
-b 是脚本加密的签名(Cocos2d通过检查是否有签名来判断脚本是否需要解密运行)
[cpp] view
plain copy
cocos luacompile -s ./projects/MyLuaGame/src -d ./projects/MyLuaGame/src -e -k MyLuaKey -b MyLuaSign
然后查看帮助是:
[cpp] view
plain copy
cocos luacompile -h
参数详细说明:
参数 | 允许的参数 | 例子 | 描述 | 必要 |
---|---|---|---|---|
-h, --help | 无 | 无 | 显示说明 | 否 |
-s, --src | 源码路径 | ./projects/MyLuaGame/src | 所需要编译和加密的源码的路径 | 是 |
-d, --dst | 编译后文件路径 | ./projects/MyLuaGame/src | 源码编译或加密后保存的路径 | 是 |
-e, --encrypt | 无 | 无 | 允许对编译后脚本进行加密 | 否 |
-k, --encryptkey | 任意字符串 | ArcherPeng | 加密所用的KEY | 否 |
-b, --encryptsign | 任意字符串 | XXTEAScript | 加密所有的签名 | 否 |
打开AppDelegate.cpp文件,大约56行位置:
[cpp] view
plain copy
<span style="font-size: 18px;"> </span> auto engine = LuaEngine::getInstance();
ScriptEngineManager::getInstance()->setScriptEngine(engine);
LuaStack* stack = engine->getLuaStack();
stack->setXXTEAKeyAndSign("Archer", strlen("Archer"), "XXTEAScript", strlen("XXTEAScript"));//这里
//register custom function
//LuaStack* stack = engine->getLuaStack();
//register_custom_function(stack->getLuaState());
#if (COCOS2D_DEBUG>0)
if (startRuntime())
return true;
#endif
stack->setXXTEAKeyAndSign("Archer",strlen("Archer"),"XXTEAScript",strlen("XXTEAScript"));
两个Archer的位置是KEY(即编译时的-k),两个XXTEAScript的地方是SIGN(即编译时的-b)
好了就是这样,感谢大家的关注。
最后一步不要忘,移除没有加密的*.lua文件~只包含编译之后的luac就够了~
PS:菜鸟第一次推荐到主页,大神们看看就好,轻喷……不要狠心打击一个菜鸟的积极性……
重要更新![2014.12.19]
由于iphone6 和 5s的 64位架构上是不支持luajit编译的,所以只能使用lua脚本运行,不能用luajit编译后的字节码。
所以需要在 上边命令后加一行 --disable-compile 以禁止cocos工具将lua进行编译,这样就只通过xxtea加密代码,但是不编译啦~妥妥的!
示例:
[cpp] view
plain copy
cocos luacompile -s /Users/archerpeng/Documents/CocosProjects/CocosProjectLuaXXteaTest/src -d /Users/archerpeng/Documents/CocosProjects/CocosProjectLuaXXteaTest/src -e -k Archer -b XXTEAScript --disable-compile
如果你所用的版本没有--disable-compile 这个参数
可以下载最新版本的cocos 然后拷贝一个过去,路径是:
/cocos2d-x-3.3/tools/cocos2d-console/plugins/project_compile/project_compile.py
相关文章推荐
- cocos2dx 外观者模式
- cocos学习心得2
- Cocos2d-x 多分辨率适配完全解析
- Cocos2d-X学习——Android移植,使用第三方库.so被删掉问题
- Cocos2d-JS坐标系
- cocos2dx显示sprite的矩形框
- cocos2dx 3.1创建工 mac
- cocos2d 中UserDefault在windows平台下的路径问题
- Win7 + vs2012 + cocos2d-x2.2 配置开发环境
- cocos2dx 管理者模式
- cocos2dx 工厂模式
- 使用Cocos2d-x的LuaBridge接入OC代码时需要注意的问题
- Cocos2dx动作篇
- cocos2d 3.10环境搭建
- COCOS学习笔记--复选框CheckBox及其控件属性
- cocos 2dx 更新函数
- cocos2dx适配方案新解——秒杀所有分辨率
- 使用 Cocos2d-x 和粒子编辑器实现场景特效
- cocos2d-js 免安装在线版 粒子编辑器 particle editor particle builder 兼容pex和plist
- cocos2d-x3.9 默认是 gnustl_static 配置,但是 这个库缺少c++的基础功能... c++_static 功能全面些