我最近下载了一些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'
答案 0 :(得分:4)
棘手的部分是loadstring
和相关函数接受lua代码和lua字节代码。对loadstring
的调用只是传递了字节编译的lua而不是lua源代码。
你可以很容易地得到字节编译的lua。你可以得到一个这样的例子
对于一个空的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中提到了luadec15,unluac和tools 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中进行的,并且可以使用:byte
和table.concat
轻松地进行。您可以使用功能更强大的Troy解释来反转此代码,该解释可以绕过其大部分安全性:
function loadstring(input)
print(input)
end
所以我希望您对这些东西的工作原理有所了解。如前所述,可以使用:byte
和table.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)