cocos2dx 3.xLua脚本加密解密

使用LUA脚本开发游戏有着诸多的优势,动态更新,不需要考虑内存和数据类型等等。但是LUA脚本的安全性问题却似的许多开发者非常苦恼。

我这两天因为LUA脚本加密的问题苦恼了好久,经过了两天的努力,竟然在Cocos2d的官方找到了一套完整的解决方案,在此介绍给大家希望有所帮助。

正文开始:

首先,我们要先对LUA脚本进行编译、加密和签名。有幸的是,我们不需要自己去进行:

[cpp]  view plain  copy
  1. 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
  1. cocos luacompile -s ./projects/MyLuaGame/src -d ./projects/MyLuaGame/src -e -k MyLuaKey -b MyLuaSign  

然后查看帮助是:

[cpp]  view plain  copy
  1. 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中,设置下脚本解密的KEY和Sign。

打开AppDelegate.cpp文件,大约56行位置:

[cpp]  view plain  copy
  1. <span style="font-size: 18px;"> </span>   auto engine = LuaEngine::getInstance();  
  2.     ScriptEngineManager::getInstance()->setScriptEngine(engine);  
  3.   
  4.     LuaStack* stack = engine->getLuaStack();  
  5.     stack->setXXTEAKeyAndSign("Archer", strlen("Archer"), "XXTEAScript", strlen("XXTEAScript"));//这里  
  6.       
  7.     //register custom function  
  8.     //LuaStack* stack = engine->getLuaStack();  
  9.     //register_custom_function(stack->getLuaState());  
  10.       
  11. #if (COCOS2D_DEBUG>0)  
  12.     if (startRuntime())  
  13.         return true;  
  14. #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
  1. 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


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值