【问题标题】:How can I make Lua scripts un-decompilable?如何使 Lua 脚本不可反编译?
【发布时间】:2012-01-19 22:53:07
【问题描述】:

出于多种原因,包括防盗,我有许多 Lua 脚本(用于多人模式 Multi Theft Auto)被编译。实际上,这只是一种防盗手段,因为 Luadec (http://luadec51.luaforge.net/) 可以轻松地反编译脚本。有没有人有关于如何使我的脚本不可反编译的任何提示?

【问题讨论】:

    标签: lua decompiler grand-theft-auto


    【解决方案1】:

    加密;这确实是唯一可行的方法。当然,由于您的程序必须对它们进行解密,因此它们可以直接从内存中获取解密的数据。

    所以不,你无能为力。 任何 方法在某种程度上都“只是一种防盗手段”。即使编译成实际的程序集也只是一种威慑,因为它可以被反编译成与原始源代码不完全不同的东西。

    问题只是你想给用户带来多少麻烦。加密可能会为您带来最大的收益。这将迫使他们不得不遍历可执行文件以找出如何将数据从内存中提取出来。大多数普通用户都不想这样做。

    【讨论】:

      【解决方案2】:

      如果你想认真一点,你可以更改 lua vm 生成和使用的操作码,那么现成的软件无法对其进行反编译。尽管这可能会给你带来更多的问题——你必须支持你自己的 lua 版本,而且你可能无法使用像 luajit 这样的东西。

      要反编译,他们必须弄清楚您想出的操作码的映射并进行翻译。这可能不会太难做,但我可能不会。

      [更新]

      查看源代码可能相当容易,有两个文件 lopcode.c 和 lopcode.h,如果您只需更改其中操作码的顺序,您就可以完成。如果您最终这样做并且它是否有效,请发布。

      【讨论】:

      • 您也可以通过更改 VM 指令中操作数的顺序来增加难度。
      • 请注意,如果您可以访问诸如luac 提供的字节码列表器,则此方法可能无法完全工作,因为您可以对订单进行逆向工程。但这将是一种痛苦,并且可能会阻止大多数人。或者成为积极主动的黑客的挑战。 :-)
      • 确实没有什么能阻止专门的黑客使用十六进制转储。如果您按照下面 Nicol 的建议将其包含在加密中,并首先通过 lua 混淆器运行它,则只会留下真正专用的。
      【解决方案3】:

      Multi Theft Auto 现在支持脚本加密。您可以通过http://luac.mtasa.com/ 在线编译它们或下载独立编译器。

      【讨论】:

        【解决方案4】:

        我认为这是不可能的。野兽的本质(一种在非常小的虚拟机上工作的极简语言)基本上禁止它。

        您可以期望的最好的结果是反编译的代码对人类来说尽可能难以理解。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-04
          • 2012-07-28
          • 1970-01-01
          • 2018-11-24
          • 2012-12-12
          • 2013-07-24
          • 2018-07-30
          • 2021-08-05
          相关资源
          最近更新 更多