安卓逆向之Luac解密反編譯

王平發表於2018-08-03

本文闡述針對Cocos2dx-lua提供的輕量級加密方案的反編譯。

本文demo物件:

安卓逆向之Luac解密反編譯1

lua檔案大概分3種。lua是明文程式碼,直接用ide能開啟,luac是lua編譯後的位元組碼,檔案頭特徵為0x1B 0x4C 0x75 0x61 0x51。

lua虛擬機器直接解析lua和luac指令碼檔案,luaJIT是另一個lua的實現版本,採用即時解析執行機制,luaJIT更高效,檔案頭特徵為0x1B 0x4C 0x4A。

加密流程

一篇文章搞定Cocos2dx-lua正向開發打包流程:

CSDN文章【Cocos2dx-lua 3.11.1】打包lua專案為安卓apk

https://blog.csdn.net/lannan91/article/details/67637373/

加密指令:cocos luacompile -s 未加密原始碼目錄 -d 加密後原始碼目錄 -e -k 加密key -b 加密sign –disable-compile

解密邏輯

lua官方加解密實現方式很容易就能查詢資料得到,根據得到key和sign就可以利用xxtea演算法來對指令碼進行解密,只需要三個條件,檔案路徑&加密sign&加密key就能解密。
加密和解密演算法在這:
https://github.com/cocos2d/cocos2d-x-3rd-party-libs-bin/tree/v3/xxtea

實現過程

加密sign的找尋方法sign在.luac檔案頭中
隨機開啟一個專案內的.luac檔案,找第一個字串。

安卓逆向之Luac解密反編譯2

 

加密key的找尋方法

key在打包後的cocos的lib庫的libcocos2dlua.so中
1.第一種方法是libcocos2dlua.so使用IDA pro開啟,全域性查詢加密sign。點選進入查詢結果,在該結果的上方3行能夠發現加密key。
2.第二種方法,由於寫作的電腦已經升級到10.15.5 (19F101),IDA pro執行有問題。所以用osx自帶的strings工具查詢。
2-1.終端執行 strings -a libcocos2dlua.so
2-2.ctrl+f 查詢sign,觀察sign上方的字串,即為key。

安卓逆向之Luac解密反編譯3

解密實現

OSX實現指令碼:
https://github.com/dengxiaochun/luac_decodeToolwin實現工具:
https://www.jb51.net/softs/575428.htmlOSX演示:
將解密指令碼放在專案assets目錄下

安卓逆向之Luac解密反編譯4

修改decode.sh的SIGN&KEY變數,並儲存。

安卓逆向之Luac解密反編譯5

終端執行:sh ./decode.sh src

安卓逆向之Luac解密反編譯6

執行結果:

安卓逆向之Luac解密反編譯7

 

執行後指令碼將自動備份luac原始碼(src_backup)

安卓逆向之Luac解密反編譯8

解密後的.lua檔案在src目錄中,ide開啟,原始碼反編譯成功,可以進一步研究程式的客戶端原始碼實現。

安卓逆向之Luac解密反編譯9

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章