Lua 沙盒 "hacking"
Lua Sandbox "hacking"
所以我使用了一个程序,我在 lua 中编写了模组脚本,lua 处于沙盒状态,这意味着大多数功能都像 IO 和 OS 一样被阻止,我可以'甚至不使用 REQUIRE 添加库。
我需要一个功能来解压缩我的一个 mod 中的文件,但我似乎找不到办法。
有什么办法吗?
如果无法以简单的方式实现,是否可以破解程序 .exe 或 dll 以在 lua?
中重新启用这些功能
提前致谢,此致
纯Lua中有解压库,你应该可以将它们嵌入任何允许加载Lua脚本的环境中:http://lua-users.org/wiki/CompressionAndArchiving
如果您根本无法访问任何文件,您可以尝试一个简单的打包程序:
#!/usr/bin/env lua
local files = arg
local w = io.write
local function pack(...) return {...} end
w("files = {\n")
for i, filename in ipairs(arg) do
w('\t["' ..filename .. '"] = "')
local file = assert(io.open(filename, "r"), "Can't open file!")
local data = file:read("*a")
data = data:gsub("\a", "\a")
:gsub("\", "\\")
:gsub("\f", "\f")
:gsub("\n", "\n")
:gsub("\r", "\r")
:gsub("\t", "\t")
:gsub("\v", "\v")
:gsub('"', '\"')
:gsub("'", "\'")
w(data, '",\n')
end
w("}\n")
w([[
function require(path)
local data = assert(files[path..".lua"], "file not found")
local func = assert(loadstring(data))
local _, ret = assert(pcall(func))
return ret
end
]])
w('require("', arg[1]:match("^(.-)%.lua$"),'")\n')
这应该创建如下脚本:
$ ./packer.lua init.lua
files = {
["init.lua"] = "for k,v in pairs(arg) do\n\tprint(k,v)\nend\n",
}
function require(path)
local data = assert(files[path..".lua"], "file not found")
local func = assert(loadstring(data))
local _, ret = assert(pcall(func))
return ret
end
require("init")
所以我使用了一个程序,我在 lua 中编写了模组脚本,lua 处于沙盒状态,这意味着大多数功能都像 IO 和 OS 一样被阻止,我可以'甚至不使用 REQUIRE 添加库。 我需要一个功能来解压缩我的一个 mod 中的文件,但我似乎找不到办法。 有什么办法吗? 如果无法以简单的方式实现,是否可以破解程序 .exe 或 dll 以在 lua?
中重新启用这些功能提前致谢,此致
纯Lua中有解压库,你应该可以将它们嵌入任何允许加载Lua脚本的环境中:http://lua-users.org/wiki/CompressionAndArchiving
如果您根本无法访问任何文件,您可以尝试一个简单的打包程序:
#!/usr/bin/env lua
local files = arg
local w = io.write
local function pack(...) return {...} end
w("files = {\n")
for i, filename in ipairs(arg) do
w('\t["' ..filename .. '"] = "')
local file = assert(io.open(filename, "r"), "Can't open file!")
local data = file:read("*a")
data = data:gsub("\a", "\a")
:gsub("\", "\\")
:gsub("\f", "\f")
:gsub("\n", "\n")
:gsub("\r", "\r")
:gsub("\t", "\t")
:gsub("\v", "\v")
:gsub('"', '\"')
:gsub("'", "\'")
w(data, '",\n')
end
w("}\n")
w([[
function require(path)
local data = assert(files[path..".lua"], "file not found")
local func = assert(loadstring(data))
local _, ret = assert(pcall(func))
return ret
end
]])
w('require("', arg[1]:match("^(.-)%.lua$"),'")\n')
这应该创建如下脚本:
$ ./packer.lua init.lua
files = {
["init.lua"] = "for k,v in pairs(arg) do\n\tprint(k,v)\nend\n",
}
function require(path)
local data = assert(files[path..".lua"], "file not found")
local func = assert(loadstring(data))
local _, ret = assert(pcall(func))
return ret
end
require("init")