在复现实战逻辑漏洞:三个漏洞搞定一台路由器 中,苦恼如何反编译*.lua程序,在网上找到的了专用于luac反编译的工具unluac,但是并不能解决问题:
$ java -jar ./unluac_2021_03_19b.jar ./misystem.lua
Exception in thread "main" java.lang.IllegalStateException: The input file does not have the signature of a valid Lua file.
at unluac.parse.BHeader.<init>(BHeader.java:70)
at unluac.Main.file_to_function(Main.java:118)
at unluac.Main.main(Main.java:60)
不得不说github是程序猿的福音,找到一个开源工具unluac_mifi 解决了小米路由器中lua虚拟机中的magic_num问题。
文件结构如下:
├── authors.txt
├── build
│ ├── unluac
│ └── unluac.jar
├── license.txt
├── out
├── README.md
├── src
│ ├── META-INF
│ └── unluac
├── test
│ └── src
└── unluac.iml
其中unluac.jar
是编译生成的,生成步骤如下:
mkdir build
javac -d build -sourcepath src src/unluac/*.java
jar -cfm build/unluac.jar src/META-INF/MANIFEST.MF -C build .
之后在build文件夹下,即可找到编译生成的unluac.jar
touch file_decompiled.lua
java -jar ./unluac.jar ./file.lua > file_decompiled.lua
反编译的代码如下:
接下来即可愉快的进行逆向分析!