大家好,又见面了,我是你们的朋友全栈君。
代码语言:javascript复制最近对一款游戏的lua脚本提取,发现提取出来的脚本都是LJ格式的文件。如图:
image
在网上找了好几个工具都没什么用,最后在github找到了luajit-decomp-master,还原出来的伪代码基本能看懂,但是还是有残缺。如果不明确的逻辑和数据还是要结合ida动态调试。
可以看看效果原lua源码
代码语言:javascript复制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 解析后的结果
代码语言:javascript复制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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。