6

我正在开发一款游戏,我正在使用的声音资产的许可协议的要求之一是它们的分发方式使最终用户无法访问它们。所以,我正在考虑将它们聚合成一个平面文件,加密它们,或者类似的。问题是我正在使用的声音库(Hekkus Sound System)只接受“char *”文件路径并在内部处理文件读取。所以,如果我要继续使用它,我将不得不重写 c stdio 文件函数来处理加密或我决定做的任何事情。这似乎是可行的,但它让我担心。在网上看,我看到人们在我关心的平台(Win32、Android 和 iOS)上遇到奇怪的令人沮丧的问题。

是否有一个跨平台库可以解决这个问题?您会完全推荐一种更好的方法吗?

4

6 回答 6

7

您是否可以选择使用命名管道而不是普通文件?如果是这样,您可以将管道作为要读取的文件呈现给声音库,并且您可以解密数据并将其写入管道,没问题。(有关命名管道的说明,请参阅Beej 指南。)

于 2013-09-03T16:34:40.313 回答
5

以一种你不知道它如何工作的 lib 以开发人员没有想到的方式完全工作的方式覆盖 stdio,这对我来说看起来不是正确的方法,因为它并不容易。实现 ramdrive 需要付出很多努力,我建议搜索另一个音频库。

我发现的Hekkus 音响系统是由一个人构建的,最后一次更新是 2012 年。我不会依赖一个只有一个人工作的库而不共享源代码。

我的建议是,花时间寻找合适的声音库,而不是为此寻找可疑的解决方法。

于 2013-09-03T16:42:50.093 回答
2

一种可能性是使用加密的环回文件系统(谷歌获取更多资源)。

它的工作方式是将资产放在一个加密的文件系统上,该文件系统实际上存在于一个简单的文件中。该文件系统作为环回设备安装在某个地方。需要在附加/挂载时提供密码。安装后,所有文件都可以作为常规文件提供给您的软件。但否则,文件将被加密且无法访问。

于 2013-09-03T16:51:19.043 回答
1

另一种基于 UNIX 的方法:

环境变量 LD_PRELOAD 可用于覆盖可执行文件已链接到的任何共享库。LD_PRELOAD 中提到的库导出的所有符号都解析到该库,包括对 libc 函数(如openreadclose. 使用 libdl,包装库也可以调用原始实现。

因此,您需要做的就是在适当设置了 LD_PRELOAD 的环境中启动使用 Hekkus 声音系统的进程,并且您可以对它读取的文件执行任何您喜欢的操作。

但是请注意,绝对没有办法让用户无法访问数据:他必须能够听到数据这一事实意味着他必须有权访问。即使链中的所有软件都使用加密,并且您的用户不愿意破解硬件,将音频输出插孔与音频输入插孔连接起来也不是很困难,不是吗?而且你不能禁止你的用户使用耳机,可以吗?而且,当然,内核可以看到所有未加密的音频输出,并且可以将副本发送到其他地方......

于 2013-09-03T21:26:00.933 回答
1

它依赖于编译器并且不是保证功能,但许多功能允许您将文件/资源​​直接嵌入到 exe 中,并像从磁盘一样在代码中读取它们。你可以这样嵌入你的声音文件。但是,它会显着增加您的 exe 文件的大小。

于 2013-09-03T17:02:04.867 回答
0

您的问题的解决方案是 ramdisk。 http://en.wikipedia.org/wiki/RAM_drive 在 ram 中使用一块内存,就像它是一个磁盘一样。也有可用的软件。在 ram 中缓存数据库变得越来越流行。

并且它可以防止文件在磁盘上,从而使用户可以轻松访问。

于 2013-09-03T16:26:14.857 回答