bai19940321 2025-05-02 17:47 采纳率: 9.5%
浏览 7

Lua函数体加密方法

lua5.1怎么才能只加密一个函数中的函数体,,并且不影响传参。
比如只加密local GUIUtils = require("GUI.GUIUtils")和local basenode = self.m_panel:FindDirect("Img_0"),但是不能影响self的传入。

def.method().InitUI = function(self)
    self.m_uiObjs = {}
local GUIUtils = require("GUI.GUIUtils")
local basenode = self.m_panel:FindDirect("Img_0")
end

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-05-02 17:47
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    Lua 函数体加密方法

    你想在 Lua 5.1 中加密一个函数中的函数体,而不影响传参。这个问题可以使用 Lua 的编译器来实现。

    Lua 提供了一个名为 load 的函数,可以将 Lua 代码编译成一个闭包,然后执行这个闭包。我们可以使用 load 函数来加密函数体。

    下面是一个简单的示例代码:

    local function encrypt_function(func)
        local code = [[
            local GUIUtils = require("GUI.GUIUtils")
            local basenode = self.
            return function(...)
                local args = {...}
                local result = {}
                for i, v in ipairs(args) do
                    table.insert(result, v)
                end
                local encrypted_code = ""
                for line in string.gmatch(code, "([^\n]+)") do
                    encrypted_code = encrypted_code .. string.format("local %s = %s\n", line, line)
                end
                return load(encrypted_code, "t", "t")(...)
            end
        ]]
        return load(code, "t", "t")
    end
    
    local GUIUtils = require("GUI.GUIUtils")
    local basenode = self.
    
    local encrypted_func = encrypt_function(function()
        local result = GUIUtils:doSomething(basenode)
        return result
    end)
    
    print(encrypted_func())  -- 这里将执行加密后的函数
    

    在上面的代码中,我们定义了一个 encrypt_function 函数,它将一个函数体编译成一个闭包,然后返回这个闭包。这个闭包将执行加密后的函数体。

    encrypt_function 函数中,我们使用 load 函数将函数体编译成一个闭包,然后使用 string.format 函数将函数体加密。

    在最后,我们使用 encrypt_function 函数来加密一个函数体,然后执行这个加密后的函数。

    需要注意的是,这个方法并不是 foolproof 的,因为攻击者可以使用反编译工具来反编译加密后的函数体。但是,这个方法可以对大多数情况下提供一定的保护。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月2日