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

点赞
stackoverflow用户1031671
stackoverflow用户1031671
不像是加密的。看起来只是一系列字节。每个反斜杠表示一个字符及其字节码。

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 表示它是一个预编译的脚本或类似的东西。但我可能错了。 
2013-04-12 00:49:21
stackoverflow用户221955
stackoverflow用户221955

棘手的部分是 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 反编译工具进行调查。ChunkSpyluadec15unluac 都在 Lua Wiki 工具页面 中提到。

我认为提供的块内容不足以进行更详细的分析,它被截断了吗?

2013-04-12 00:58:10
stackoverflow用户9956438
stackoverflow用户9956438

如果它有loadstring,一个简单的但并不总是有效的方法就是在开头添加

loadstring = print;

2018-06-18 11:24:27
stackoverflow用户10041320
stackoverflow用户10041320

将下面翻译成中文并且保留原本的 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

```

所以,我希望你能对这种东西的工作原理有一些了解。正如之前所述,可以使用 :bytetable.concat 来复制这个过程。

2018-07-08 13:14:28
stackoverflow用户13595102
stackoverflow用户13595102

将 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 存储了一串密文,运行程序后,打印输出结果就是其对应的明文字符串。

2020-07-19 15:28:23
stackoverflow用户14743500
stackoverflow用户14743500

你可以这样做:

旧代码:

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)
2020-12-01 16:39:43