保护 .NET 代码免遭逆向工程?

2024-04-11

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

还可以将 C# 应用程序转换为本机代码,并且Xenocode http://en.wikipedia.org/wiki/Spoon_%28software%29成本太高了。

C# 提供了很多功能,并且是我的代码的理想语言,因此用 C++ 再次编写整个代码库是不可能的。

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


你不能。

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

你想做的只是让它变得足够难以破解,以至于不值得人们去麻烦。

我为您提供一些有助于保护您的应用程序的建议:

  • 混淆你的代码。点模糊器 http://en.wikipedia.org/wiki/Dotfuscator有免费版本并附带 Visual Studio。
  • Use 公钥/私钥 http://en.wikipedia.org/wiki/Public-key_cryptography or 非对称加密生成您的产品许可证。这确保了只有you可以生成您的许可证代码。即使您的申请is破解后,您可以确定他们不会为您的应用程序发布密钥生成器,因为不可能逆转密钥生成算法。
  • Use a 第三方加壳器将 .NET 可执行文件打包到加密的 Win32 包装应用程序中。Themida http://www.oreans.com/是较好的之一。这会阻止人们反映您的申请.NET反射器 http://www.red-gate.com/products/reflector/并使得打开包装倒车变得很痛苦。
  • 写你自己的定制包装机。如果第三方打包程序太贵,请考虑编写自己的打包程序。有时,自定义加壳程序可能非常有效,因为还没有关于如何解压它们的明确发布的方法。教程如何编写自己的加壳器 http://www.stonedcoder.org/~kd/lib/61-267-1-PB.pdf提供了大量有关编写自己的 Win32 加壳程序的好信息。

但最终,如果人们希望你的应用程序被破解,他们就会这么做。看看所有拥有大量资源来保护其应用程序的商业软件,但它们在应用程序向公众发布之前就被破解了。

熟练的逆向工程师可以启动IDA-Pro http://www.hex-rays.com/idapro/无论你做什么,都像切黄油一样切开你的申请。打包的应用程序可以被解包,混淆只会阻止它变得轻松自如。您使用复杂的许可证代码所做的所有努力都可以通过一个字节补丁来撤销。

您只需要接受这样一个事实:人们很有可能会盗版您的软件。有一些人是never无论如何都会支付你的申请费用,这些人是你不需要担心的人。

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

我的应用程序以前曾被盗版过,我认为这是对我个人的侮辱。我,一个小开发者,全心全意地投入到一个应用程序中,而这些人竟然厚颜无耻地盗用我的作品?!他们直接从我口袋里拿钱!

我立即添加了一堆严厉的 DRM 代码,并试图使用非法或破解的副本来破坏任何人。我当然应该努力让我的应用程序变得更好,而不是试图阻止不可避免的事情发生。不仅如此,还伤害了我true客户会认可我所采取的所有这些额外保护措施。

