保护内容文件

时间:2010-05-17 20:31:55

标签: c++ winapi archive password-protection sfx

我想为我的应用程序中的内容(资源)文件提供一个简单的保护层。例如,我在我的应用程序中使用了各种声音和图像文件。我想,我可以将它们包装在SFX存档(可能包含WinRAR)中,然后在我的应用程序中,使用一些参数启动SFX exe,例如-silent。但这可能不是最好的方法,所以如果你能给我一些建议,那就太好了。

P.S。我知道这听起来并不是一成不变的(无论如何都有),但出于某些原因需要这样做。

P.S。我可以使用一些方法来帮助一个方法在SFX(或其他一些包)完全提取后隐藏文件。

谢谢。

2 个答案:

答案 0 :(得分:0)

压缩资源文件,然后使用您选择的密钥对存档文件的每个32位块进行异或。在运行时XOR每个传入的32位块再次使用密钥,然后将其传递到您的zip库以进行内存中解压缩。

非常轻微的混淆,但应该阻止任何人打开zip文件。

答案 1 :(得分:0)

请勿使用SFX存档。

很大程度上取决于您如何使用资源。如果你有很多需要文件名的库代码,那么的文件会在硬盘上保留一段时间。 如果可以,您想知道您的声音和媒体库是否可以传递指针 - 然后您自己加载文件,解密它们,并将指针传递给解密的缓冲区到媒体API。

关于实际加密。使用归档文件格式,如zlib。这使您能够将所有数据文件存储在单个加密存档中,并将其扩展到内存中。

或者滚动您自己的每个文件加密。在国内推出的XOR加密具有非常快速的优势。

几乎所有文件加密都归结为:

  • 以“密钥”开头。短信。
  • 使用密钥初始化随机数生成器。
  • 将来自rng的字节与要加密的数据进行XOR加密。
  • 稍后,解密数据:
  • 以相同的键开头,初始化rng
  • 这将生成相同的字节流,
  • 使用加密数据对它们进行异或解密。

问题是(显然)密钥需要存在于客户端中,因此任何坚定的黑客都可以获得密钥。因此,在这里过于花哨,没有真正的意义。只需生成256个字节的“随机”数据,并在将文件加载到内存时使用它来加密和解密文件 - 或者将它们写入临时文件夹。

如果您需要写出ttemp文件,您可以使用FILE_FLAG_DELETE_ON_CLOSE让temp文件夹安全地自行清理,而不会在磁盘上留下未加密的资源。