lua 解码 loadstring
转载参考 https://www.52pojie.cn/thread-694364-1-1.html
系列教程
- lua脚本解密1:loadstring
- lua脚本解密2:unluac
- lua脚本解密3:空白字符
- lua脚本解密4:rawstring
- lua脚本解密5:RC4加密穷举秘钥
- lua脚本解密6:YIC加密
- lua脚本加密工具:简单异或加密
样本
样本来自悬赏问答区 下载了一个鼠标宏文件,但是显示time is out 怎么办,改系统时间没用,34# 层 也有一个样本,62# 层 还有另外一个样本。
附件中的 xml 中内嵌了 lua 脚本,脚本中只把必要的数值留出来了,其他部分都加密了,加密的代码中有时间限制。
解密方法
下载 Lua 执行器
首先到官网下载一个 Lua 的执行器,解压出来。
http://www.lua.org/download.html > http://luabinaries.sourceforge.net/ >
https://sourceforge.net/projects/luabinaries/files/5.1.5/Tools%20Executables/
<ignore_js_op>
<ignore_js_op>
注意:大版本号之间是不兼容的,请视情况选择 Lua 的版本。Lua 5.1 的脚本用 Lua 5.2 运行不了。之后的第三位的小版本号之间可以互相兼容的,所以 Lua 5.1 的脚本可以使用 Lua 5.1.5 或 Lua 5.1.4 等等来执行。
通常:罗技的鼠标宏是 Lua 5.1,GG修改器脚本是 Lua 5.2,最新版的 5.3 暂时还没遇到过。
各版本的下载链接文章末尾有(在 2018 年 4 月 18 日我修改这篇文章之前,这里另外还有几个图片来解释我是如何找到这个地址的,后来我感觉真的没什么用)
解密
然后把 loadstring
一直到末尾的部分 ()
都复制到新的文件中(比如说 1.lua
),
这个
loadstring
就是 Lua 5.1 和他之前的版本才有的函数,loadstring
在 Lua 5.2 被移除了,大家可以通过这个东西来判断是什么版本的脚本。
<ignore_js_op>
<ignore_js_op>
在最前面添加一个 print
,
<ignore_js_op>
有人反映,部分的 Lua 鼠标宏中包含
< >
,所以在代码之前需要用后面提到的xml_codec.html
解码一下。
然后在命令行中执行 lua5.1 1.lua > 2.lua
,
<ignore_js_op>
<ignore_js_op>
这时 2.lua
就是解密后的文件了。
<ignore_js_op>
代码格式化
lua 不依赖换行符分割语句,所以代码不格式化也照样可以用,格式化只是为了方便阅读。
方案1:vscode
我用的是 vscode 下载插件 vscode-lua
,Alt + Shift + F
格式化代码。
<ignore_js_op>
<ignore_js_op>
方案2:格式化脚本
代码格式化也可以使用 lua脚本解密4 中的附件 lua-string-decode.zip
,这两个原理是一样的,和 vscode-lua
使用的是同一个 javascript 库 lua-fmt
。
<ignore_js_op>
选择之后会下载一个 2.lua.decoded.lua
<ignore_js_op>
破解
这个是解密教程,破解的话自己想吧。
假设破解之后的文件是 3.lua
替换回xml中
代码已经解密完成了,必须重新放到 XML 中才可以运行。由于代码在 XML 中,所以必须经过 XML 实体编码(XML entity encode)或者叫特殊字符转义(Special chars escape)。
用浏览器打开附件的文件 xml_codec.html
,选择已经解密的 3.lua
文件,
<ignore_js_op>
然后把下载之后的 3.lua.xml_encoded.lua
文件内容粘贴回原来的文件,注意要把 loadstring(
和 )()
一起删掉。然后你们愿意干什么就干什么。
<ignore_js_op>
<ignore_js_op>