cocos2d使用的是luajit,lua原生编译出来的bytecode和luajit是不兼容的,所以直接用luac法编译出来的bytecode脚本无法在cocos2d中使用。

目前所指的解决方案有2个:

A.luajit加密:

1、官网下载luajit(http://luajit.org/luajit.html),解压,目录如下

2、在命令行中使用cd 进入luajit下src的目录,然后执行输入msvcbuild.bat,执行此批处理文件,编译出luajit.exe

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

此时即使把此路径加入环境变量是没用的,进行luajit加密命令的时候必须使用cd进入此目录(C:\Users\hengjingjing\Desktop\LuaJIT-2.0.4\src),因为luajit加密,必须是luajit.exe和src下的jit文件夹配合使用才管用!

如果unity项目用的是基于ulua扩展的其他lua版本(cstolua、slua),或者本身用的就是ulua,那么要用luajit加密方式,因为ulua底层就是用的luajit.可以看出:Luajit跨平台,满足于32位和64位(64位并不是所有平台),并且加密后的bytecode比luac生成的bytecode至少小40%,速度也是它的10倍多,总之luajit就是比lua原生的好.

此处提供了一个批处理工具实现快速的编译,来源于 https://blog.csdn.net/st_darkmoon/article/details/53168652 实现能够灵活指定输出目录,并且输出后按照源目录结构保存。这样除了拖动指定两次目录基本无需任何操作了。
@echo off
if exist out rd /s /q out
mkdir out  setlocal enabledelayedexpansion  cls
:input
set input=:
set /p input= 拖入要编译的lua文件夹:
if "%input%"==":" goto input
if not exist "%input%" goto input
set "input=%input:"=%"  

:output
set output=:
set /p output= 拖入要编译后输出的目标文件夹:  if "%output%"==":" goto output
if not exist "%output%" goto output  for %%i in ("%input%") do if /i "%%~di"==%%i goto input
pushd %cd%
cd /d "%input%">nul 2>nul || echo cmd was runing error
set cur_dir=%cd%
popd
set /a num = 0
echo 正在目标文件夹中创建对应目录结构:
for /r %input%  %%a in (*) do xcopy %%a %output% /t /s
echo 创建完成,开始编译lua代码:
for /f "delims=" %%i in ('dir /b /a-d /s "%input%"') do (set /a num += 1
set pt=%%~fi & set "pt=!pt:%input%=%output%!"
luajit -b %%~fi !pt!
echo 编译后: !pt!)
echo 编译脚本数量:%num%
ATTRIB %output%/*.* +R
echo 编译完成,开始删除空白文件夹:
for /f "delims=" %%i in ('dir /b /ad /s "%output%"') do (echo 删除空白目录信息: %%i & rd %%i /q)
pause  

B.XXTEA代码加密:

这种只是代码加密,由于luajit编译的字节码仅支持32位,所以此方案在IOS上是个不错的选择。cocos已经自带此加密功能了。

命令格式:  

usage: cocos luacompile [-h] [-v] [-s SRC_DIR_ARR] [-d DST_DIR] [-e]  [-k ENCRYPTKEY] [-b ENCRYPTSIGN] [--disable-compile]  对 lua 文件进行加密和编译为字节码的处理。  optional arguments:  -h, --help            show this help message and exit  -v, --verbose         更多输出信息。  -s SRC_DIR_ARR, --src SRC_DIR_ARR  指定需要编译的 lua  文件路径,支持指定多个路径。  -d DST_DIR, --dst DST_DIR  指定输出文件的路径。  -e, --encrypt         开启 XXTEA 加密功能。  -k ENCRYPTKEY, --encryptkey ENCRYPTKEY  指定 XXTEA 加密功能的 key 字段。  -b ENCRYPTSIGN, --encryptsign ENCRYPTSIGN  指定 XXTEA 加密功能的 sign 字段。  --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开发唯一可取的加密方式。

这个命令举个例子:

cocos luacompile -s /Users/xxx/src -d /Users/xxx/src0 -e -k testkey -b testSignment --disable-compile

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

转载于:https://www.cnblogs.com/gamesky/p/8698178.html

cocos lua 加密方案相关推荐

  1. FairGuard游戏Lua加密方案解析

    Lua以其小巧快速的特点已渐渐成为广大游戏开发者必修项,因此Lua的安全问题对于游戏开发者亦是迫在眉睫. 一. Lua 在手游中的使用场景 1.Cocos2dx 引擎 在 Cocos2dx 引擎中,可 ...

  2. lua 代码加密方案

    require 实现 require函数在实现上是依次调用package.searchers(lua51中是package.loaders)中的载入函数,成功后返回.在loadlib.c文件里有四个载 ...

  3. lua加密教程_我们相信加密! 教程

    lua加密教程 许多人认为加密是一个复杂的主题,这很难理解. 可以实现其某些方面,但是每个人都可以理解它在更高层次上的工作方式. 这就是我要处理的这篇文章. 用简单的术语解释它是如何工作的,然后使用一 ...

  4. 一种混合加密方案在软件授权中的应用

    拥有知识产权的软件一般采取软件保护手段,需要使用某种方式激活软件才可以使用.软件激活本质是对密文数据进行比较,而密文数据是由软件开发商根据目标机器的特征数据进行加密产生的.激活过程是在认证服务器或者目 ...

  5. dlp防泄密系统卸载_浙江好用的企业图纸防泄密软件推荐,局域网内部图纸透明加密方案...

    企业图纸防泄密 浙江加密软件 图纸透明加密方案 浙江优秀企业众多,企业图纸防泄密已经成为企业网络安全管理的重要方面,很多浙江的企事业单位为了保护单位图纸信息安全和局域网内部图纸信息安全而纷纷采用各种数 ...

  6. gpg加密命令 linux_加密方案 GNUPG amp; Yubikey

    随着时间流逝,我生活中出现的设备越来越多,密码也越来越多,因为记忆成本很多密码强度都不够高,不安全,所以迫切需要一款密码学加密工具来真正解放主动记忆密码,能够将密码存储在一个文件中并且保证这个文件绝对 ...

  7. php源代码保护——PHP加密方案分析解密还原

    前言 php是一种解释型脚本语言. 与编译型语言不同,php源代码不是直接翻译成机器语言.而是翻译成中间代码(OPCODE) ,再由解释器(ZEND引擎)对中间代码进行解释运行 . 在php源代码的保 ...

  8. 【转】UNITY之LUA加密

    [转]UNITY之LUA加密 来自:Lua加密 两种方式:一种用luac,一种用luajit luac加密: 1.lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,去官网下 ...

  9. 基于RSA的WEB前端密码加密方案

    受制于WEB页面源码的暴露,因此传统的对称加密方案以及加密密钥都将暴露在JS文件中,同样可以被解密. 目前比较好的解决方案是WEB页面全程或用户登录等关键环节使用HTTPS进行传输. 另外一种解决方案 ...

最新文章

  1. 判别模型和生成模型的区别
  2. 一文带你玩转设计模式之「责任链」
  3. JavaSript实现调用google地图输入经度,纬度移动到该点,同时对点做标记
  4. 【深度学习】深入浅出卷积神经网络及实现!
  5. jq封装post请求数据_GitHub - xiaohange/JQHttpRequest: GET/POST / PUT / DELETE 网络请求的封装...
  6. 导出测试点的信号名_小程序导出数据到excel表,借助云开发云函数实现excel数据的保存...
  7. 国内创业活动平台,创业赛事报名网站
  8. mac上安装Chromedriver注意事宜
  9. codeforces855 C. Helga Hufflepuff‘s Cup(树形dp)
  10. python OSError: [Errno 24] Too many open files | HTTPConnectionPool(host=‘‘, port=80): Max retries e
  11. .Net Core 商城微服务项目系列(二):使用Ocelot + Consul构建具备服务注册和发现功能的网关...
  12. 编程实现背包的递归和非递归两种解法_算法动态规划(七)背包问题4
  13. java抢单功能_基于消息队列的高并发抢单功能实现方法与流程
  14. 上海交通大学计算机应用基础答案,西安交通大学17年3月课程考试《计算机应用基础》作业考核试题答案...
  15. Linux C简单日志打印代码示例
  16. jquery以及jquery对象介绍
  17. 苹果安卓最新看片神器各种实用功能,帮你一年省下上千块!
  18. Photoshop渐变工具+羽化使用
  19. WinForm——MDI窗体
  20. Python提取pcap文件中原始数据

热门文章

  1. 云计算和大数据时代网络技术揭秘(八)数据中心存储FCoE
  2. 解决Apache CXF 不支持传递java.sql.Timestamp和java.util.HashMap类型问题
  3. mysql操作数字名称的schema时字符的逃逸问题
  4. vmd变分模态分解程序matlab论坛_博士兼职辅导员论坛分享会第三期
  5. linux 窗口z order,wxPython窗口z-order设置
  6. python神经网络原理pdf_《深度学习原理与 TensorFlow实践》高清完整PDF版 下载
  7. p3c插件 离线安装_IntelliJ IDEA18个常用插件,动图演示,让你效率翻倍!
  8. Git统计个人提交代码行数
  9. Postgresql: 时间戳long,TimeStamp,Date,String互转
  10. 什么是self-attention、Multi-Head Attention、Transformer