经过长时间的战斗,我意识到我正在与潮汐搏斗,浪费的所有时间都是徒劳的。我拿出了除了准系统许可证功能之外的所有回拨代码,并且再也没有回头。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保护 .NET 代码免遭逆向工程? 的相关文章

  • WritePrivateProfileString 未在末尾添加属性

    我正在使用以下命令在 ini 文件中写入一些属性WritePrivateProfileString函数并且一切正常 但是当我添加多行文本时 出现了问题 这是代码和输出 WritePrivateProfileString T General
  • 如何通过MFC将应用程序设置保存到注册表中?

    我有一个由 MFC 项目向导创建的 MFC 应用程序 我想在注册表中保存 读取应用程序设置 所以问了这个question https stackoverflow com questions 1880275 good c registry w
  • 改变 RGB 颜色的色调

    我正在尝试编写一个函数来改变 RGB 颜色的色调 具体来说 我在 iOS 应用程序中使用它 但数学是通用的 下图显示了 R G 和 B 值如何随色调变化 看起来 编写一个函数来改变色调似乎应该是一个相对简单的事情 而不需要对不同的颜色格式进
  • SIGKILL 和 SIGSTOP 信号无法被捕获、阻止或忽略,为什么?

    我想知道为什么这两个信号在一个进程中不能被捕获 阻止或忽略 可以使用 signal 更改其余信号的操作 这两个信号和其余信号有什么区别 如果您谈论它们被阻止的原因 那么原因已经提到了 Adam B https stackoverflow c
  • IssuerSigningKeyResolver 调用异步方法

    我们使用 IssuerSigningKeyResolver 它是 Microsoft IdentityModel Tokens 的一部分 用于令牌验证并接受非异步委托 我们调用一个异步方法 这将导致阻塞调用 因此想知道使用它的正确方法是什么
  • 如何在 ASP.NET 5/vNext/Core 中使用 Elmah?

    我对如何在 ASP NET 5 MVC 6 项目中使用 Elmah 有点困惑 我从 nuget 得到了包 它添加了 Elmah Mvc 2 1 2 到project json 中的依赖项 我不知道从这里到哪里去 以前 nuget 会向 we
  • 在 Eclipse 4.4.2 中使用 C 代码中的构建变量

    我有一个之前使用 Eclipse 3 5 2 创建的项目 在其中 我能够在项目属性中设置构建变量 在这种情况下 假设我设置了SW VERSION是 4403 现在这应该是一个十六进制数字 所以在构建设置中 我添加了一个符号 VERSION
  • 使用不存在和联接的 SQL 查询到 LINQ 语法

    我的 SQL 查询如下所示 在 SQL 中运行良好 我需要将其转换为 LINQ 语法 SQL SELECT Key Id FROM LocalizationKeys AS lk WHERE NOT EXISTS SELECT 1 FROM
  • 如何使用 PowerShell 使用 C# DLL 中存在的类的 New-Object

    例如 我有一个 C 类 public class MyComputer PSObject public string UserName get return userName set userName value private strin
  • c++1y 模式下的 Clang >= 3.3 无法解析 标头

    我有一个项目可以在 g 4 8 1 和 c 11 模式下 clang gt 3 3 下正确编译和运行 然而 当我切换到实验时 std c 1y模式下 clang 3 3 但不是 g 在
  • 无法将方法组分配给 asp.net、linq、c# 中的隐式类型局部变量

    public void selectqueryasso CustomerOrderResult cso new CustomerOrderResult var a from as1 in ds orders from as2 in ds o
  • WinForms TreeView - 如何手动“突出显示”节点(就像被单击一样)

    我需要知道如何让以编程方式选择的节点以图形方式处于 选定 状态 就像用户单击它一样 SelectedNode 仅使这一节点在内部被选中 非常感谢 它没有显示为突出显示的原因是由于树视图没有焦点 这是我的测试表单上的按钮单击事件 TreeVi
  • 如何存储将被多个不同类访问的字符串常量? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 关于堆栈溢出有太多不同的答案 声明一个命名空间 并在 hpp 文件中将所有字符串标记为 extern const 并在 cpp 文件中放置它们的
  • STL(标准模板库)中使用的设计模式

    我正在学习STL和设计模式 我想知道是否有任何文档或链接可以解释如何在 STL 中实现设计模式 我做了谷歌但无法获得太多数据 我希望你的意思是 哪些设计模式可以在STL中识别 STL 堆栈是一个容器适配器 适配器是一种设计模式 迭代器也是一
  • C memcpy 二维数组

    我正在尝试使用将一个二维数组复制到另一个memcpy 我的代码 include
  • 如何使用 Xamarin 应用程序开发自动注销

    我必须在 App xaml cs 上添加功能才能使其正常工作 我在 OnStart 上添加了功能 但现在它会间歇性地一次又一次地将我从应用程序中注销 根据下面的代码 我需要做什么才能让它停止这样做 或者我的代码有问题 这是我最新的代码 na
  • 类型 '' 未映射

    我已经尝试修复这个错误有一段时间了 每当我的应用程序尝试创建数据上下文的实例时 我都会收到此错误 下面是代码 using System using System Collections Generic using System Linq u
  • scanf() 不等待用户输入[重复]

    这个问题在这里已经有答案了 我正在使用 c 中的双向链表来制作树 我在该函数中使用递归调用 但不知何故它不起作用 我的代码是 struct node int data struct node right struct node left s
  • 计算 .NET Core 项目的代码指标?

    我正在研究 ASP NET Core 和 NET Core 项目 对于经典的 C 项目 Visual Studio 2015 具有计算代码指标的功能 对于 NET Core 预览版 2 工具中缺少支持 在工具更加完整之前 有人知道解决方法吗
  • 如何包装实体框架以在执行前拦截 LINQ 表达式?

    我想在执行之前重写 LINQ 表达式的某些部分 我在将重写器注入正确的位置时遇到问题 实际上根本没有 查看实体框架源代码 在反射器中 它最终归结为IQueryProvider Execute在 EF 中 它通过以下方式耦合到表达式Objec

随机推荐