【问题标题】:C++ Encrypting and decrypting Lua filesC++ 加密和解密 Lua 文件
【发布时间】:2013-11-19 07:14:52
【问题描述】:

我有一个用 C++ 编写的程序(一个小游戏),它从 Lua 文件中获取配置(它们基本上是程序的模块)。例如,程序从 Lua 文件中获取它的名称、版本、它可以做什么和不可以做什么以及玩家可以做什么。问题是当我开始将这个小游戏分发给几个人时,他们可以配置我不想发生的 Lua 文件,所以我考虑过加密它们,然后在程序启动时解密它们,但我就是无法理解如何实际去做,以什么方式去做。总而言之,这是一个像我想象的那样简单的任务吗?

我怎么看是这样的:用某种程序以某种加密方法加密lua文件。将 C++ 代码写入程序,首先解密 Lua 文件,然后开始读取它们。这个概念正确吗?加密本身可以尽可能弱,只要它有效。

【问题讨论】:

  • 顺便说一句,为什么不让人们更改文件呢?人们通常认为能够修改游戏是一项巨大的奖励。如果您担心作弊,您可以存储每个文件的哈希值,以便您可以检测它们是否已被修改,并显示警告(或者,例如,如果他们的哈希值不同,则禁止人与人之间的多人会话其他)
  • 没错,很多人都喜欢能够修改游戏。原因,就像你想的那样,对我来说加密 Lua 文件是为了对抗作弊者。如果我什至能够加密或以某种方式阻止对某些可以修改为使用作弊的 Lua 文件的修改,那么我会很高兴。其余的 Lua 文件可以留给用户根据需要进行修改。实现该哈希功能对我来说可能太难了,我相信或者至少我还不能理解它的概念,所以看起来非常困难。

标签: c++ lua encryption


【解决方案1】:

通过使用 luac,我终于能够完成所有工作。

我用这个短语用luac 编译它(在那里,tester.lua 是输出文件的名称,test.lua 是编译的文件):

luac -o tester.lua test.lua

无论是否编译,它都会自动运行。现在的问题是,任何人都可以将已编译的 lua 文件与非编译版本一起放置,并且它仍然可以工作,因为 dofile 可以读取普通和已编译的 lua。你们会建议什么作为解决方案,以便 dofile 只读取已编译的 lua 文件而不是未编译的文件?

【讨论】:

  • 欢迎来到 SO。请将新问题作为问题提出,而不是使用答案来发表评论或提出问题。也就是说,是允许(甚至鼓励)回答你自己的问题,所以关于 luac 让它为你工作的注释是可以的。不过,我会修正你的格式。
  • luaL_loadfilex 和朋友允许您限制加载到预编译文件。
【解决方案2】:

是的,基本上就是这样。

假设你现在有类似的东西

runLuaFromFile("config.lua");

你想做的

  • 将文本文件“config.lua”加载到内存中(例如作为字符串)
  • 解密你的字符串
  • runLuaFromMemory(myString);

显然runLuaFromFile 和runLuaFromMemory 不是真正的函数,它们只是您正在使用的任何 Lua 系统的占位符

【讨论】:

    【解决方案3】:

    分发预编译的 Lua 文件而不是源代码可能足以满足您的目的。见luac。

    【讨论】:

    • 我试过用luac编译info.lua。我使用了以下内容: luac -o info.lua info.lua 但是即使这样,游戏加载时 lua_dofile 也由于某种原因无法读取文件。
    • 请注意luac -o info.lua info.lua clobbers info.lua,虽然它工作正常。
    猜你喜欢
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 2021-10-20
    • 2013-12-25
    相关资源
    最近更新 更多