IronBrew De-Obfuscation; Is it possible?

Hey folks! Looks like you stumbled across an old post of mine. Information might be outdated!

Original Post

Hey there!

Many of us have either seen or had to directly deal with exploits on Roblox. They can be pretty irritating to experience, but even more irritating to fix. To make things 10x harder, many exploiters use Iron Brew V2 to hide their code, aka “Obfuscate.”

Below is Iron-Brew obfuscation for print("Hi")

--[[
IronBrew:tm: obfuscation; Version 2.7.2
]]
return (function(bruh_IlIlllIIlIIlIlIllIIlIlI, bruh_lIIIIllIllIlIIIlIllIllIIl, bruh_lIIIIllIllIlIIIlIllIllIIl)
    local bruh_llllIlIlIIllIlllIllIl = string.char
    local bruh_lllllllIIIlIIlIIIII = string.sub
    local bruh_IIIIIllIIllIllIlIlIl = table.concat
    local bruh_IlIlIIIIIlllIllllIIllll = math.ldexp
    local bruh_IlIIIIIlIIIllIIIlIII = getfenv or function()
            return _ENV
        end
    local bruh_llIlIlllIlllllIII = select
    local bruh_lIIIIllIllIlIIIlIllIllIIl = unpack or table.unpack
    local bruh_IIlIIlIIIlIlIlI = tonumber
    local function bruh_lllIllIIIllIIlIII(bruh_IIlIllIlIlIIIl)
        local bruh_IllIIlllllIlIllIIIlIIllII, bruh_lIlllIIIllIIllIIlIIllllIl, bruh_llIIllIl = "", "", {}
        local bruh_lIllllIIIIIlllIlIlIII = 256
        local bruh_IlIlllIIlIIlIlIllIIlIlI = {}
        for bruh_lIIIIllIllIlIIIlIllIllIIl = 0, bruh_lIllllIIIIIlllIlIlIII - 1 do
            bruh_IlIlllIIlIIlIlIllIIlIlI[bruh_lIIIIllIllIlIIIlIllIllIIl] =
                bruh_llllIlIlIIllIlllIllIl(bruh_lIIIIllIllIlIIIlIllIllIIl)
        end
        local bruh_lIIIIllIllIlIIIlIllIllIIl = 1
        local function bruh_IIIIlllIllIIllllII()
            local bruh_IllIIlllllIlIllIIIlIIllII =
                bruh_IIlIIlIIIlIlIlI(
                bruh_lllllllIIIlIIlIIIII(
                    bruh_IIlIllIlIlIIIl,
                    bruh_lIIIIllIllIlIIIlIllIllIIl,
                    bruh_lIIIIllIllIlIIIlIllIllIIl
                ),
                36
            )
            bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_lIIIIllIllIlIIIlIllIllIIl + 1
            local bruh_lIlllIIIllIIllIIlIIllllIl =
                bruh_IIlIIlIIIlIlIlI(
                bruh_lllllllIIIlIIlIIIII(
                    bruh_IIlIllIlIlIIIl,
                    bruh_lIIIIllIllIlIIIlIllIllIIl,
                    bruh_lIIIIllIllIlIIIlIllIllIIl + bruh_IllIIlllllIlIllIIIlIIllII - 1
                ),
                36
            )
            bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_lIIIIllIllIlIIIlIllIllIIl + bruh_IllIIlllllIlIllIIIlIIllII
            return bruh_lIlllIIIllIIllIIlIIllllIl
        end
        bruh_IllIIlllllIlIllIIIlIIllII = bruh_llllIlIlIIllIlllIllIl(bruh_IIIIlllIllIIllllII())
        bruh_llIIllIl[1] = bruh_IllIIlllllIlIllIIIlIIllII
        while bruh_lIIIIllIllIlIIIlIllIllIIl < #bruh_IIlIllIlIlIIIl do
            local bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_IIIIlllIllIIllllII()
            if bruh_IlIlllIIlIIlIlIllIIlIlI[bruh_lIIIIllIllIlIIIlIllIllIIl] then
                bruh_lIlllIIIllIIllIIlIIllllIl = bruh_IlIlllIIlIIlIlIllIIlIlI[bruh_lIIIIllIllIlIIIlIllIllIIl]
            else
                bruh_lIlllIIIllIIllIIlIIllllIl =
                    bruh_IllIIlllllIlIllIIIlIIllII .. bruh_lllllllIIIlIIlIIIII(bruh_IllIIlllllIlIllIIIlIIllII, 1, 1)
            end
            bruh_IlIlllIIlIIlIlIllIIlIlI[bruh_lIllllIIIIIlllIlIlIII] =
                bruh_IllIIlllllIlIllIIIlIIllII .. bruh_lllllllIIIlIIlIIIII(bruh_lIlllIIIllIIllIIlIIllllIl, 1, 1)
            bruh_llIIllIl[#bruh_llIIllIl + 1], bruh_IllIIlllllIlIllIIIlIIllII, bruh_lIllllIIIIIlllIlIlIII =
                bruh_lIlllIIIllIIllIIlIIllllIl,
                bruh_lIlllIIIllIIllIIlIIllllIl,
                bruh_lIllllIIIIIlllIlIlIII + 1
        end
        return table.concat(bruh_llIIllIl)
    end
    local bruh_IIIIlllIllIIllllII =
        bruh_lllIllIIIllIIlIII(
        "1J1H2751J1K2751H22P22R23C23J22T1J27427522H23C1L2791327L2751G27M1N1H27Q27H2751M27927427Q1H1I279280279279"
    )
    local bruh_lIIIIllIllIlIIIlIllIllIIl = (bit or bit32)
    local bruh_llIIllIl =
        bruh_lIIIIllIllIlIIIlIllIllIIl and bruh_lIIIIllIllIlIIIlIllIllIIl.bxor or
        function(bruh_lIIIIllIllIlIIIlIllIllIIl, bruh_lIlllIIIllIIllIIlIIllllIl)
            local bruh_IllIIlllllIlIllIIIlIIllII, bruh_llIIllIl, bruh_lllllllIIIlIIlIIIII = 1, 0, 10
            while bruh_lIIIIllIllIlIIIlIllIllIIl > 0 and bruh_lIlllIIIllIIllIIlIIllllIl > 0 do
                local bruh_lllllllIIIlIIlIIIII, bruh_lIllllIIIIIlllIlIlIII =
                    bruh_lIIIIllIllIlIIIlIllIllIIl % 2,
                    bruh_lIlllIIIllIIllIIlIIllllIl % 2
                if bruh_lllllllIIIlIIlIIIII ~= bruh_lIllllIIIIIlllIlIlIII then
                    bruh_llIIllIl = bruh_llIIllIl + bruh_IllIIlllllIlIllIIIlIIllII
                end
                bruh_lIIIIllIllIlIIIlIllIllIIl, bruh_lIlllIIIllIIllIIlIIllllIl, bruh_IllIIlllllIlIllIIIlIIllII =
                    (bruh_lIIIIllIllIlIIIlIllIllIIl - bruh_lllllllIIIlIIlIIIII) / 2,
                    (bruh_lIlllIIIllIIllIIlIIllllIl - bruh_lIllllIIIIIlllIlIlIII) / 2,
                    bruh_IllIIlllllIlIllIIIlIIllII * 2
            end
            if bruh_lIIIIllIllIlIIIlIllIllIIl < bruh_lIlllIIIllIIllIIlIIllllIl then
                bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_lIlllIIIllIIllIIlIIllllIl
            end
            while bruh_lIIIIllIllIlIIIlIllIllIIl > 0 do
                local bruh_lIlllIIIllIIllIIlIIllllIl = bruh_lIIIIllIllIlIIIlIllIllIIl % 2
                if bruh_lIlllIIIllIIllIIlIIllllIl > 0 then
                    bruh_llIIllIl = bruh_llIIllIl + bruh_IllIIlllllIlIllIIIlIIllII
                end
                bruh_lIIIIllIllIlIIIlIllIllIIl, bruh_IllIIlllllIlIllIIIlIIllII =
                    (bruh_lIIIIllIllIlIIIlIllIllIIl - bruh_lIlllIIIllIIllIIlIIllllIl) / 2,
                    bruh_IllIIlllllIlIllIIIlIIllII * 2
            end
            return bruh_llIIllIl
        end
    local function bruh_lIlllIIIllIIllIIlIIllllIl(
        bruh_IllIIlllllIlIllIIIlIIllII,
        bruh_lIIIIllIllIlIIIlIllIllIIl,
        bruh_lIlllIIIllIIllIIlIIllllIl)
        if bruh_lIlllIIIllIIllIIlIIllllIl then
            local bruh_lIIIIllIllIlIIIlIllIllIIl =
                (bruh_IllIIlllllIlIllIIIlIIllII / 2 ^ (bruh_lIIIIllIllIlIIIlIllIllIIl - 1)) %
                2 ^ ((bruh_lIlllIIIllIIllIIlIIllllIl - 1) - (bruh_lIIIIllIllIlIIIlIllIllIIl - 1) + 1)
            return bruh_lIIIIllIllIlIIIlIllIllIIl - bruh_lIIIIllIllIlIIIlIllIllIIl % 1
        else
            local bruh_lIIIIllIllIlIIIlIllIllIIl = 2 ^ (bruh_lIIIIllIllIlIIIlIllIllIIl - 1)
            return (bruh_IllIIlllllIlIllIIIlIIllII % (bruh_lIIIIllIllIlIIIlIllIllIIl + bruh_lIIIIllIllIlIIIlIllIllIIl) >=
                bruh_lIIIIllIllIlIIIlIllIllIIl) and
                1 or
                0
        end
    end
    local bruh_lIIIIllIllIlIIIlIllIllIIl = 1
    local function bruh_IllIIlllllIlIllIIIlIIllII()
        local bruh_lIllllIIIIIlllIlIlIII,
            bruh_lllllllIIIlIIlIIIII,
            bruh_lIlllIIIllIIllIIlIIllllIl,
            bruh_IllIIlllllIlIllIIIlIIllII =
            bruh_IlIlllIIlIIlIlIllIIlIlI(
            bruh_IIIIlllIllIIllllII,
            bruh_lIIIIllIllIlIIIlIllIllIIl,
            bruh_lIIIIllIllIlIIIlIllIllIIl + 3
        )
        bruh_lIllllIIIIIlllIlIlIII = bruh_llIIllIl(bruh_lIllllIIIIIlllIlIlIII, 17)
        bruh_lllllllIIIlIIlIIIII = bruh_llIIllIl(bruh_lllllllIIIlIIlIIIII, 17)
        bruh_lIlllIIIllIIllIIlIIllllIl = bruh_llIIllIl(bruh_lIlllIIIllIIllIIlIIllllIl, 17)
        bruh_IllIIlllllIlIllIIIlIIllII = bruh_llIIllIl(bruh_IllIIlllllIlIllIIIlIIllII, 17)
        bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_lIIIIllIllIlIIIlIllIllIIl + 4
        return (bruh_IllIIlllllIlIllIIIlIIllII * 16777216) + (bruh_lIlllIIIllIIllIIlIIllllIl * 65536) +
            (bruh_lllllllIIIlIIlIIIII * 256) +
            bruh_lIllllIIIIIlllIlIlIII
    end
    local function bruh_IIlIllIlIlIIIl()
        local bruh_IllIIlllllIlIllIIIlIIllII =
            bruh_llIIllIl(
            bruh_IlIlllIIlIIlIlIllIIlIlI(
                bruh_IIIIlllIllIIllllII,
                bruh_lIIIIllIllIlIIIlIllIllIIl,
                bruh_lIIIIllIllIlIIIlIllIllIIl
            ),
            17
        )
        bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_lIIIIllIllIlIIIlIllIllIIl + 1
        return bruh_IllIIlllllIlIllIIIlIIllII
    end
    local function bruh_lIllllIIIIIlllIlIlIII()
        local bruh_IllIIlllllIlIllIIIlIIllII, bruh_lIlllIIIllIIllIIlIIllllIl =
            bruh_IlIlllIIlIIlIlIllIIlIlI(
            bruh_IIIIlllIllIIllllII,
            bruh_lIIIIllIllIlIIIlIllIllIIl,
            bruh_lIIIIllIllIlIIIlIllIllIIl + 2
        )
        bruh_IllIIlllllIlIllIIIlIIllII = bruh_llIIllIl(bruh_IllIIlllllIlIllIIIlIIllII, 17)
        bruh_lIlllIIIllIIllIIlIIllllIl = bruh_llIIllIl(bruh_lIlllIIIllIIllIIlIIllllIl, 17)
        bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_lIIIIllIllIlIIIlIllIllIIl + 2
        return (bruh_lIlllIIIllIIllIIlIIllllIl * 256) + bruh_IllIIlllllIlIllIIIlIIllII
    end
    local function bruh_lllIllIIIllIIlIII()
        local bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_IllIIlllllIlIllIIIlIIllII()
        local bruh_IllIIlllllIlIllIIIlIIllII = bruh_IllIIlllllIlIllIIIlIIllII()
        local bruh_lllllllIIIlIIlIIIII = 1
        local bruh_llIIllIl =
            (bruh_lIlllIIIllIIllIIlIIllllIl(bruh_IllIIlllllIlIllIIIlIIllII, 1, 20) * (2 ^ 32)) +
            bruh_lIIIIllIllIlIIIlIllIllIIl
        local bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_lIlllIIIllIIllIIlIIllllIl(bruh_IllIIlllllIlIllIIIlIIllII, 21, 31)
        local bruh_IllIIlllllIlIllIIIlIIllII =
            ((-1) ^ bruh_lIlllIIIllIIllIIlIIllllIl(bruh_IllIIlllllIlIllIIIlIIllII, 32))
        if (bruh_lIIIIllIllIlIIIlIllIllIIl == 0) then
            if (bruh_llIIllIl == 0) then
                return bruh_IllIIlllllIlIllIIIlIIllII * 0
            else
                bruh_lIIIIllIllIlIIIlIllIllIIl = 1
                bruh_lllllllIIIlIIlIIIII = 0
            end
        elseif (bruh_lIIIIllIllIlIIIlIllIllIIl == 2047) then
            return (bruh_llIIllIl == 0) and (bruh_IllIIlllllIlIllIIIlIIllII * (1 / 0)) or
                (bruh_IllIIlllllIlIllIIIlIIllII * (0 / 0))
        end
        return bruh_IlIlIIIIIlllIllllIIllll(bruh_IllIIlllllIlIllIIIlIIllII, bruh_lIIIIllIllIlIIIlIllIllIIl - 1023) *
            (bruh_lllllllIIIlIIlIIIII + (bruh_llIIllIl / (2 ^ 52)))
    end
    local bruh_IIlIIlIIIlIlIlI = bruh_IllIIlllllIlIllIIIlIIllII
    local function bruh_llllIllIlIlI(bruh_IllIIlllllIlIllIIIlIIllII)
        local bruh_lIlllIIIllIIllIIlIIllllIl
        if (not bruh_IllIIlllllIlIllIIIlIIllII) then
            bruh_IllIIlllllIlIllIIIlIIllII = bruh_IIlIIlIIIlIlIlI()
            if (bruh_IllIIlllllIlIllIIIlIIllII == 0) then
                return ""
            end
        end
        bruh_lIlllIIIllIIllIIlIIllllIl =
            bruh_lllllllIIIlIIlIIIII(
            bruh_IIIIlllIllIIllllII,
            bruh_lIIIIllIllIlIIIlIllIllIIl,
            bruh_lIIIIllIllIlIIIlIllIllIIl + bruh_IllIIlllllIlIllIIIlIIllII - 1
        )
        bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_lIIIIllIllIlIIIlIllIllIIl + bruh_IllIIlllllIlIllIIIlIIllII
        local bruh_IllIIlllllIlIllIIIlIIllII = {}
        for bruh_lIIIIllIllIlIIIlIllIllIIl = 1, #bruh_lIlllIIIllIIllIIlIIllllIl do
            bruh_IllIIlllllIlIllIIIlIIllII[bruh_lIIIIllIllIlIIIlIllIllIIl] =
                bruh_llllIlIlIIllIlllIllIl(
                bruh_llIIllIl(
                    bruh_IlIlllIIlIIlIlIllIIlIlI(
                        bruh_lllllllIIIlIIlIIIII(
                            bruh_lIlllIIIllIIllIIlIIllllIl,
                            bruh_lIIIIllIllIlIIIlIllIllIIl,
                            bruh_lIIIIllIllIlIIIlIllIllIIl
                        )
                    ),
                    17
                )
            )
        end
        return bruh_IIIIIllIIllIllIlIlIl(bruh_IllIIlllllIlIllIIIlIIllII)
    end
    local bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_IllIIlllllIlIllIIIlIIllII
    local function bruh_IIIIIllIIllIllIlIlIl(...)
        return {...}, bruh_llIlIlllIlllllIII("#", ...)
    end
    local function bruh_IlIlIIIIIlllIllllIIllll()
        local bruh_llllIlIlIIllIlllIllIl = {}
        local bruh_IIlIIlIIIlIlIlI = {}
        local bruh_lIIIIllIllIlIIIlIllIllIIl = {}
        local bruh_IIIIlllIllIIllllII = {
            [#{{672, 366, 614, 209}, "1 + 1 = 111"}] = bruh_IIlIIlIIIlIlIlI,
            [#{"1 + 1 = 111", "1 + 1 = 111", "1 + 1 = 111"}] = nil,
            [#{{456, 566, 22, 446}, {153, 947, 248, 241}, {963, 100, 352, 84}, {566, 110, 650, 33}}] = bruh_lIIIIllIllIlIIIlIllIllIIl,
            [#{"1 + 1 = 111"}] = bruh_llllIlIlIIllIlllIllIl
        }
        local bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_IllIIlllllIlIllIIIlIIllII()
        local bruh_llIIllIl = {}
        for bruh_lIlllIIIllIIllIIlIIllllIl = 1, bruh_lIIIIllIllIlIIIlIllIllIIl do
            local bruh_IllIIlllllIlIllIIIlIIllII = bruh_IIlIllIlIlIIIl()
            local bruh_lIIIIllIllIlIIIlIllIllIIl
            if (bruh_IllIIlllllIlIllIIIlIIllII == 0) then
                bruh_lIIIIllIllIlIIIlIllIllIIl = (bruh_IIlIllIlIlIIIl() ~= 0)
            elseif (bruh_IllIIlllllIlIllIIIlIIllII == 3) then
                bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_lllIllIIIllIIlIII()
            elseif (bruh_IllIIlllllIlIllIIIlIIllII == 2) then
                bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_llllIllIlIlI()
            end
            bruh_llIIllIl[bruh_lIlllIIIllIIllIIlIIllllIl] = bruh_lIIIIllIllIlIIIlIllIllIIl
        end
        for bruh_IIIIlllIllIIllllII = 1, bruh_IllIIlllllIlIllIIIlIIllII() do
            local bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_IIlIllIlIlIIIl()
            if (bruh_lIlllIIIllIIllIIlIIllllIl(bruh_lIIIIllIllIlIIIlIllIllIIl, 1, 1) == 0) then
                local bruh_lllllllIIIlIIlIIIII = bruh_lIlllIIIllIIllIIlIIllllIl(bruh_lIIIIllIllIlIIIlIllIllIIl, 2, 3)
                local bruh_IlIlllIIlIIlIlIllIIlIlI =
                    bruh_lIlllIIIllIIllIIlIIllllIl(bruh_lIIIIllIllIlIIIlIllIllIIl, 4, 6)
                local bruh_lIIIIllIllIlIIIlIllIllIIl = {
                    bruh_lIllllIIIIIlllIlIlIII(),
                    bruh_lIllllIIIIIlllIlIlIII(),
                    nil,
                    nil
                }
                if (bruh_lllllllIIIlIIlIIIII == 0) then
                    bruh_lIIIIllIllIlIIIlIllIllIIl[#("H5k")] = bruh_lIllllIIIIIlllIlIlIII()
                    bruh_lIIIIllIllIlIIIlIllIllIIl[#("fKeV")] = bruh_lIllllIIIIIlllIlIlIII()
                elseif (bruh_lllllllIIIlIIlIIIII == 1) then
                    bruh_lIIIIllIllIlIIIlIllIllIIl[#("W9x")] = bruh_IllIIlllllIlIllIIIlIIllII()
                elseif (bruh_lllllllIIIlIIlIIIII == 2) then
                    bruh_lIIIIllIllIlIIIlIllIllIIl[#("tfX")] = bruh_IllIIlllllIlIllIIIlIIllII() - (2 ^ 16)
                elseif (bruh_lllllllIIIlIIlIIIII == 3) then
                    bruh_lIIIIllIllIlIIIlIllIllIIl[#("8Ml")] = bruh_IllIIlllllIlIllIIIlIIllII() - (2 ^ 16)
                    bruh_lIIIIllIllIlIIIlIllIllIIl[#("tsSK")] = bruh_lIllllIIIIIlllIlIlIII()
                end
                if (bruh_lIlllIIIllIIllIIlIIllllIl(bruh_IlIlllIIlIIlIlIllIIlIlI, 1, 1) == 1) then
                    bruh_lIIIIllIllIlIIIlIllIllIIl[#("KO")] = bruh_llIIllIl[bruh_lIIIIllIllIlIIIlIllIllIIl[#("PO")]]
                end
                if (bruh_lIlllIIIllIIllIIlIIllllIl(bruh_IlIlllIIlIIlIlIllIIlIlI, 2, 2) == 1) then
                    bruh_lIIIIllIllIlIIIlIllIllIIl[#("Xff")] = bruh_llIIllIl[bruh_lIIIIllIllIlIIIlIllIllIIl[#("4lB")]]
                end
                if (bruh_lIlllIIIllIIllIIlIIllllIl(bruh_IlIlllIIlIIlIlIllIIlIlI, 3, 3) == 1) then
                    bruh_lIIIIllIllIlIIIlIllIllIIl[#("8C1k")] = bruh_llIIllIl[bruh_lIIIIllIllIlIIIlIllIllIIl[#("uF6m")]]
                end
                bruh_llllIlIlIIllIlllIllIl[bruh_IIIIlllIllIIllllII] = bruh_lIIIIllIllIlIIIlIllIllIIl
            end
        end
        bruh_IIIIlllIllIIllllII[3] = bruh_IIlIllIlIlIIIl()
        for bruh_lIIIIllIllIlIIIlIllIllIIl = 1, bruh_IllIIlllllIlIllIIIlIIllII() do
            bruh_IIlIIlIIIlIlIlI[bruh_lIIIIllIllIlIIIlIllIllIIl - 1] = bruh_IlIlIIIIIlllIllllIIllll()
        end
        return bruh_IIIIlllIllIIllllII
    end
    local function bruh_llllIlIlIIllIlllIllIl(
        bruh_lIIIIllIllIlIIIlIllIllIIl,
        bruh_IllIIlllllIlIllIIIlIIllII,
        bruh_IlIlllIIlIIlIlIllIIlIlI)
        bruh_lIIIIllIllIlIIIlIllIllIIl =
            (bruh_lIIIIllIllIlIIIlIllIllIIl == true and bruh_IlIlIIIIIlllIllllIIllll()) or
            bruh_lIIIIllIllIlIIIlIllIllIIl
        return (function(...)
            local bruh_IIlIllIlIlIIIl = bruh_lIIIIllIllIlIIIlIllIllIIl[1]
            local bruh_lIlllIIIllIIllIIlIIllllIl = bruh_lIIIIllIllIlIIIlIllIllIIl[3]
            local bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_lIIIIllIllIlIIIlIllIllIIl[2]
            local bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_IIIIIllIIllIllIlIlIl
            local bruh_llIIllIl = 1
            local bruh_lIIIIllIllIlIIIlIllIllIIl = -1
            local bruh_IIIIlllIllIIllllII = {}
            local bruh_lIllllIIIIIlllIlIlIII = {...}
            local bruh_lllllllIIIlIIlIIIII = bruh_llIlIlllIlllllIII("#", ...) - 1
            local bruh_lIIIIllIllIlIIIlIllIllIIl = {}
            local bruh_IllIIlllllIlIllIIIlIIllII = {}
            for bruh_lIIIIllIllIlIIIlIllIllIIl = 0, bruh_lllllllIIIlIIlIIIII do
                if (bruh_lIIIIllIllIlIIIlIllIllIIl >= bruh_lIlllIIIllIIllIIlIIllllIl) then
                    bruh_IIIIlllIllIIllllII[bruh_lIIIIllIllIlIIIlIllIllIIl - bruh_lIlllIIIllIIllIIlIIllllIl] =
                        bruh_lIllllIIIIIlllIlIlIII[bruh_lIIIIllIllIlIIIlIllIllIIl + 1]
                else
                    bruh_IllIIlllllIlIllIIIlIIllII[bruh_lIIIIllIllIlIIIlIllIllIIl] =
                        bruh_lIllllIIIIIlllIlIlIII[bruh_lIIIIllIllIlIIIlIllIllIIl + #{"1 + 1 = 111"}]
                end
            end
            local bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_lllllllIIIlIIlIIIII - bruh_lIlllIIIllIIllIIlIIllllIl + 1
            local bruh_lIIIIllIllIlIIIlIllIllIIl
            local bruh_lIlllIIIllIIllIIlIIllllIl
            while true do
                bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_IIlIllIlIlIIIl[bruh_llIIllIl]
                bruh_lIlllIIIllIIllIIlIIllllIl = bruh_lIIIIllIllIlIIIlIllIllIIl[#("8")]
                if bruh_lIlllIIIllIIllIIlIIllllIl <= #("mvg") then
                    if bruh_lIlllIIIllIIllIIlIIllllIl <= #("8") then
                        if bruh_lIlllIIIllIIllIIlIIllllIl > #("") then
                            bruh_IllIIlllllIlIllIIIlIIllII[bruh_lIIIIllIllIlIIIlIllIllIIl[#("P2")]] =
                                bruh_IlIlllIIlIIlIlIllIIlIlI[bruh_lIIIIllIllIlIIIlIllIllIIl[#("A0O")]]
                        else
                            local bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_lIIIIllIllIlIIIlIllIllIIl[#("Cv")]
                            bruh_IllIIlllllIlIllIIIlIIllII[bruh_lIIIIllIllIlIIIlIllIllIIl](
                                bruh_IllIIlllllIlIllIIIlIIllII[bruh_lIIIIllIllIlIIIlIllIllIIl + 1]
                            )
                        end
                    elseif bruh_lIlllIIIllIIllIIlIIllllIl == #("sU") then
                        bruh_IllIIlllllIlIllIIIlIIllII[bruh_lIIIIllIllIlIIIlIllIllIIl[#("17")]] =
                            bruh_lIIIIllIllIlIIIlIllIllIIl[#("zlh")]
                    else
                        do
                            return
                        end
                    end
                elseif bruh_lIlllIIIllIIllIIlIIllllIl <= #("yHr05") then
                    if bruh_lIlllIIIllIIllIIlIIllllIl > #("8oMq") then
                        do
                            return
                        end
                    else
                        bruh_IllIIlllllIlIllIIIlIIllII[bruh_lIIIIllIllIlIIIlIllIllIIl[#{"1 + 1 = 111", "1 + 1 = 111"}]] =
                            bruh_IlIlllIIlIIlIlIllIIlIlI[bruh_lIIIIllIllIlIIIlIllIllIIl[#("t0i")]]
                    end
                elseif bruh_lIlllIIIllIIllIIlIIllllIl > #("rlEi88") then
                    local bruh_lIIIIllIllIlIIIlIllIllIIl = bruh_lIIIIllIllIlIIIlIllIllIIl[#("xW")]
                    bruh_IllIIlllllIlIllIIIlIIllII[bruh_lIIIIllIllIlIIIlIllIllIIl](
                        bruh_IllIIlllllIlIllIIIlIIllII[bruh_lIIIIllIllIlIIIlIllIllIIl + 1]
                    )
                else
                    bruh_IllIIlllllIlIllIIIlIIllII[bruh_lIIIIllIllIlIIIlIllIllIIl[#("7t")]] =
                        bruh_lIIIIllIllIlIIIlIllIllIIl[#("jbg")]
                end
                bruh_llIIllIl = bruh_llIIllIl + 1
            end
        end)
    end
    return bruh_llllIlIlIIllIlllIllIl(true, {}, bruh_IlIIIIIlIIIllIIIlIII())()
end)(string.byte, table.insert, setmetatable)

Does anybody have any potential steps to solving this?
Do these obfuscated scripts have portions in common?

They’re all custom lua VMs. You will have to find out the opcodes and how it decrypts data so you can make a bytecode decompiler.

3 Likes

Ironbrew works by implementing a VM which interprets a custom-generated bytecode format reminiscent to regular Lua bytecode.
To answer your main question: yes, it definitely is possible to translate it back into vanilla bytecode.
To answer your second question: if you wish to observe what the script is doing, you have to reverse each mutated opcode (which Lua has about 40 of) and debug which references to the stack it makes/what it does with its parameters
To answer your third question: yes, most obfuscated scripts use a common template which is modified for every individual script, including the decoder for the encoded bytecode string and an interpreter

5 Likes

@urbeautifulskin @alksjdfl
From what I observe, the code mainly uses math.ldexp, setmetatable, and the string library to obfuscate and run. Does this raise any ideas, or is it similar to most others?

table.concat is also used fairly often, which I find interesting.

By the way, it appears

"1J1H2751J1K2751H22P22R23C23J22T1J27427522H23C1L2791327L2751G27M1N1H27Q27H2751M27927427Q1H1I279280279279"

is the obfuscated version of print("Hi")

1 Like

The math and string functions are prominantly for decoding the big string that is the bytecode and/or the instructions. table.concat also seems to play a role in the inner workings of the VM.

Also, here’s what the interpreter has to do in essence (sample taken from Lida’s disassembler):

.function
.const
    kPrint  "print"
    kHi     "Hi"
.code
	GETGLOBAL  r0, kPrint
	LOADK      r1, kHi
	CALL       r0, 2, 1
	RETURN     r0, 1
.end
3 Likes

@urbeautifulskin Thanks for your help! A member of my team was successfully able to de-obfuscate owlhub, and we can now work on patching that :slight_smile:

5 Likes

I’m interested in that could you dm me on discord so we can talk more?

Yes IB2 and AztupBrew are fully deobfuscated and you shouldn’t use them for projects anymore. Unfortunately, the deobfuscator is private and only select people have access.

1 Like

No. The method will not be shared in order to prevent countercountermeasures.

Take a look for yourself here. This is the de-obfuscated version of the No-Scope Sniping OwlHub exploit.

Don’t use the replies to diss me, you only make yourself look worse.

This is a really funny post because you can’t deobfuscate comments or variable names as they aren’t present in the bytecode. This looks like something released for free that someone on your team sniped.

Edit: if you look up the comment in Google a pastebin from March with pretty much the exact code comes up: -- Join the discord to be the first to know of updates! discord.gg/7Cb8bS2loca - Pastebin.com

8 Likes

He decoded the pastebin link.

These were the exact deobfuscation results:

loadstring
game
HttpGet
https://pastebin.com/raw/eKwyeQa0
GetService
ReplicatedStorage
GunModules
CreateTab
Gun Mods
MakeButton
Infinite Ammo
Fast Fire
Destroy Library
pairs
GetChildren
ClassName
ModuleScript
require
ClipSize
math
huge
pairs
GetChildren
ClassName
ModuleScript
require
FireRate
Destroy
loadstring
game
HttpGet
https://pastebin.com/raw/eKwyeQa0
GetService
ReplicatedStorage
GunModules
CreateTab
Gun Mods
MakeButton
Infinite Ammo
Fast Fire
Destroy Library
pairs
GetChildren
ClassName
ModuleScript
require
ClipSize
math
huge
pairs
GetChildren
ClassName
ModuleScript
require
FireRate
Destroy
1 Like