日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

cocos lua 加密方案

發布時間:2023/11/27 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:\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 加密方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。