【问题标题】:Protecting Content Files保护内容文件
【发布时间】:2011-02-20 14:34:09
【问题描述】:

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

附:我知道这听起来并非牢不可破(反正有一个),但出于某些原因需要这样做。

附:在 SFX(或其他包)完成提取后,我可以使用一些帮助来隐藏文件。

谢谢。

【问题讨论】:

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


    【解决方案1】:

    不要使用 SFX 存档。

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

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

    或滚动您自己的每个文件加密。在家滚动的 XOR 加密的优点是非常快。

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

    • 从“钥匙”开始。一个短字符串。
    • 使用密钥初始化随机数生成器。
    • 将 rng 中的字节与要加密的数据进行异或以对其进行加密。
    • 稍后,解密数据:
    • 同一个key开始,初始化rng
    • 这将生成相同的字节流,
    • 将它们与加密数据进行异或以对其进行解密。

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

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

    【讨论】:

    • 问题是,我无法修改将使用提取内容的应用程序。所以它需要一个简单的解决方案,比如将文件提取到不常见的文件夹(至少对于基本级别的用户),比如 C:\Windows\System32。也许,我可以在 SFX exe 前面放 n 个字节。然后我的 Loader 应用程序可以删除字节,然后执行它?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-10
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 2012-03-02
      • 2010-09-24
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      相关资源
      最近更新 更多