最近對一款遊戲的lua腳本提取,發現提取出來的腳本都是LJ格式的文件。如圖:
image
在網上找了好幾個工具都沒什麼用,最後在github找到了luajit-decomp-master,還原出來的僞代碼基本能看懂,但是還是有殘缺。如果不明確的邏輯和數據還是要結合ida動態調試。
可以看看效果原lua源碼
function iter (a, i)
i = i + 1
local v = a[i]
if v then
return i, v
end
end
function ipairs (a)
return iter, a, 0
end
經過luajit編譯後的文件用16進制查看。
image
然後經過我們的luajit-decomp 解析後的結果
function randomFunction iter (INPUT_VAR_0_,INPUT_VAR_1_)
var_0_1 = INPUT_VAR_1_ + 1 --var_0_1 NUMBER-NUMBER
if unknown0 then
--jump to 0008 (if previous if statement is false) --0008 JMP-JMP
var_0_3 = var_0_1
var_0_4 = unknown0
return var_0_3, var_0_4
end
return
end
function randomFunction ipairs (INPUT_VAR_0_)
var_1_2 = INPUT_VAR_0_
var_1_3 = 0 --var_1_3 NUMBER-NUMBER
return iter, var_1_2, var_1_3
end
function someFunc2()
local randomFunction0 = function() end -- starts at test.lua:0
iter = randomFunction0
local randomFunction1 = function() end -- starts at test.lua:0
ipairs = randomFunction1
return
end
luajit-decomp的使用方法:
1.需要LuaJIT-2.1.0-beta2編譯成功,編譯的資料很多可以查查,我是直接用目錄下的msvcbuild.bat編譯出來的。
2.把LuaJIT-2.1.0-beta2目錄下的jit文件,luajit.exe,lua51.dll,3個文件複製到luajit-decomp-master目錄下。
3.把要解析的目標文件改爲test,例如:test.lua。也可以修改decoder_new.au3裏面的內容自定義文件名。
4.運行目錄下的decoder_new.exe,產生一個分析結果文件out.lua可以直接打開查看。
luajit-decomp目錄下有decoder.exe,decoder_new.exe兩個可執行文件,我覺得decoder_new.exe解析出來的結果更接近源碼。
下載:
luajit-decomp:https://github.com/bobsayshilol/luajit-decomp
luajit:http://luajit.org/download/LuaJIT-2.1.0-beta2.zip