lua 解码 loadstring

转载参考 https://www.52pojie.cn/thread-694364-1-1.html

 

系列教程

样本

样本来自悬赏问答区 下载了一个鼠标宏文件,但是显示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-luaAlt + 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>

 

 

posted @ 2022-11-16 15:36  颖子的踏坑路线  阅读(1637)  评论(0编辑  收藏  举报