bai19940321 2025-04-28 22:35 采纳率: 9.5%
浏览 6

请教一个lua混淆和传参问题

一个游戏的lua,他将一个方法中的函数体做了混淆(不是整个文件做了混淆,只是函数体)

img


根据图片可以看出来,他get后执行的是:local basenode = self.m_panel:FindDirect("Img_0")
所以就有两个问题点。
第一:他是怎么做到对部分文件混淆的。
第二:他get执行的是:local basenode = self.m_panel:FindDirect("Img_0"),那他的self参数是怎么正常传入的。

img


这是他混淆的lua格式。有没有懂的DL给我解释一下。

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-04-28 22:35
    关注

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

    Lua混淆和传参问题

    你遇到的问题是 Lua 函数体混淆后,传递参数的问题。混淆后的代码可能会使得变量名和函数名变得难以阅读和理解。

    根据你提供的图片,混淆后的代码执行的是 local basenode = self.m_panel:FindDir。这意味着混淆后的代码执行的是 FindDir 方法,并将结果赋值给 basenode 变量。

    为了解决这个问题,你可以尝试以下几点:

    1. 使用 Lua 的 debug 模块来检查变量和函数的调用关系。例如,你可以使用 debug.getinfo 函数来获取函数的调用栈信息。
    2. 使用 Lua 的反混淆工具来还原混淆后的代码。例如,你可以使用 luac 工具来还原混淆后的代码。
    3. 如果你不能使用反混淆工具,可以尝试使用 Lua 的反编译工具来还原混淆后的代码。例如,你可以使用 luadec 工具来还原混淆后的代码。

    以下是一个简单的示例代码,使用 debug.getinfo 函数来检查变量和函数的调用关系:

    local function FindDir()
        -- 混淆后的代码
        local basenode = self.m_panel:FindDir
        -- ...
    end
    
    local function main()
        FindDir()
    end
    
    main()
    

    在上面的代码中,我们使用 debug.getinfo 函数来获取 FindDir 函数的调用栈信息。例如:

    local info = debug.getinfo(1)
    print(info.name)  -- 输出 "FindDir"
    print(info.what)  -- 输出 "Lua function"
    

    这可以帮助你了解混淆后的代码执行的是哪个函数,并且可以帮助你找到传递参数的位置。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月28日