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