(Lua 5.1)如何将字符串转换为函数
我正在创建一个隐藏的loadstring函数。我将字符串“loadstring”转换为字节(每个字符位于不同的变量中) 例如:(Lua 5.1)如何将字符串转换为函数,lua,Lua,我正在创建一个隐藏的loadstring函数。我将字符串“loadstring”转换为字节(每个字符位于不同的变量中) 例如: local a = 'loadstring' ab = a:byte(1,1) ac = a:byte(2,2) ab = tonumber(ab) ac = tonumber(ac) 然后我对所有的变量做了一个tonumber() 例如: local a = 'loadstring' ab = a:byte(1,1) ac = a:byte(2,2) ab =
local a = 'loadstring'
ab = a:byte(1,1)
ac = a:byte(2,2)
ab = tonumber(ab)
ac = tonumber(ac)
然后我对所有的变量做了一个tonumber()
例如:
local a = 'loadstring'
ab = a:byte(1,1)
ac = a:byte(2,2)
ab = tonumber(ab)
ac = tonumber(ac)
然后我将其放入另一个变量(所有单个变量)中,并存储为string.char()
格式,如下所示:
例如:
ab = string.char(ab)
ac = string.char(ac)
-- Converting my string 'loadstring' to loadstring (string to function)
loadstring("print'test'")()
这是我能够成功完成的,但我注意到我不知道如何编译所有string.char()
变量。我只能考虑使用。
,我想得到的是,我想把这个字符串值变成一个可调用的函数,就像前面的loadstring
例如:
ab = string.char(ab)
ac = string.char(ac)
-- 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
您可以使用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
“隐藏的加载字符串函数”是什么意思?您是否正在尝试制作一个带有“后门”的沙盒,允许您加载字符串?@LuaTutoring:注意:这仍然要求
loadstring
可见且全局可访问。@Nicolas我能够使其可见,因此loadstring不可见。谢谢你的通知,我必须检查。@LuaTutoring:我很好奇:你是怎么做到的,而且还允许\u G[“loadstring”]
工作?@LuaTutoring:对不起,我实际上看不懂。你能把它转换成易读的东西吗?重要的部分是从全局表中删除loadstring
(从而阻止loadstring(…)
工作),同时仍然允许\u G[“loadstring”](…)
工作。@LuaTutoring:正如预期的那样,如果我将loadstring(a)(
粘贴在那一块代码的末尾。。。它很好用。你什么都没有隐瞒。