单词预测是用C语言编写的,在Linux服务器上作为Web服务运行,需要使用登录.没问题.
然而,最近,我们的一些客户表达了对离线版本的兴趣,这是我们想要提供的.作为一种手段,我在单词预测代码周围编写了一个包装器(在C中)并将其编译为一个DLL,我可以在我的C#应用程序中使用它和我们的预测数据文件.
问题是,现在每个人都可以访问:
>我们的数据文件(本身不是问题,因为没有预测代码,文件真的没有意义).
>编译的DLL.
> C#代码(可以很容易地反编译以查看DLL的使用方式).
我知道我不能保护C#代码,我也知道完全保护代码是不可能的,因为二进制文件总是可读的(这个主题已经有很多问题/答案,所以我会感谢如果人们不重复这些答案).
但是,我想知道是否有可能以只能从我的应用程序调用DLL的方式保护DLL?
我正在考虑将调用EXE文件的校验和与编译到DLL中的校验和进行比较.是否有其他(更优雅)的解决方案?
关键是不要创建一个100%安全的DLL来防止被非预期的应用程序使用(因为它是不可能的) – 但足够安全,其他开发人员不能轻易复制数据/ DLL文件并在他们的应用程序中使用它们(我们已经竞争对手已经在其他平台上窃取我们的代码存在问题.
澄清问题的预期目的
根据一些评论,我认为需要做出一些澄清.
问题的关键不在于找到一种能100%保护代码的方法 – 我们已经知道这是不可能的(这里有一个关于这个主题的好问题:Protect .NET code from reverse engineering?).
关键是要获得关于破解代码复杂化的方法的建议(或者,正如我所知,现在:通过默默无闻的安全性).
有些人会认为这是浪费时间,但通过这种思考我们不妨免费向所有人发布所有源代码,因为它最终会被破解,对吧?对?
不,这取决于您的目标受众.
如果你是微软试图用它的成千上万的用户来防止盗版,那么有人会找到破解它的方法 – 即使只是因为“破解windows的人”的“威望”.无论如何,制定一些反盗版措施仍然有意义,只是为了防止普通用户盗版.
但是,如果您是一家小型企业,那么破解代码会使其变得更加复杂的行为可能意味着它实际上不会被破解.为什么?因为普通的Joe(以及他的开发者朋友)更不可能拥有破解代码的知识,而能够破解代码的人也不会对它感兴趣.
解决方法 对于直接安全最简单的方法是使您的非托管C DLL具有内置的许可机制,从根本上使它对第三方开发人员无用,否则他们可能会将库导入到他们自己的托管或非托管代码中.
有许多技术可以做到这一点,例如从windows注册表中读取许可证密钥,或者向DLL添加特殊的Activatelicense(字符串键)函数,该函数在使用库的其他功能之前从C#托管应用程序调用.
生成和接受许可密钥的具体过程取决于您,但在纯脱机环境中,没有100%安全系统(How are Software License Keys generated?).
通过Obscurity实现额外安全
这些剩余的选项只是额外的提示和技巧,使竞争对手更难以进行逆向工程,但不提供真正的安全性:
>将非托管DLL作为资源嵌入托管应用程序中,并在运行时从临时文件加载它>在嵌入之前加密非托管DLL,在运行时解密,并在卸载应用程序时将其删除>为您的C#代码使用第三方混淆工具
总结以上是内存溢出为你收集整理的如何防止他人在C#应用程序中使用我的非托管DLL?全部内容,希望文章能够帮你解决如何防止他人在C#应用程序中使用我的非托管DLL?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)