【发布时间】:2015-08-14 23:10:17
【问题描述】:
我正在开发一个 C# 应用程序来帮助有阅读和写作障碍的人 - 这个应用程序还提供单词预测功能。
单词预测是用 C 语言编写的,在 Linux 服务器上作为 Web 服务运行,需要登录才能使用。没问题。
不过,最近,我们的一些客户表示对离线版本感兴趣,这是我们愿意提供的。作为一种方法,我围绕单词预测代码编写了一个包装器(用 C 语言),并将其编译为一个 DLL,我可以在我的 C# 应用程序中使用它以及我们的预测数据文件。
问题是,现在每个人都可以访问:
- 我们的数据文件(本身没有问题,因为没有预测代码,这些文件就没有真正意义)。
- 已编译的 DLL。
- C# 代码(可以轻松反编译以查看 DLL 的使用方式)。
我知道我无法保护 C# 代码,而且我也知道不可能完全保护代码,因为二进制文件始终是可读的(关于这个主题已经有很多问题/答案,所以我如果人们不重复这些答案,将不胜感激。
不过,我想知道是否可以以只能从我的应用程序调用的方式保护 DLL?
我正在考虑将调用 EXE 文件的校验和与编译到 DLL 中的校验和进行比较。是否有其他(更优雅的)解决方案可用?
重点不是要创建一个 100% 安全的 DLL,以防止被非预期的应用程序使用(因为这是不可能的) - 但足够安全,以至于其他开发人员无法轻松复制数据/DLL 文件并在他们的应用程序中使用它们(我们已经遇到过竞争对手在其他平台上窃取我们代码的问题)。
澄清问题的预期目的
基于一些 cmets,我认为需要进行一些澄清。
问题的重点不是要找到一种 100% 安全代码的方法 - 我们已经知道这是不可能的(这里有一个关于该主题的好问题:Protect .NET code from reverse engineering?)。
重点是获得关于如何复杂破解代码的建议(或者,据我所知,现在:通过默默无闻的安全性)。
有些人会争辩说这是浪费时间,但如果这样想,我们不妨把我们所有的源代码免费分发给所有人,因为它最终还是会被破解,对吧? 对吗?
不。这真的取决于你的目标受众。
如果您是 Microsoft 试图阻止拥有数十万用户的 Windows 盗版,那么有人会找到破解它的方法 - 即使只是为了“破解 Windows 的人”的“声望”。无论如何,采取一些反盗版措施仍然是有意义的,只是为了防止普通用户盗版。
但是,如果您是一家小型企业,那么让破解代码变得更加复杂的行为可能意味着它实际上不会被破解。为什么?因为普通的 Joe(和他的开发人员朋友)不太可能拥有破解您的代码的知识,而能够破解它的人也不会对此感兴趣。
【问题讨论】:
-
所以你问它是否可能,然后你又说你知道这是不可能的,你能做的就是让它更耗时。显然你已经回答了你自己的问题。这确实是不可能的。至于多少保护对您来说就足够了,您需要根据您认为您的代码对潜在破解者的价值以及您愿意为保护它投入多少资金来做出决定。
-
就我个人而言,我会避免这样做,因为它更有可能妨碍您的客户使用该软件,而不是防止复制。相反,我会定期获取竞争对手软件的副本,以检查他们是否复制。对于在线消费,添加一个无意义的预测,可以请求查看是否正在使用同一个库。
-
真的,您要的是建议:如何通过默默无闻来确保安全——答案往往主要基于 SO 的通常标准的意见。
-
也许你应该重新考虑你的整个商业模式。提供计费服务而不是计费软件产品。如果您的服务托管在防黑客服务器上(哈哈!),那么您无需担心混淆等问题。
-
你的计划是:检查调用的 EXE 注定要失败,因为没有可靠的方法来确定你的调用者是谁。请参阅Don't trust the return address, no really,作为一组示例。
标签: c# .net dll reverse-engineering unmanaged