项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行。
下面是使用原生的lua解释器编译字节码:
1、新建一个名为1.lua的文件,里面只有一句话print("Hello Lua"),新建一个空的out.lua脚本文件
2、开始--运行--cmd
3、luac -o out.lua 1.lua
注: luac -o [编译后脚本名] [脚本名],必要时带上脚本路径,如:

回车之后,再打开out.lua就可以看到编译好的字节码了

然后实验一下,执行这个字节码脚本,可以看到lua原生的解释器可以直接解析luac编译出来的bytecode脚本,很方便!

重点:
做完了以上的一系列之后,我照着这个方法编译项目中的脚本,然后在cocos2dx环境下使用,发现不行!于是又查了一下资料,发现2dx使用的是luajit,lua原生编译出来的bytecode和luajit是不兼容的,所以照着上面方法编译出来的bytecode脚本无法在2dx中使用。
解决这个问题其实很简单,就是用2dx自带的luajit编译lua脚本,下面附上luajit编译bytecode的方法:
1、在cocos2d-x-2.2.3\scripting\lua\luajit\LuaJIT-2.0.1\src目录下有个msvcbuild.bat批处理文件,需要先把luajit.exe这个东西给编译出来。
2、打开visual studio的命令行工具,这个只要装了vs都会有,在安装目录里面可以找到。
3、用vs的命令行工具cd到luajit的src目录
4、执行msvcbuild.bat批处理文件,编译出luajit.exe

编译完成之后,会在src目录下生成一系列文件,其中有一个luajit.exe

接下来就可以使用luajit.exe编译lua脚本的bytecode了:luajit -b [脚本名] [编译后的脚本名],执行完后会在src目录下生成一个已经编译成bytecode的jit.lua文件

 
下面把编译之后的jit.lua放在2dx中试一下,以HelloLua工程为基础,把jit.lua放到\samples\Lua\HelloLua\Resources下,修改AppDelegate.cpp中的lua调用为std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("jit.lua");
运行结果为:

 
至此,luajit编译bytecode加密已完成!

严重注意:例子中,我把编译前后的脚本名字取的不一样,是为了让大家看出差异化来,实际在项目中使用的时候,脚本的名字编译前后最好都一致,不然在脚本中相互require的时候可能会出现问题!



