對 Lua 位元組碼進行加密

2021-07-01 23:33:52 字數 1523 閱讀 1214

由於 luajit 不支援 64 位,quick 新的版本預設使用 lua 5.1.5 版本,並提供將 lua 原始碼打包成通用位元組碼的工具 luac 。為了增強安全性, quick 提供了乙個基本加密方案,使開發者可以對位元組碼作自定義的加密,防止對位元組碼的簡單反編譯工作。此方案配合原有的xxtea加密方案,已經能夠滿足普通的加密需要。如果開發者需要更高強度的加密,可以與我們的合作夥伴 娜迦資訊 聯絡獲取更高階別的安全方案。

quick 預設使用正常編譯位元組碼的方式。如果使用者要對位元組碼進行加密,必須先設定並啟用加密模式。

開啟加密模式非常簡單,只需要執行一下 bin 目錄下提供的指令碼工具即可完成。

mac 使用者執行:

set_encrypt.sh
windows 使用者執行:

set_encrypt.bat

如果執行一切正常,luac 工具將會被更新,相關的 lua 執行時**會被相應的進行修改。在之後使用 compile_scripts 指令碼工具編譯出來的位元組碼,將只能在當前加密環境建立和編譯的工程裡才能正常執行。

成功開啟加密模式後,如果再次執行 set_encrypt 指令碼,將會配置乙個新的加密環境。 新的加密環境下編譯出來的位元組碼與舊的加密位元組碼是不能通用的。

要注意的是,只有quick-lite工程才會隨著平台的加密環境變化而變化。普通的quick工程在建立後就會一直保持建立時的加密環境,如果需要改變,需要手動進行切換。切換加密環境的方法請參考後面的說明。

使用者不必擔心啟用加密模式後無法恢復原來的正常模式。指令碼在更新檔案時已經對原來的檔案進行了備份,可以很簡單的進行恢復。具體方法請參考後面的說明。

原有的加密環境同樣留有備份檔案,可以按需要進行恢復。利用這一功能,可以實現同乙份**編譯成互不通用的加密位元組碼,在不同平台包或者渠道包中分開使用。

如果執行失敗, set_encrypt 指令碼會給出相應的提示,並恢復執行指令碼之前的檔案狀態,不會對使用造成影響。

常見的錯誤及解決:

提示各種檔案操作失敗資訊:

提示編譯失敗:

開啟加密模式後,編譯位元組碼的方式與原來並沒有什麼不同,仍然是使用 compile_scripts 指令碼工具對 lua 檔案進行編譯和打包,以及用 xxtea 對檔案進行加密,指令碼的命令列引數也沒有任何變化。

不過,這時候編譯出來的位元組碼,只有在當前加密模式下建立的工程,或者在當前加密模式下編譯出來的player裡,才能夠正常執行。

加密環境的切換與以下幾個檔案有關:

set_encrypt 指令碼工具會在執行時,會將以上檔案改名,備份在原來所在的目錄下。修改的方式是在檔名後加上「_bak_******-******」,其中「******-******」是備份時的計算機系統時間。

因此,需要恢復哪乙個加密環境,只需要找到對應的備份檔案,將其改名恢復即可。

正常情況下,最早的備份檔案對應著初始的環境檔案,將其恢復就可以返回未開啟加密模式時的狀態。

如果要手動切換某個工程的加密環境,只需要修改對應的def檔案即可。

[the end]

Lua位元組碼分析

lua 首先會被lua編譯器 通常所指的luac 編譯為二進位制檔案,編譯是以乙個lua檔案為單位,比如乙個lua檔案內有語法錯誤,即使你不執行相關 這個檔案也是編譯不過去的 編譯完成後,然後二進位制檔案被lua虛擬機器載入執行。但實際上我們並不能看到編譯器的這個過程,這是因為lua直譯器是隱式呼叫...

go遍歷目錄對lua進行xxtea加密工具

在做urho3d的是時候使用的是lua進行開發,需要對lua進行加密處理,因為go省去各種dll的麻煩,用起來比較方便,所有直接使用go寫了 實現目的 使用命令列形式,方便些批處理 需要輸入引數是,輸入目錄,輸出目錄,頭標記,密碼 輸入目錄獲取所有的lua檔案 對lua檔案進行加密 寫入到輸出目錄 ...

對MemoryStream進行壓縮 加密

在應用deflatestream 或gzipstream進行壓縮的時候,一定要先呼叫其實例的close 方法,否則基流中的被壓 縮的資料是不完整的,無法進行解壓縮操作。這一點很重要!對記憶體流進行加密後應用基流這前一定要呼叫 cryptostream 的 flushfinalblock 方法,否則無...