赞
踩
最近开始学习对于lua代码的保护,先对基本的概念加以理解并进行记录;
在Windows下面可以通过下载mingw,通过mingw软件,我们可以在windows上模拟出linux的环境;
lualib工程:1)添加除了lua.c 和 luac.c 之外的所有“.c”文件。2)在属性中设置头文件的路径,也就是include文件夹的路径。3)在属性中设置“配置类型”->“静态库(.lib)”。工程的编译结果为:lualib.lib。
lua工程:1)添加lua.c。2)在属性中包含include的路径以及lualib.lib的路径。3)在属性的“连接器”->“输入”中写入lualib.lib。4)在“解决方案”的属性中,设置项目项目依赖关系lua依赖于lualib。编译的结果为:lua.exe
luac工程:1)添加luac.c。后面的设置和lua工程相同。编译的结果为:luac.exe
lua是一个脚本语言,像python一样,这里lua.exe可以对其进行解释执行,同时也可以使用luac.exe对lua进行编译为luac字节码。
luac.exe -o HelloWorld.out HelloWorld.lua
对luac文件进行简单的分析一下:通过使用非虫大大的bt脚本对lua格式进行了解一下:
虫大这个已经写的很详细了,可以参考了解:https://zhuanlan.zhihu.com/p/30094117
在了解luaJIT之前对产生的背景进行简单的了解:由于lua为传统性的解释脚本语言,这个时候最然可以完美的跨不同的平台,但是性能比较差,这个时候JIT出现,动态运行的即时编译,在编译的过程中对于一些热路径进行记录,编译处理为机器码,在Dalvik虚拟机早期的编译中也是这样的,但是要处理好热路径和去寻找过程之间的性能平衡。
可以参考这个帖子https://my.oschina.net/u/2539854/blog/1480238进行初步的了解,后面有机会会详细的介绍这一块,毕竟设计到编译就比较好玩。
这给比较简单,下载 LuaJIT 源码,使用VS中命令行工具,prompt,到对应源码的src目录下进行编译:
luajit.exe -b HelloWorld.lua HelloWorldJit.out
通过对于字节码的对比上也可以明显的看出JIT编译出来的字节码比较少,运行起来的性能就比较快。
接下来对于luajit的格式进行分析,详情参考虫大的文章:https://github.com/feicong/lua_re/blob/master/lua/lua_re3.md
目前对于luac的反编译普遍使用的是luadec这个工具:
GitHub:https://github.com/viruscamp/luadec
git clone https://github.com/viruscamp/luadec cd luadec git submodule update --init lua-5.1 cd lua-5.1 make linux cd ../luadec make LUAVER=5.1
注意:解决编译错误:“readline/readline.h: No such file or directory”
/usr/bin/ld: cannot find -lncurses
下载 https://github.com/bobsayshilol/luajit-decomp
当然网上也有人说这个工具对于复杂的反编译有问题,可以借助于这个工具:后面破解逆向用到的时候再具体进行阐述。
https://github.com/franko/luajit-lang-toolkit
大致的了解了lua这门语言,以及包括luac、以及luajit等等,了解这些之后对于后面lua语言的保护,以及它的设计原理打下基础,同时后面还会重点的去分析lua虚拟机以及luajit的相关东西。
https://blog.csdn.net/snlscript/article/details/15533373
https://zhuanlan.zhihu.com/p/30094117
https://my.oschina.net/u/2539854/blog/1480238
https://www.jianshu.com/p/fc4bee82c3ef
https://github.com/feicong/lua_re/blob/master/lua/lua_re3.md
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。