是否可以对这串混淆后的 Lua 代码进行反混淆?

Is it possible to deobfuscate this string of obfuscated Lua Code?

我有一个(另一个)字符串的 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,并查看它解码的字节码到.