一个一个转换脚太麻烦了,分享一个bat批处理,可以批量转换一个文件夹中的所有lua文件(此文件夹中只能包含lua文件)
@echo off
if exist out rd /s /q out
mkdir out
:input
cls
set input=:
set /p input= 拖入要编译的lua文件夹:
set "input=%input:"=%"
if "%input%"==":" goto input
if not exist "%input%" goto input
for %%i in ("%input%") do if /i "%%~di"==%%i goto input
pushd %cd%
cd /d "%input%">nul 2>nul || exit
set cur_dir=%cd%
popd
set /a num = 0
for /f "delims=" %%i in ('dir /b /a-d /s "%input%"') do (set /a num += 1 & luajit -b %%~fsi out/%%~nxi & echo %%~nxi)
echo 编译脚本数量:%num%
ATTRIB out/*.* +R
pause

---将以上代码copy到文本中,后缀改为bat,放到cocos2d-x-2.2.3\scripting\lua\luajit\LuaJIT-2.0.1\src下

编译后,文件夹内所有的lua脚本将被批量编译为字节码,并保存在LuaJIT-2.0.1\src\out目录下!

lua 加密的更多相关文章

  1. 【转】UNITY之LUA加密

    来自:Lua加密 两种方式:一种用luac,一种用luajit luac加密: 1.lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,去官网下载Lua源代码包(http:/ ...

  2. Cocos2d-x--iOS平台lua加密成luac资源方法和Jsc文件<MAC平台开发试用--windows平台暂未研究>

        首先要说.近期真的是太忙了.好久没写博客了,今天正好有空,就写一下近期在写游戏中的一些发现:     话说,基于Cocos2dx 引擎 + 脚本写游戏,至今的感触就是能够进行增量更新和即时编译 ...

  3. cocos2dx lua 加密

    cocos2dx-lua项目发布时,为了保护lua源码,需要对lua进行加密.通常分为两种方式:加密文件和编译为字节码. 1.加密文件 前提是你不用luajit,而使用lua.这样这种方法是真正加密, ...

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

    cocos luacompile cocos luacompile Overview Usage Available Arguments Samples Overview Compile the .l ...

  5. cocos进阶教程(3)Lua加密技术

    如果开发者不想让游戏中的资源或脚本文件轻易的暴露给其他人,一般会采用对文件进行加密的方式来保护文件或资源被盗用.Quick-Cocos2d-x 为开发者提供了xxtea加密算法,用来对脚本文件及资源进 ...

  6. Lua加密

    两种方式:一种用luac,一种用luajit luac加密: 1.lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,去官网下载Lua源代码包(http://www.lua. ...

  7. cocos lua 加密方案

    cocos2d使用的是luajit,lua原生编译出来的bytecode和luajit是不兼容的,所以直接用luac法编译出来的bytecode脚本无法在cocos2d中使用. 目前所指的解决方案有2 ...

  8. cocos2dx for lua 加密图片

    图片加密的方法有很多种,在cocos2dx中,经常会使用TexturePacker来加密图片,方法如下: 打开TexturePacker,点击Add Sprite添加图片,在output栏下的Text ...

  9. 出售一套Unity + Lua热更新框架代码

    出售一套Unity + Lua的客户端框架代码,功能有资源管理.网络通信.配置文件解析.热更新.文件读写.Lua加密揭秘.UI框架.打包工具.编辑器工具等,已经在多个实际项目(已上线)中使用.代码优雅 ...

随机推荐

  1. chrome Provisional headers are shown错误提示

    1.一般出现这个错误是请求没有发送成功 可能原因:在上传文件或ajax上传时指定的timeout,过时时间小 其他资料: http://www.duanzhihe.com/575.html http: ...

  2. CentOS目录结构详解

    CentOS是文件管理系统,在CentOS中所有的程序都以文件形式存储.初学CentOS的朋友需要了解各个挂载点 目录的结构和作用.这样才能更好的去管理系统. CentOS的目录大体上可分为四类:管理 ...

  3. Tomcat6.0数据源配置

    涉及context.xml和server.xml http://blog.csdn.net/onlymilan/article/details/5493485

  4. ORA-00214: controlfile '/u01/app/oracle/oradata/[sid]/control01.ctl' version inconsistent with file '/u01/app/oracle/oradata/[sid]/control03.ctl'

    Sample error: SQL> startupORACLE instance started. Total System Global Area 285212672 bytesFixed ...

  5. Python正则表达式一

    推荐 http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html#!comments 这篇博客超好,建议收藏. 不过对于正则表达式小白,他没 ...

  6. 【转】Qt之模型/视图

    [本文转自]http://blog.sina.com.cn/s/blog_a6fb6cc90101hh20.html   作者: 一去丶二三里 关于Qt中MVC的介绍与使用,助手中有一节模型/视图编程 ...

  7. 修改MYSQL最大连接数的2种方法

    mysql默认最大连接数是100,增加加默认MYSQL连接数的方法有两个 方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini(windows) 或 my.cnf(linux环境)查找 ...

  8. Linux入门 (笔记)

    Man can conquer nature. "人定胜天" 一.基本操作   1.重要快捷键 Tab 补全命令.目录.参数.文件名等 Ctrl+c 强制终止当前的程序 Ctrl+ ...

  9. linux学习第一天(X window 及 语系查询设置)

    前言: 在写这篇博文之前,我已经详细阅读了<鸟哥的Linux私房菜>,但是实践并不深入,只是单纯的为了了解常用的命令,扩展自己的知识广度.看过一遍感觉收获还是有的,但是并不是很精通.因此, ...

  10. jQuery中的$("#my_id").html()中一点要注意的

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAA3CAIAAAB4jZ1xAAAJdUlEQVR4nO2dPU/rPBTHn2/VoVMrXZ