(Lua 5.1) 如何将字符串转换为函数

我正在创建一个隐藏的 loadstring 函数。我将字符串 'loadstring' 转换为字节(每个字符都存储在不同的变量中)

示例:

local a = 'loadstring'
ab = a:byte(1,1)
ac = a:byte(2,2)

然后我对所有的单个变量执行了 tonumber()

示例:

ab = tonumber(ab)
ac = tonumber(ac)

然后我将它们存储到另一个变量中(所有单个变量都存储在 string.char() 的格式中),像这样:

示例:

ab = string.char(ab)
ac = string.char(ac)

我成功地完成了这个步骤,但我发现我不知道如何编译所有的 string.char() 变量。我只能想到使用 ..,而我想要实现的是将此字符串值转换为可调用的函数,就像以前的 loadstring

示例:

-- 将字符串 'loadstring' 转换为 loadstring(字符串到函数)
loadstring("print'test'")()

所以,如果有人能帮助我,那将是太好了。

我的代码:

a = "108"
b = "111"
c = "97"
d = "100"
e = "115"
f = "116"
g = "114"
h = "105"
i = "110"
j = "103"

a = tonumber(a)
b = tonumber(b)
c = tonumber(c)
d = tonumber(d)
e = tonumber(e)
f = tonumber(f)
g = tonumber(g)
h = tonumber(h)
i = tonumber(i)
j = tonumber(j)

a = string.char(a)
b = string.char(b)
c = string.char(c)
d = string.char(d)
e = string.char(e)
f = string.char(f)
g = string.char(g)
h = string.char(h)
i = string.char(i)
j = string.char(j)

a = a..b..c..d..e..f..g..h..i..j

return a
点赞
用户7504558
用户7504558

你可以使用escape()和unescape()函数来隐藏函数名,并将函数本身作为全局表_G的一个元素调用:

function escape (s)
      local s = string.gsub(s or '', '.', function (a)  return string.format("%%%02X", string.byte(a))   end)
      return s
 end

function unescape (s)
     local  s = string.gsub(s or '', "%%(%x%x)", function (x) return string.char(tonumber(x, 16)) end)
     return s
end

local  f = "loadstring"

print(escape(f))   -- %6C%6F%61%64%73%74%72%69%6E%67

-- 使用
local strcode = unescape("%6C%6F%61%64%73%74%72%69%6E%67")   -- "loadstring"
_G[strcode] ("print('test')")()   -- test
2018-07-08 20:03:37