反向编译OpenWrt的Lua字节码 (Decompile Lua bytecode of OpenWRT)


  1. Lua有一种预编译机制,能够把文本代码预编译成Bytecode/Opcode 提高解析、执行速度,降低内存占用
  2. 原版Lua(Vanilla Lua)默认的Bytecode的字节结构和OpenWrt的并不相同,因为OpenWrt为了一系列需要,在截止我写此文时候,在Lua5.1.5的版本主线上对原版的LUA引擎打了补丁导致其产生的字节码和原版的Lua产生的并不一样,( http://lua-users.org/lists/lua-l/2012-06/msg00065.html ),因此也不能使用原版的Lua引擎解释,会报类似 bad header in precompiled chunk 的错误
  3. 本机尝试逆向原版的Lua产生的LuaC, 使用这个luadec 项目无任何问题   ,但是逆向Openwrt上的luaC失败,所以需要在Openwrt的Patch过的Lua lib的基础上,编译luadec
  4. 过程记录如下,全程在Linux Deepin 15.5上完成:

到这一步 其实会出现错误的,有提示

lauxlib.o: relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC

需要修改Makefile 给CFLAGS加上 -fPIC 选项 另外,为了使得Patch过后生成的so文件带版本号,还需要加上版本,最终生成的是如下的lua-5.1/src/Makefile的补丁

继续执行make linux应该不会报错了,然后按照luadec的教程继续做完就可以了

生成的3个可执行文件luadec luaopswap luareplace就是全部,她就可以直接解码openwrt的luaC的Bytecode了 这里提供编译好的文件下载

Author Info :
  • From:反向编译OpenWrt的Lua字节码 (Decompile Lua bytecode of OpenWRT)
  • URL:http://blog.ihipop.info/2018/05/5110.html
  • Please Reserve This Link,Thanks!
  • 发表评论

    电子邮件地址不会被公开。 必填项已用*标注