我从Decoda刚发布就一直关注着,这个工具可以注入到宿主程序内对lua脚本进行调试,还可以设置断点观察变量的值,功能非常强大。decoda可能是最好的Lua调试工具。
如果你会VS,那么你一定会用decoda调试lua程序。
decoda之前是收费软件,因为巴拉巴拉巴拉~~最近开源了。
由于需要,工作中的所有Lua文件都是UTF8格式的。之前我是在破解decoda主文件以后,直接在文件末尾添加的shellcode实现把UTF8文本转换为ASCII格式。累死我了,写了几个小时终于实现了打开UTF8文件,但是只能看见中文,而不能输入中文,开源以后一切都方便了……
shuax汉化版:
1、去除运行库依赖,减小发布包大小
2、支持UTF8文件的打开(另外会自动把文件保存为UTF8格式)
3、去除Update.dll的依赖(这货没开源,不敢用)
4、配置文件保存在本目录,增强文件关联。
5、调整初始化窗口大小(表示我的1366*768直接看不见标题栏了,泪奔~)
6、汉化了大部分地方(版本控制相关没汉化,不知道怎么用)
下面介绍一下使用方法。
首先找到一个使用了lua的程序,我这里用wireshark举例,这是个很好很强大的网络截包工具,wireshark内部使用了lua。没有wireshark的请下去google一下并下载安装,此为开源软件。
调试使用lua的宿主程序有两种启动方式,一种是从Decoda启动宿主程序,另一种是先启动宿主程序然后用decoda注入。
介绍如何从Decoda启动宿主程序
启动Decoda并点击Debug目录下的StartDebuging,弹出一个工程设置对话框,点击对话框里的第一行的Command右边的按钮,然后找到你的wireshark.exe可执行文件,点击OK。
此时wireshark程序开始执行,稍等一会在左边的窗口中会出现一个init.lua文件,这就是这个wireshark使用的lua文件。(decoda可以检测程序使用的所有lua文件并将他们显示在左边的窗口中)
现在你可以在这个init.lua里面设置断点了,在disable_lua = true; do return end;这一句下断点,聪明人都看得出来,只能在这里下断点,因为下面的语句都是不会执行的,除非将这一句注释。选择Debug菜单中的Stop Debugging退出调试,然后再选择Start Debugging重新启动调试,此时程序就会断点到你设置断点的这一行。
整个流程就是这样,你可以在Watch里面输入要监视的变量,这些操作都和visual studio中一样。