我有一个(另一个)混淆的lua代码字符串。我想知道是否有可能对它进行模糊处理,或者弄清楚它是如何被模糊处理的,因为我以前从未遇到过类似的东西。该代码字符串被认为是恶意服务器端脚本执行程序的主要模块。了解其中的内容将帮助我们在平台上修补漏洞。有人告诉我,通过获取常量很容易破译,因为它是基于VM的模糊处理,我们只需要一点帮助就可以将其指向正确的方向。
代码相当大,所以它在此pastebin中。
pastebin com / dtfzBPZk
对这个文件进行模糊处理看起来似乎是一个手动操作。像往常一样,首先要做的是将变量重命名为更合理的名称,并在代码中添加空格和缩进。您可以在https://pastebin.com/eRTGAbTH看到一个开始。完成此操作后,您将看到如下所示的功能模式:
(function(...)
local SynapseXen_116 = "hi xen doesn't work on sk8r please help"
local SynapseXen_092 = SynapseXen_100(38909278, 3932326132)
local SynapseXen_069 = {...}
for SynapseXen_109, SynapseXen_043 in pairs(
SynapseXen_069
) do
local SynapseXen_119
local SynapseXen_097 = type(SynapseXen_043)
if SynapseXen_097 == "number" then
SynapseXen_119 = SynapseXen_043
elseif SynapseXen_097 == "string" then
SynapseXen_119 = SynapseXen_043:len()
elseif SynapseXen_097 == "table" then
SynapseXen_119 = SynapseXen_100(4264903821, 30110892)
end
SynapseXen_092 = SynapseXen_092 + SynapseXen_119
end
SynapseXen_140[1171393165] =
SynapseXen_bit_bxor(
SynapseXen_bit_bxor(2179831066, SynapseXen_092),
SynapseXen_bit_bxor(2132161653, SynapseXen_082)
) -
string.len(SynapseXen_116) -
SynapseXen_139 -
#{
2716917292,
2960928816,
2092744992,
3945961999,
2156388474,
2523828292,
534526172
}
return SynapseXen_140[1171393165]
end)({}, {}, 14275, 107, "iIIllIIlIIilillilI", "i", 5327, 3211, 14382, 14643)
现在您可以开始消除红色鲱鱼了。例如,任何时候看到#{ a bunch of stuff in here }
,您都可以对列表中的元素进行计数,然后将整个内容替换为计数。在这种情况下,末尾会有一个我们可以用数字7代替。接下来,看SynapseXen_116
。它唯一使用的地方就是它的长度,因此您也可以用它代替。现在,在那之后,请注意,这是在声明一个函数,然后立即调用它,因此您可以替换其参数。继续沿着那条路走,直到您发现Lua-in-Lua VM的核心为止,从那里开始,应该很容易在最后插入Base64,并查看它解码的字节码。