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

时间:2018-07-08 13:06:53

标签: lua

我正在创建一个隐藏的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

示例:

-- Converting my string 'loadstring' to loadstring (string to function)
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

1 个答案:

答案 0 :(得分:1)

您可以使用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

-- using
local strcode = unescape("%6C%6F%61%64%73%74%72%69%6E%67")   -- "loadstring"
_G[strcode] ("print('test')")()   -- test