首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua Sandbox“黑客”

Lua Sandbox“黑客”
EN

Stack Overflow用户
提问于 2016-12-27 19:55:51
回答 1查看 1.1K关注 0票数 3

所以我使用一个程序,在lua中编写mods脚本,lua处于沙箱状态,这意味着大多数函数都被阻塞,比如IO和OS,我甚至不能使用REQUIRE来添加库。我需要一个在我的mod中解压缩文件的函数,而且我似乎找不到一种方法。有什么可以做的吗?如果不可能以一种简单的方式实现,那么是否有可能对程序.exe或dll进行黑客攻击,以便在lua中重新启用这些函数?

先谢谢你,问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-14 00:05:22

在纯Lua中有解压缩库,您应该能够在任何允许加载Lua脚本的环境中嵌入这些库:http://lua-users.org/wiki/CompressionAndArchiving

如果您根本无法访问任何文件,您可以尝试一个简单的封隔器:

代码语言:javascript
复制
#!/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')

这应该会创建这样一个脚本:

代码语言:javascript
复制
$ ./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")
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41351400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档