Lua代码反混淆
我最近下载了一些lua代码,在其中发现了一些混淆的字符串。这让我想知道那里使用了什么样的混淆技术。有人有想法吗?
local code='\27\76\117\97\81\0\1\4\4\4\8\0\64\0\0\0\64\67\58\92\85\115\101\114\115\92\65\108\101\120\92\68\101\115\107\116\111\112'
loadstring(code)()
编辑:一些(加密?)的代码。
'\196\2\28\66\0\1\198\193\194\2\25\128\129\3\22\64\14\128\197\193\0\0\198\193\195\3\6\2\196\2\220\129\0\1\218'
原文链接 https://stackoverflow.com/questions/15961156
棘手的部分是 loadstring
及相关函数既接受 Lua 代码又接受 Lua 字节码。调用 loadstring
的参数实际上是经过字节编译的 Lua 代码而不是 Lua 源代码。
很容易获取 Lua 字节码。可以按照以下步骤获得实例:
- 创建一个 Lua 文件。
- 使用 Luac 编译它以生成 lauc.out。
- 使用十六进制查看器查看文件内容。
对于一个空的 Lua 文件,我得到了如下结果:
0000000: 1b4c 7561 5100 0104 0804 0800 0900 0000 .LuaQ...........
0000010: 0000 0000 4066 6f6f 2e6c 7561 0000 0000 ....@foo.lua....
0000020: 0000 0000 0000 0002 0201 0000 001e 0080 ................
0000030: 0000 0000 0000 0000 0001 0000 0001 0000 ................
0000040: 0000 0000 0000 0000 00 .........
将前 8 个字节转换为十进制数为:
27, 76, 117, 97, 81, 0, 1, 4
这与您字符串中的转义字符匹配。
如果您想要了解块中的代码的更多详细信息,您需要将块写入文件并使用 Lua 反编译工具进行调查。ChunkSpy、luadec15 和 unluac 都在 Lua Wiki 工具页面 中提到。
我认为提供的块内容不足以进行更详细的分析,它被截断了吗?
如果它有loadstring
,一个简单的但并不总是有效的方法就是在开头添加
loadstring = print;
将下面翻译成中文并且保留原本的 markdown 格式
Instead of trying to just hand you a simple answer, I'd like to inform you some things to know if you encounter stuff like this along the way.
这种混淆并不是很安全,实际上它来自于一个 ASCII 表。通常,这种混淆是在 Lua 5.1 中制作的,可以使用 `:byte` 和 `table.concat` 轻松实现。你可以用更强大的 Troy 解释的版本来反转这个代码,它可以绕过大部分的安全限制:
function loadstring(input) print(input) end
```
所以,我希望你能对这种东西的工作原理有一些了解。正如之前所述,可以使用 :byte
和 table.concat
来复制这个过程。
将 markdown 格式代码翻译成中文
its Easy to Deobfuscate Encryption(解密加密很容易)
local a ='\196\2\28\66\0\1\198\193\194\2\25\128\129\3\22\64\14\128\197\193\0\0\198\193\195\3\6\2\196\2\220\129\0\1\218'
print(a)
Lua 程序,用于将一串经过混淆的密文,按照其实际字符集解码并输出。
解密过程很简单。只需要将跟在反斜杠后面的数字对应到 ASCII 码表中的字符即可。最后得到可读的字符串。
在上述示例代码中,变量 a
存储了一串密文,运行程序后,打印输出结果就是其对应的明文字符串。
你可以这样做:
旧代码:
loadstring(你的字符串)
你只需用 print() 代替 loadstring() 即可查看/去混淆它
新代码:
print(你的字符串)
新脚本:
local code='\27\76\117\97\81\0\1\4\4\4\8\0\64\0\0\0\64\67\58\92\85\115\101\114\115\92\65\108\101\120\92\68\101\115\107\116\111\112'
print(code)
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
不像是加密的。看起来只是一系列字节。每个反斜杠表示一个字符及其字节码。 27 是转义,76 是“L”,117 是“u”,97 是“a”,以此类推。 通过一个简短的脚本运行它,我得到了这个字符串(符号是特殊字符,比如转义、报头和空字符):â†LuaQ ☺♦♦ @ @C:\\Users\\Alex\\Desktop 你可以在 [ascii 表格](http://www.cdrummond.qc.ca/cegep/informat/professeurs/alain/images/ASCII1.GIF) 上查询这些字节。 更新:一些研究告诉我,LuaQ 表示它是一个预编译的脚本或类似的东西。但我可能错了。