Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encryption 加密用于嵌入文本文件的脚本_Encryption_Encoding_Scripting - Fatal编程技术网

Encryption 加密用于嵌入文本文件的脚本

Encryption 加密用于嵌入文本文件的脚本,encryption,encoding,scripting,Encryption,Encoding,Scripting,我正在开发一款使用脚本语言实现自动化的封闭源代码游戏。几乎所有的游戏逻辑都是由脚本处理的。脚本可以编译为字节码格式,但由于语言的性质,必须保留标识符。编译后的脚本可以使用二进制到文本编码嵌入到其他基于文本的资源格式中 我想对编译后的脚本进行加密,以在分发过程中保护源代码,但由于语言、字节码格式和二进制到文本编码方案都是专有的,我需要担心加密吗?如果是这样的话,我是应该简单地干扰一些字节并停止工作,还是应该使用功能齐全的加密解决方案?加密不应过度增加可执行文件的大小,因为脚本可能很大,加载时间也很

我正在开发一款使用脚本语言实现自动化的封闭源代码游戏。几乎所有的游戏逻辑都是由脚本处理的。脚本可以编译为字节码格式,但由于语言的性质,必须保留标识符。编译后的脚本可以使用二进制到文本编码嵌入到其他基于文本的资源格式中


我想对编译后的脚本进行加密,以在分发过程中保护源代码,但由于语言、字节码格式和二进制到文本编码方案都是专有的,我需要担心加密吗?如果是这样的话,我是应该简单地干扰一些字节并停止工作,还是应该使用功能齐全的加密解决方案?加密不应过度增加可执行文件的大小,因为脚本可能很大,加载时间也很重要。

您不应假设人们无法读取二进制专有格式。有许多人在没有任何文档的情况下非常擅长逆向工程协议

所以,如果你想保证你的源代码的安全,你需要一些真正的安全。唯一的问题是,如果你加密文件,你需要给你的用户解密密钥才能玩游戏,而当你这么做的时候,人们就会想出如何获取密钥并使用它来解密所有文件,这只是时间问题


所以基本上,不幸的是,你做不了什么。您可以尝试混淆代码,但即使这样也不能阻止所有人。

在Windows上,可执行文件的大小对加载时间没有影响,因为exe只是映射到内存中,然后根据需要进行分页。我无法想象为什么对*尼克斯来说也不是这样

因此,如果脚本不需要与.exe分开更改,您可以将它们嵌入到.exe中,这将使用户很难更改它们,即使他们可以找到它们。我曾经写过一个小工具,它可以将数据文件转换成.obj文件,这样就可以很容易地将数据嵌入到我的exe中——事实证明,编写一个只包含数据的对象文件非常容易


当然,如果你真的关心保护这些数据,而不是在你唯一的选择中完全加密,但是如果你只是想阻止随意的黑客攻击,那么让文件难以获取可能就足够了。

你所说的不是加密,因为你必须将解密密钥与之一起提供。这只是混淆。无论您如何试图隐藏解密密钥,如果您的程序能够找到它,那么用户也能找到

所以,一旦你明白我们只是在讨论各种模糊处理方案,问题是你需要多少模糊处理。很可能专有字节编译比加密更难实现,我就到此为止。任何想要跟踪逻辑的人都可以在其上放置调试器,不管您是否加密。如果他们已经反向设计了运行时引擎来计算字节码,那么他们已经在代码中包含未加密数据的部分


这就是说,如果您发现文件中的标识符有问题,您可以在字节编译之前机械地将其转换为随机字符串。

加密在这里买不到多少东西

基本上,无论添加什么加密层,可执行文件本身都必须能够执行解密以运行脚本。你锁门,但你把钥匙留在锁里。这是不可避免的

加密的作用是,它在某种程度上提高了谁可以访问数据的门槛。它需要一些拆卸技巧。简单地将文件嵌入到可执行文件中就已经过滤掉了不太好的黑客。那些不会被这种嵌入所吓倒的人,也是那些能够遵循数据处理路径、找到解密逻辑并随意抽取解密代码的人。加密层也可能增加重要性:加密的东西肯定是值得的。因此,尝试太时髦的事情可能只会让你的情况变得更糟,而不是更好


另一方面,将文件嵌入可执行二进制文件可能是一个好主意。这样就不需要在运行时在文件系统上查找它们(众所周知,在Unix系统上查找运行时的内容比在Windows上要困难一些,因为硬链接:在Windows上,可执行文件可以很容易地获得自己的路径,但在Unix上,硬链接的存在意味着“可执行”路径定义不清)

我没有看到的C++内容——删除C++标签。抱歉。标签是习惯性的添加,因为实现语言是C++。为什么?你需要使用加密的想法从何而来?我需要保护源代码不被意图反向工程或修改游戏的人看到。足够好就足够好了。我想一些天真的干扰和明智地使用
objcopy
是我的解决方案。顺便说一下,我指的是脚本可执行文件的大小,而不是游戏应用程序的大小@乔恩:是的,我现在明白了。据我所知,强加密通常不会增加它加密的数据,而是将其大小四舍五入以匹配加密算法的数据块大小。