首页 > cocos lua 加密方案

cocos lua 加密方案

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:UsershengjingjingDesktopLuaJIT-2.0.4src),因为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

更多相关:

  • 1.不可逆加密: PASSWORD(),ENCRYPT(,),MD5(),SHA5()。 2.可逆的加密算法: ENCODE(,)   DECODE(,):加密解密字符串。该函数有两个参数:被加密或解密的字符串和作为加密或解密基础的密钥。Encode结果是一个二进制字符串,以BLOB类型存储。加密成都相对比较弱。 AES_ENCRYP...

  • Java和.NET的系统类库里都有封装DES对称加密的实现方式,但是对外暴露的接口却各不相同,甚至有时会让自己难以解决其中的问题,比如Java加密后的结果在.NET中解密不出来等,由于最近项目有跨Java和.NET的加解密,经过我的分析调试,终于让它们可以互相加密解密了。   DES加密   DES是一种对称加密(Data Encry...

  •   一.TransparentData Encryption (TDE:透明数据加密) 说明 Orace TDE 是Orcle 10R2中的一个新特性,其可以用来加密数据文件里的数据,保护从操作系统层面上对数据文件的访问。11g的TDE 在10gR2的基础上增强,允许在表空间级别进行加密。 1.1 11g 中TDE 新增功能 一些新...

  • PCL1.9.1并没有支持vs2015版本的exe版本,然后需要下载PCL的源码重新自己CMake编译出vs2015版本的编译的目的:1、得到支持vs2015的版本的PCL1.9.1 前期准备1、下载PCL源码:https://github.com/PointCloudLibrary/pcl2、下载安装版(主要是为...

  • 下载gcc文档,第三章有详细的build options的介绍。 最近我用到2个关键的option 来定位问题,简单介绍一下: 1. -E: 只是进行预编译,不会编译和link。用于检查宏在代码中的展开是否符合预期; 2.--verbose: 开启verbose mode, 用于输出编译整个过程中的详细信息,可帮助查看build...

  • 浅谈GCC预编译头技术 文/jorge ——谨以此文,悼念我等待MinGW编译时逝去的那些时间。 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA。后来一直用到C++ Builder,尽管Borland的广告无时无刻不在吹嘘其编译速度,我却从没有对这个问题上心过,因为心里根本没有“...

  • 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行...

  • 文章目录前言Makefile 编译流程1. 平台变量/环境变量的初始化。2. 编译需要的源码文件变量初始化。3. include 目录的设置。4. 编译的执行逻辑。问题记录1:可能的打包命令`ar` 失效问题5. 执行具体的编译指令问题记录2: jar 包编译...

  • 安装依赖库 yum -y install readline-dev readline-devel 下面源码编译lua时需要用到 安装lua-5.1.5 wget http://www.lua.org/ftp/lua-5.1.5.tar. tar zxvf lua-5.1.5.tar.gz cd lua-5.1.5...

  •   Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。它的主页是 www.lua.org。   Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替...