gpt4 book ai didi

security - 签名字节码加载

转载 作者:行者123 更新时间:2023-12-02 03:10:17 24 4
gpt4 key购买 nike

所以我正在研究确保 Lua 的 load 函数用于字节码加载。目前我有这个:

local nativeload = load
load = function(chunk, chunkname, mode, ...)
if mode == nil then
mode = "bt"
elseif not (mode == "b" or mode == "t" or mode == "bt") then
error("Invalid mode")
end
local targetenv = [[snip]]
if select('#', ...) > 0 then targetenv = ... end
if mode == "t" then
return nativeload(chunk, chunkname, mode, targetenv)
elseif type(chunk) == "string" then
if chunk:sub(1,4) == "\27Lua" then
local code = chunk:sub(1,-33)
if HMAC_SHA256(code, getkey()) == chunk:sub(-32) then
return nativeload(code, chunkname, mode, targetenv)
else
error("Invalid signature")
end
else
return nativeload(chunk, chunkname, mode, targetenv)
end
elseif type(chunk) == "function" then
-- How do I do this?!
end
end

而且,虽然文本模式和字符串 block 处理起来相当简单,但我不知道如何处理函数 block 。

我是否只是以某种方式将所有内容收集到一个字符串中,然后执行 HMAC 操作并使用该字符串调用 nativeload?但是后来我失去了在程序崩溃的情况下 load() 大文件(例如 2GB 文件)的能力(load 函数以 8kbyte 的增量编译文件,并且当文件大部分是空行,这意味着它在编译期间只需要几千字节——而将整个文件加载到一个字符串中显然会使用 2GB 的 RAM)。

我该怎么做?

最佳答案

local function extract_code(data)
local code = data:sub(1,-33)
assert(HMAC_SHA256(code, getkey()) == data:sub(-32), "Invalid signature")
return code
end

local nativeload = load
load = function(chunk, chunkname, mode, ...)
local targetenv = [[snip]]
if select('#', ...) ~= 0 then targetenv = ... end
local new_chunk
if type(chunk) == "string" then
new_chunk = chunk:match"^\27Lua" and extract_code(chunk) or chunk
elseif type(chunk) == "function" then
local buffer = ""
repeat
local next_part = chunk() or ""
buffer = buffer..next_part
until next_part == "" or #buffer >= 4
if buffer:match"^\27Lua" then -- Bytecode can't be very large, collect it in a string
local t = {buffer}
while t[#t] ~= "" do t[#t+1] = chunk() or "" end
new_chunk = extract_code(table.concat(t))
else -- Source code can be very large, use a function
local function f()
f = chunk
return buffer
end
function new_chunk()
return f()
end
end
end
return nativeload(new_chunk, chunkname, mode, targetenv)
end

关于security - 签名字节码加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40372756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com