我正在开发一个C#应用程序,以帮助阅读和写作障碍的人们 - 其中之一是提供单词预测功能。
该单词预测功能是使用C编写的,并在Linux服务器上作为Web服务运行,需要登录才能使用。没有问题。
然而,最近,我们的几位客户表示对离线版本感兴趣,这是我们想要提供的。为此,我编写了一个包装器(使用C语言),将其编译为DLL,并与我们的预测数据文件一起在C#应用程序中使用。
问题是,现在每个人都可以访问:
1. 我们的数据文件(本身不是问题,因为没有预测代码,文件没有意义)。 2. 编译的DLL。 3. C#代码(可以轻松反编译以查看如何使用DLL)。
我知道我无法保护C#代码,也知道完全保护代码是不可能的,因为二进制文件始终可读(有关此主题的问题/答案已经有很多,所以如果人们不要重复这些答案,我会非常感激)。
如果你是微软,试图防止成千上万的用户盗版Windows,那么总会有人找到破解方法 - 即使只是为了成为“破解Windows的人”。无论如何,把一些反盗版措施放置在合适位置仍然是有意义的,以防止普通用户盗版。
然而,如果你是一家小企业,让代码更难破解可能意味着它实际上不会被破解。为什么?因为普通人(及其开发者朋友)很少有能力破解你的代码,而那些能够破解它的人将对此毫无兴趣。
该单词预测功能是使用C编写的,并在Linux服务器上作为Web服务运行,需要登录才能使用。没有问题。
然而,最近,我们的几位客户表示对离线版本感兴趣,这是我们想要提供的。为此,我编写了一个包装器(使用C语言),将其编译为DLL,并与我们的预测数据文件一起在C#应用程序中使用。
问题是,现在每个人都可以访问:
1. 我们的数据文件(本身不是问题,因为没有预测代码,文件没有意义)。 2. 编译的DLL。 3. C#代码(可以轻松反编译以查看如何使用DLL)。
我知道我无法保护C#代码,也知道完全保护代码是不可能的,因为二进制文件始终可读(有关此主题的问题/答案已经有很多,所以如果人们不要重复这些答案,我会非常感激)。
然而,我想知道是否有可能以某种方式保护DLL,使其只能从我的应用程序中调用?
我在考虑将调用EXE文件的校验和与编译到DLL中的校验和进行比较。还有其他更优雅的解决方案吗?
重点不是创建一个完全安全的DLL,以防止被意外应用程序使用(因为这是不可能的)-但足够安全,以至于其他开发人员不能轻易地复制数据/DLL文件并在其应用程序中使用它们(我们已经遇到过竞争对手在其他平台上窃取我们的代码的问题)。
澄清问题的预期目的
基于一些评论,我认为需要澄清一下。
问题的重点不是要找到100%保护代码的方法-我们已经知道这是不可能的(这里有一个关于此主题的好问题:Protect .NET code from reverse engineering?)。
重点是获取有关如何复杂化破解代码的建议(或者,正如我现在所学到的那样:通过模糊性实现安全性)。
有人会认为这是浪费时间,但如果按照这种想法,我们可能会把所有源代码免费分发给每个人,因为它最终肯定会被破解,对吧?对吗? 不对。 这真的取决于你的目标受众。如果你是微软,试图防止成千上万的用户盗版Windows,那么总会有人找到破解方法 - 即使只是为了成为“破解Windows的人”。无论如何,把一些反盗版措施放置在合适位置仍然是有意义的,以防止普通用户盗版。
然而,如果你是一家小企业,让代码更难破解可能意味着它实际上不会被破解。为什么?因为普通人(及其开发者朋友)很少有能力破解你的代码,而那些能够破解它的人将对此毫无兴趣。