3

我们正在构建一个 Unity3D 插件。任何使用我们插件的游戏,在为某个平台构建时,还包括我们的插件,该插件以该平台的动态库形式存在。例如,当 Android apk 从 Unity 导出时,它将包含我们的库xyz.so。该库是用 C++ 编写的。

我们如何保护我们的动态库不被盗?似乎任何人都可以“解压缩”一个 apk Android 包,获取我们的库,获取导出,从我们的免费试用版获取文档,并最终使用该库而无需成为许可客户。在这个用例中是否有推荐的保护模型?

4

1 回答 1

2

好吧,尽管它比使用托管代码要困难得多,但 C++ 代码可以被反汇编并因此被破坏。然而,这是一项艰苦的工作,只有在拥有大量消费者的情况下才值得。拥有这种技能的人宁愿破解最新流行的 AAA 游戏,也不愿在第三方 Unity 库上浪费时间。

话虽这么说:是的,您应该能够保护您的图书馆。只需在您的 C++ 库中有一个许可证密钥验证器。该库拒绝工作,直到它被提供一个它能够成功验证的许可证密钥。

许可证可能是

License =
{
    key=[ Owner-Identification, App-Identifier ],
    verification=(Signed hash of key)
}

您可以在哪里key识别密钥的所有者,并且库也可以使用它来确保许可证仅适用于具有该特定 App-Identifier 的应用程序。是用只有你知道的私钥签名verification的哈希。key匹配的公钥是库已知的,可用于验证许可证是否由您创建,并且只有您自己创建。

如果您的库中有此代码并使用 c++ 混淆工具混淆您的代码,那么您应该是非常安全的。如果你不混淆,你实际上应该还是很安全的。

编辑:你甚至可以用这个模型做试验。只需将 License-Expire-Time 添加到key,您的库就可以在该时间过去后停止工作。

一种可能的实现可能是:

一个包含key明文的文件(以便您的代码,如果需要,即使是人类也可以阅读和理解它),还包含签名的哈希( 的哈希key,用您的私钥加密)。

key该代码将使用相同的哈希算法读取并计算其哈希值。它还将使用公钥解密签名的哈希。如果两个哈希值相同,则代码可以确保它key是有效的并且可以继续检查其内容:是否key未过期(Expire-Time),是否key适用于此特定应用程序(App-Id)等。

于 2016-01-20T15:13:12.560 回答