lua代码反混淆

时间:2013-04-12 00:30:46

标签: lua deobfuscation

我最近下载了一些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'

6 个答案:

答案 0 :(得分:4)

棘手的部分是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反编译工具进行调查。 lua wiki ChunkSpy中提到了luadec15unluactools page

你提供给我的块中没有足够的内容进一步采取它,我认为它被截断了吗?

答案 1 :(得分:2)

看起来根本不加密。好像它只是一个字节序列。每个反斜杠代表一个带字节码的字符。

27是逃避,76是'L',117是'你',97是'a'等等。

通过一个简短的脚本运行它给我这个字符串(符号是特殊字符,例如转义,标题的开头和null):←LuaQ☺♦♦@@C:\ Users \ Alex \ Desktop

您可以在an ascii table上查找字节。

更新:一些研究告诉我,LuaQ意味着它是一个预编译的脚本或类似的东西。我可能会离开。

答案 2 :(得分:0)

如果它有loadtring,一个可能并不总是有用的简单方法就是添加

loadstring = print;

一开始

答案 3 :(得分:0)

我不想告诉您一个简单的答案,而是想告诉您一些事情,以了解您是否在途中遇到这样的事情。

这种混淆不是很安全,实际上是来自ASCII表。通常,这些混淆处理是在Lua 5.1中进行的,并且可以使用:bytetable.concat轻松地进行。您可以使用功能更强大的Troy解释来反转此代码,该解释可以绕过其大部分安全性:

function loadstring(input)
   print(input)
end

所以我希望您对这些东西的工作原理有所了解。如前所述,可以使用:bytetable.concat的用法来复制它。

答案 4 :(得分:0)

易于解密加密

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)

答案 5 :(得分:0)

您可以这样做

旧代码:

loadstring(your string)

您只需使用print()而不是loadstring()即可查看/模糊化它

新代码:

print(your string) 

新脚本:

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)