c# - 保护 .NET 代码免受逆向工程?

标签 c# .net obfuscation reverse-engineering

混淆是一种方法,但它不能防止破坏应用程序的盗版保护安全。如何确保应用程序不被篡改,如何确保注册机制不能被逆向工程?

也可以将 C# 应用程序转换为 native 代码,并且 Xenocode成本太高。

C# 提供了很多功能,是我编写代码的理想语言,所以用 C++ 重新编写整个代码库是不可能的。

可以轻松地从 .NET 中的已签名程序集中删除安全证书。

最佳答案

你不能。

您可以采取一些步骤使其变得更难一点,但最终本地机器上的任何可执行文件都是可破解的。最终,该代码必须转换为 native 机器代码,并且每个可运行的应用程序都容易受到攻击。

你要做的只是让它变得足够难以破解,以至于不值得人们为难。

我有一些建议可以帮助您保护您的应用程序:

  • 混淆您的代码。 Dotfuscator有免费版并随 Visual Studio 一起提供。
  • 使用public/private key非对称加密来生成您的产品许可证。这确保只有可以生成您的许可证代码。即使您的应用程序破解了,您也可以确定他们不会为您的应用程序发布 key 生成器,因为无法逆转 key 生成算法。
  • 使用第三方打包器将您的 .NET 可执行文件打包到加密的 Win32 包装器应用程序中。 Themida是更好的之一。这会阻止人们在 .NET Reflector 中反射(reflect)您的申请并且拆包倒车很痛苦。
  • 编写您自己的自定义打包程序。如果第三方打包器太贵,请考虑自己编写。有时自定义打包程序可能非常有效,因为没有关于如何解包它们的公开方法。教程 How to write your own packer 提供了大量有关编写您自己的 Win32 打包程序的有用信息。

但最终,如果人们想要破解您的应用程序,他们会的。看看那些拥有大量资源来保护其应用程序的商业软件,但它们甚至在应用程序向公众发布之前就被破解了。

熟练的逆向工程师可以火起来IDA-Pro无论您做什么,都可以像黄油一样切入您的应用程序。打包的应用程序可以解包,混淆只会阻止它在公园散步。您使用复杂许可证代码的所有辛勤工作都可以通过单字节补丁来完成。

您只需要接受人们盗版您的软件的可能性非常大。有些人无论如何都永远不会为您的申请付费,而这些人您无需担心。

然而,有许多企业永远不会冒诉讼的风险并乐于购买软件许可证,而许多计算机用户要么不想冒险,要么发现它有误,要么对技术不够了解盗版。这些是您真正的客户,您应该集中精力为他们提供良好的用户体验,而忽略那些破解您软件的人。

我的应用程序以前曾被盗版,我认为这是对我个人的侮辱。在这里,我是一个小型开发人员,将我的心血倾注到一个应用程序中,而这些人有胆量盗版我的应用程序吗?!他们直接从我口袋里拿钱!

我立即添加了一堆严酷的 DRM 代码,并试图破坏任何使用非法或破解副本的人。我当然应该一直致力于让我的应用程序变得更好,而不是试图阻止不可避免的事情。不仅如此,我还伤害了我的真正的客户,因为我提供的所有这些额外保护。

经过长时间的战斗,我意识到我是在与潮流作斗争,所有这些浪费的时间都是徒劳的。我取出了除了准系统许可功能之外的所有电话主页代码,再也没有回头看。

关于c# - 保护 .NET 代码免受逆向工程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/506282/

相关文章:

c# - 等待任务超时

c# - 参数数量未知的 Func<>

c# - 使用 Roslyn 删除 C# 中的无关分号 - (替换 w 空琐事)

.net - 数据触发器未触发

django - 如何混淆 Django 中 'free input' 文本字段中包含的电子邮件地址

c# - 在 listView 中创建列并添加项目

c# - 我如何在 WCF 中使用我自己的权限?

java - 适用于任何 Java 项目的代码混淆器

android - 如何使用 Retrofit 2 + OkHttp 3 加密/隐藏 HTTPS 调用的主体?

c# - "The .NET framework uses the UTF-16 encoding standard by default"是什么意思?