我正在开发一个使用脚本语言实现自动化的闭源游戏。几乎所有的游戏逻辑都是由脚本处理的。脚本可以编译为字节码格式,但由于语言的性质,必须保留标识符。编译后的脚本可以使用二进制到文本编码嵌入到其他基于文本的资源格式中。
我想要加密编译后的脚本以在分发期间保护源代码,但是因为语言、字节码格式和二进制到文本编码方案都是专有的,我还需要担心加密吗?如果是这样,我是应该简单地修改一些字节,然后就到此为止,还是应该使用功能齐全的加密解决方案呢?加密不应过度增加可执行文件的大小,因为脚本可能很大,加载时间也很重要。
发布于 2010-01-31 05:09:03
在Windows上,可执行文件的大小对加载时间没有影响,因为exe只是映射到内存中,然后根据需要进行分页。我不能想象为什么*nix不是这样的。
因此,如果脚本不需要从.exe单独更改,您可以将它们嵌入到.exe中,这将使用户很难更改它们,即使他们可以找到它们。我曾经写过一个小工具,它可以将数据文件转换成.obj文件,这使得将数据嵌入到我的exe中变得非常容易-事实证明,编写一个只包含数据的目标文件非常容易。
当然,如果你真的想要保护这些数据,而不是在你唯一的选择完全加密,但如果你只是试图阻止偶然黑客,使文件难以获得可能已经足够好。
发布于 2010-01-31 04:57:14
您不应该假设人们不能读取二进制专有格式。有许多人非常擅长在没有任何文档的情况下对协议进行逆向工程。
因此,如果你想保证源代码的安全,你需要一些真正的安全措施。唯一的问题是,如果你加密文件,你需要给你的用户解密密钥才能玩这个游戏,当你这样做的时候,有人想出如何获得密钥并使用它来解密所有文件只是个时间问题。
所以基本上,不幸的是,你能做的并不多。你可以尝试混淆你的代码,但即使这样也不会阻止每个人。
发布于 2010-01-31 05:32:26
你所说的并不是加密,因为你必须随附解密密钥。这只是一种混淆。无论您如何尝试隐藏解密密钥,如果您的程序可以找到它,那么用户也可以。
所以,一旦你明白我们只是在讨论各种混淆方案,问题是你需要多少混淆。很可能专有的字节编译是比加密更高的障碍,我想就到此为止了。任何想要跟踪逻辑的人都可以在上面放一个调试器,不管你是否加密。如果它们已经对您的运行时引擎进行了反向工程,以求出字节码,那么它们已经位于包含未加密数据的代码部分。
也就是说,如果您发现文件中的标识符有问题,您可以在字节编译之前将它们机械地转换为随机字符串。
https://stackoverflow.com/questions/2169376
复制相似问题