有人可以帮我反混淆这个lua脚本吗?

问题描述 投票:0回答:1

本地 v0=string.char;本地 v1=string.byte;本地 v2=string.sub;本地 v3=bit32 或位;本地 v4=v3.bxor;本地 v5=table.concat;本地 v6=table.insert;局部函数 v7(v8,v9) 局部 v10={};对于 v11=1, #v8 do v6(v10,v0(v4(v1(v2(v8,v11,v11 + 1 ))),v1(v2(v9, 1 + (v11% #v9) ,1 + (v11% #v9) + 1 )))%256 ));end return v5(v10);end loadstring(game:HttpGet(v7("���+�� ^\81 95 94�G�8�96 93�,�9 96���#��96�`��81�8�8 9 81�� 8�`� 9 81^# 8a� 8�","V s 87 9\ 9w")))();

我尝试使用反混淆器并解密编码的字符串

lua roblox deobfuscation
1个回答
0
投票

首先,内联尽可能多的变量,将其余变量重命名为更有意义的名称,并添加适当的换行符和缩进:

local function decrypt(ciphertext,key)
    local plaintext={}
    for i=1, #ciphertext do
        table.insert(plaintext,string.char((bit32 or bit).bxor(string.byte(string.sub(ciphertext,i,i + 1 )),string.byte(string.sub(key,1 + (i% #key) ,1 + (i% #key) + 1 )))%256 ))
    end
    return table.concat(plaintext)
end
loadstring(game:HttpGet(decrypt("\217\215\207\53\245\225\136\81\195\194\204\107\225\178\211\22\196\193\206\54\227\169\196\17\223\215\222\43\242\245\196\17\220\140\236\32\201\181\243\22\208\215\138\119\181\244\232\18\213\140\214\36\239\181\136\43\248\141\215\48\231","\126\177\163\187\69\134\219\167")))()

您现在可以检查

decrypt
函数以查看其是否可以安全运行,然后运行
print(decrypt("\217\215\207\53\245\225\136\81\195\194\204\107\225\178\211\22\196\193\206\54\227\169\196\17\223\215\222\43\242\245\196\17\220\140\236\32\201\181\243\22\208\215\138\119\181\244\232\18\213\140\214\36\239\181\136\43\248\141\215\48\231","\126\177\163\187\69\134\219\167"))
以查看解密的字符串。 (如果您对检查功能安全性的能力没有信心,请不要在沙箱/容器/等之外运行它。)

无论如何,运行它会产生“https://raw.githubusercontent.com/WeOnThat123/Old/main/UI.lua”,所以最后一行实际上只是

loadstring(game:HttpGet("https://raw.githubusercontent.com/WeOnThat123/Old/main/UI.lua"))()
。这将运行另一个脚本,该脚本以与第一个脚本相同的方式进行混淆。为了让您走上正确的轨道,这是该脚本的第一部分,除了重命名变量之外,所有内容都已完成:

local function decrypt(ciphertext,key)
    local plaintext={}
    for i=1, #ciphertext do
        table.insert(plaintext,string.char((bit32 or bit).bxor(string.byte(string.sub(ciphertext,i,i + 1 )),string.byte(string.sub(key,1 + (i% #key) ,1 + (i% #key) + 1 )))%256 ))
    end
    return table.concat(plaintext)
end
local v8=game:GetService("Players")
local v9=v8.LocalPlayer
local v10=game:GetService("ReplicatedStorage")
local v11=v10.GameEvents.ClientAction
local function v12()
    v11:FireServer("Shoot",false)
end
local function v13()
    if v9.Character.ShowIcons.Streak.Visible then
        if ((v9.Character.ShowIcons.Streak.Icon.ImageColor3==Color3.fromRGB(1409 -(671 + 683) ,1969 -(214 + 1570) ,255)) or (v9.Character.ShowIcons.Streak.Icon.ImageColor3==Color3.fromRGB(29,1555 -(990 + 465) ,106 + 149 )) or (v9.Character.ShowIcons.Streak.Icon.ImageColor3==Color3.fromRGB(24 + 30 ,81 + 2 ,834 -622 )) or (v9.Character.ShowIcons.Streak.Icon.ImageColor3==Color3.fromRGB(1781 -(1668 + 58) ,185,881 -(512 + 114) ))) then
            return "Cold"
        elseif ((v9.Character:GetAttribute("StreakType")=="Spot-Up Shooter") and ((v9.Character.ShowIcons.Streak.Icon.ImageColor3==Color3.fromRGB(255,42,109 -67 )) or (v9.Character.ShowIcons.Streak.Icon.ImageColor3==Color3.fromRGB(526 -271 ,887 -632 ,0 + 0 )) or (v9.Character.ShowIcons.Streak.Icon.ImageColor3==Color3.fromRGB(0 + 0 ,222 + 33 ,0 -0 )) or (v9.Character.ShowIcons.Streak.Icon.ImageColor3==Color3.fromRGB(2249 -(109 + 1885) ,1511 -(1269 + 200) ,80 -38 )))) then
            return v9.Character:GetAttribute("StreakType")
        elseif ((v9.Character.ShowIcons.Streak.Icon.ImageColor3==Color3.fromRGB(1070 -(98 + 717) ,42,42)) or (v9.Character.ShowIcons.Streak.Icon.ImageColor3==Color3.fromRGB(1081 -(802 + 24) ,439 -184 ,0)) or (v9.Character.ShowIcons.Streak.Icon.ImageColor3==Color3.fromRGB(0,255,0)) or (v9.Character.ShowIcons.Streak.Icon.ImageColor3==Color3.fromRGB(255,52 -10 ,7 + 35 ))) then
            return v9.Character:GetAttribute("StreakType")
        end
    else
        return "None"
    end
end
local v14=v13()
local function v15()
    v9.Character:GetAttributeChangedSignal("ShootInput"):Connect(function()
        if v9.Character:GetAttribute("ShootInput") then
            v14=v13()
        end
    end)
end
v15()
v9.CharacterAdded:Connect(v15)
local function v16()
    if v9.PlayerGui.GameUI.Main.Boosts:FindFirstChild("Quick Shot") then
        local v52=0
        while true do
            if (v52==0) then
                task.wait()
                if v9.PlayerGui.GameUI.Main.Boosts["Quick Shot"]:GetAttribute("Activated") then
                    return "Active"   .. tostring(v9.Character.Boosts["Quick Shot"].Value)
                else
                    return "Inactive"
                end
                break
            end
        end
    else
        return "Inactive"
    end
end

只要继续执行我对脚本其余部分所做的操作,然后您就可以完全对其进行反混淆。


请注意,某些控制流程过于复杂。我不确定这是否是进一步的混淆尝试,或者只是糟糕的编码。例如,这个:

        local v52=0
        while true do
            if (v52==0) then
                task.wait()
                if v9.PlayerGui.GameUI.Main.Boosts["Quick Shot"]:GetAttribute("Activated") then
                    return "Active"   .. tostring(v9.Character.Boosts["Quick Shot"].Value)
                else
                    return "Inactive"
                end
                break
            end
        end

可以简化为:

        task.wait()
        if v9.PlayerGui.GameUI.Main.Boosts["Quick Shot"]:GetAttribute("Activated") then
            return "Active"   .. tostring(v9.Character.Boosts["Quick Shot"].Value)
        else
            return "Inactive"
        end
© www.soinside.com 2019 - 2024. All rights reserved.