如何保护C ++动态库未经许可使用?

时间:2016-01-19 16:22:38

标签: android unity3d obfuscation copy-protection software-protection

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

我们如何保护动态图书馆不被盗?似乎任何人都可以解压缩#34;一个apk安卓包,带我们的库,获取导出,从我们的免费试用版中获取文档,最后使用该库而不是许可客户。是否有在此用例中推荐的保护模型?

1 个答案:

答案 0 :(得分:2)

嗯,即使它比使用托管代码困难得多,C ++代码也可以被拆解并因此被破坏。然而,这是一项艰苦的工作,只有拥有大量消费者才有价值。拥有这种技能的人宁愿破解最近流行的AAA游戏,也不愿浪费时间与第三方Unity库。

这就是说:是的,你应该能够保护你的图书馆。 只需在C ++库中安装许可证密钥验证程序即可。该库拒绝工作,直到它被提供了一个能够成功验证的许可证密钥。

许可证可能是

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

您可以使用key来标识密钥的所有者,也可以使用库来确保该许可证仅适用于具有该特定应用标识符的应用。 verification是使用私钥签名的key哈希,只有您知道。匹配的公钥对于库是已知的,可用于验证许可证是否由您创建,并且仅由您创建。

如果您的库中有此代码并使用c ++混淆工具对代码进行模糊处理,那么您应该非常安全。如果你不进行混淆,你实际上应该仍然非常安全。

编辑:您甚至可以使用此模型进行试用。只需向key添加许可证到期时间,您的图书馆可以在该时间过后停止工作。

一种可能的实施方式可能是:

一个文件,其中包含明文中的key(以便您的代码,如果需要,甚至人类也可以阅读并理解它),并且还包含已签名的哈希(key的哈希值,加密用你的私钥)。

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