gpt4 book ai didi

c# - 如何防止其他人在他们的 C# 应用程序中使用我的非托管 DLL?

转载 作者:行者123 更新时间:2023-11-30 12:43:42 26 4
gpt4 key购买 nike

我正在开发一个 C# 应用程序来帮助有阅读和写作障碍的人 - 除其他外,这个应用程序还提供单词预测。

单词预测是用 C 编写的,在 Linux 服务器上作为网络服务运行,需要登录才能使用。没问题。

然而,最近我们的一些客户表示对离线版本感兴趣,这正是我们想要提供的。为此,我围绕单词预测代码编写了一个包装器(用 C 语言),并将其编译为一个 DLL,我可以在我的 C# 应用程序中将其与我们的预测数据文件一起使用。

问题是,现在每个人都可以访问:

  1. 我们的数据文件(本身不是问题,因为如果没有预测代码,这些文件就没有意义)。
  2. 已编译的 DLL。
  3. C# 代码(可以轻松反编译以查看 DLL 的使用方式)。

我知道我无法保护 C# 代码,我也知道完全保护代码是不可能的,因为二进制文件将始终是可读的(关于这个主题已经有很多问题/答案,所以我如果人们不重复这些答案,我们将不胜感激。

但是,我想知道是否有可能以一种只能从我的应用程序调用它的方式保护 DLL?

我正在考虑将调用 EXE 文件的校验和与编译到 DLL 中的校验和进行比较。是否有其他(更优雅的)解决方案可用?

关键不是要创建一个 100% 安全的 DLL 以防止被意外的应用程序使用(因为这是不可能的)——而是足够安全,以至于其他开发人员无法轻易复制数据/DLL 文件并在他们的应用程序中使用它们(我们已经遇到竞争对手在其他平台上窃取我们的代码的问题。

澄清问题的预期目的

根据一些评论,我认为需要进行一些说明。

问题的重点不是找到一种 100% 安全代码的方法 - 我们已经知道这是不可能的(这里有一个关于该主题的好问题:Protect .NET code from reverse engineering?)。

重点是获得关于如何复杂破解代码的建议(或者,正如我所了解的,现在:通过模糊实现安全)。

有些人会争辩说这是浪费时间,但按照这种想法,我们还不如将所有源代码免费提供给所有人,因为它最终还是会被破解的,对吧? 对吧?

否。这实际上取决于您的目标受众。

如果您是微软,试图阻止拥有数十万用户的 Windows 被盗版,那么一定会有人找到破解它的方法 - 即使只是为了成为“破解 Windows 的人”的“声望”。无论如何,采取一些反盗版措施仍然是有意义的,只是为了防止普通用户盗版。

但是,如果您是一家小型企业,那么使破解您的代码变得更加复杂的行为可能意味着它实际上不会被破解。为什么?因为普通的 Joe(和他的开发人员 friend )更不可能拥有破解您的代码的知识,而可以破解它的人将对此不感兴趣。

最佳答案

直接安全

最简单的方法是让您的非托管 C DLL 具有内置许可机制,从根本上使其对第三方开发人员无用,否则第三方开发人员可能会将库导入到他们自己的托管或非托管代码中。

有很多技术可以做到这一点,例如从 Windows 注册表中读取许可证 key ,或者通过向从 C# 托管应用程序调用的 DLL 添加特殊的 ActivateLicense(string key) 函数在使用库的其他功能之前。

生成和接受许可 key 的具体过程由您决定,但在纯离线环境中,没有 100% 安全的系统 (How are Software License Keys generated?)。

通过模糊实现额外的安全

这些剩余的选项只是额外的提示和技巧,使竞争对手更难进行逆向工程,但并没有提供太多真正的安全性:

  • 将非托管 DLL 作为资源嵌入到托管应用程序中,并在运行时从临时文件加载它
  • 在嵌入非托管 DLL 之前对其进行加密,在运行时解密,并在卸载应用程序时将其删除
  • 为您的 C# 代码使用第三方混淆工具

关于c# - 如何防止其他人在他们的 C# 应用程序中使用我的非托管 DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30574394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com