由于工作需求,要反编译一个luajit编译过的文件。百度反编译luajit,得到的信息是目前没有此类成熟的反编译器。所以,如果你用luajit编译了代码,基本上不用担心被别人破解(2015.12)。
虽然没有luaj反编译器,但是不代表反编译不可能。至少,人肉反编译是可以的,哈。因为我只需要反编译一个文件,所以采取人肉的方式,也许是可行的。
首先,在github上面找到了唯一的一个项目是关于反编译luaj的项目,这个作者写了个工具,可以把手头上的代码翻译成可以可以阅读的模式。(在win/linux下可以直接执行他的工具,他的工具用的是AutoIt脚本写的)
通过阅读他的源码,才知道这个工具首先是用luajit的命令行工具,把字节码转换成可读的模式:
luajit -bl test.lua test.txt
翻译的思路,就是根据luajit提供的指令表,把指令翻译成对应的lua源码,例如, 对这句指令 MOV dst var,翻译成 local dst = var
在对luajit指令的翻译过程,最麻烦的是,lua里的function被重新整理,原来是树状结构的(毕竟大家总是会在function里嵌套function),编译后变成线性的。
这个项目的作者没有解决这个问题,反编译出来的内容,是无数个function,而且没有排版,function里的指令也只是单纯