如何从变量中运行Lua字节码?

所以我正在开发一个自定义的Lua字节码项目,当我运行这段代码时什么都不会发生,但是如果我打印出dec变量,然后将它复制并执行loadstring("long bytecode thing")(),它就可以工作了,但我自己的项目就不行了,有人能指出错误吗?

local OVal = 999
local SVal = 754

local function customEnc(STR)
    local currentVar = ""
    local strings = {}
    STR:gsub(".", function(c)
        if c == [[\]] then
            local newVar = tonumber(currentVar)
            if newVar == nil then
            else
                newVar = newVar * OVal /SVal
                table.insert(strings, tostring(newVar))
                newVar = ""
            end
            currentVar = ""
        else
            currentVar = currentVar .. c
        end
    end)
    local newString = ""
    for i,v in pairs(strings) do
        newString = newString .. [[\]] .. v
    end
    newString = newString .. [[\]]
    return newString
    end

    local function customDec(STR)
        local currentVar = ""
        local strings = {}
        STR:gsub(".", function(c)
            if c == [[\]] then
                local newVar = tonumber(currentVar)
                if newVar == nil then
                else
                    newVar = newVar / OVal *SVal
                    table.insert(strings, tostring(newVar))
                    newVar = ""
                end
                currentVar = ""
            else
                currentVar = currentVar .. c
            end
        end)
        local newString = ""
        for i,v in pairs(strings) do
            newString = newString .. [[\]] .. string.format("%.0f",v)
        end
        return newString
    end
local enc = customEnc([[\112\114\105\110\116\40\34\72\101\108\108\111\32\87\111\114\108\100\34\41\10]])
local dec = customDec(enc) .. [[\10]]
loadstring(dec)()
点赞
用户7396148
用户7396148

"\100" 不同于 [[\100]],前者得到的是一个字符,后者得到的是 4 个字符。

而且你在 customDec 函数中没有对数学进行反转。

local function customEnc(STR)
  local currentVar = ""
  local strings = {}
  STR:gsub(".", function(c)
      local newVar = string.byte(c) * OVal / SVal
      table.insert(strings, string.char(newVar))
    end)
  local newString = ""
  for i,v in ipairs(strings) do
    newString = newString .. v
  end
  newString = newString
  return newString
end

local function customDec(STR)
  local currentVar = ""
  local strings = {}
  STR:gsub(".", function(c)
      local newVar = string.byte(c) / OVal * SVal
      table.insert(strings, string.char(newVar))
    end)
  local newString = ""
  for i,v in ipairs(strings) do
    newString = newString .. v
  end
  return newString
end

local enc = customEnc("\112\114\105\110\116\40\34\72\101\108\108\111\32\87\111\114\108\100\34\41\10")
local dec = customDec(enc)
loadstring(dec)()
2021-07-16 22:58:01