如何保护.NET程序集免受反编译?

Tal*_*ode 68 .net c# reflector decompiling

我开始使用C#时学到的第一件事就是最重要的一件事.您可以使用Reflector或其他工具反编译任何.NET程序集.许多开发人员都不知道这个事实,当我向他们展示他们的源代码时,他们中的大多数都感到震惊.

防止反编译仍然是一项艰巨的任务.我仍在寻找一种快速,简便,安全的方法.我不想混淆我的代码,所以我的方法名称将是a,b,c左右.反射器或其他工具应该无法将我的应用程序识别为.NET程序集.我已经了解了一些工具,但它们非常昂贵.有没有其他方法来保护我的应用程序?

编辑:

我的问题的原因不是防止盗版.我只想阻止竞争对手阅读我的代码.我知道他们会,他们已经做到了.他们甚至告诉过我.也许我有点偏执,但商业竞争对手阅读我的代码并不能让我感觉良好.

Joe*_*orn 103

要记住的一件事是,您希望以具有商业意义的方式执行此操作.为此,您需要定义目标.那么,你的目标到底是什么?

防止盗版?这个目标是不可能实现的.甚至本机代码也可以反编译或破解; 在线提供的众多warez(即使是像Windows和Photoshop这样的产品)也证明了一个坚定的黑客可以随时获得访问权限.

如果你无法阻止盗版,那么仅仅减少盗版呢?这也是错误的.它只需要一个人破解你的代码就可以让每个人都可以使用它.你每次都要幸运.海盗只需要幸运一次.

我把它给你的目标应该是最大化利润.您似乎相信阻止盗版是这项努力的必要条件.它不是.利润只是收入减去成本.停止盗版会增加成本.这需要付出努力,这意味着在过程中的某个地方增加成本,因此减少了等式的这一方面.保护您的产品也无助于增加收入.我知道你看看所有那些海盗,看看你能赚到的所有钱,只要他们会支付你的执照费用,但事实是这绝不会发生.这里有一些夸张,但它通常认为,无法破解你的安全的海盗会找到一个类似的产品,他们可以破解或没有.他们将永远不会买它来代替,因此他们不会代表销售损失.

此外,保护您的产品实际上会减少收入.有两个原因.其中一小部分客户在激活或安全性方面遇到问题,因此决定不再购买或要求退款.另一个是实际尝试使用盗版软件以确保其在购买前有效的人中的一小部分.限制您的产品的盗版分发(如果您能以某种方式成功)可以防止这些人尝试您的产品,因此他们永远不会购买它.此外,盗版还可以帮助您的产品传播到更广泛的受众,从而吸引更多愿意为此付费的人.

更好的策略是假设您的产品将被盗版,并考虑如何利用这种情况.关于这个主题的几个链接:
我如何防止我的代码被盗?
保护.NET应用程序

  • 主要目标不是防止盗版.目标是阻止竞争对手阅读我的代码.我知道他们会这样做,他们已经做到了. (26认同)
  • 如果这是你的目标,那么混淆器就足够了. (15认同)
  • 保护您的产品无助于增加收入?您的硬数据在哪里支持该声明?这不是我所知道的任何软件销售商的经验.实际上反过来的情况很长.保护您的产品可以减少收入?不,这与我所知的卖家的经验不符.我听过很多这样的说法,但我认为它们必须由没有尝试过这两种方式的人制作.无论是那个,还是他们在这个行业的不同角落,与我认识的人出售他们的商品的角落. (3认同)
  • 我不会说,如果某些软件不可破解,海盗将永远不会购买任何许可证.这不是100%真实.我见过有人说'我不会买它那软/游戏,买不起,等等等等'然后购买它后他们发现破解版本已经过时,恶意或者不允许他们访问一些在线功能. (2认同)
  • -1 恕我直言这不是问题的答案。另外,假的,除非软件非常便宜——用户多,买家少。即便是对盗版设置部分障碍也是利润净赢的原因是,有许多潜在客户如果可以免费获得就不会费心购买,但也不愿安装盗版软件(病毒风险、不便)更新)。根据我的经验,下载破解软件的人通常不是潜在客户,因为他们愿意承担风险而不是付钱。潜在客户下载合法试用版 (2认同)

Rha*_*ody 16

在这里工作,我们使用PreEmptive Solutions的Dotfuscator.

虽然不可能保护.NET程序集100%Dotfuscator让我觉得很难.我带来了很多混淆技术;

交叉装配重
命名重命名方案
重命名前缀
增强的重载归纳
增量混淆
HTML重命名报告
控制流
字符串加密

事实证明,对于小公司来说,它们并不是非常昂贵.他们对小公司有特殊定价.

(不,我不是为PreEmptive工作;-))

当然还有免费软件替代品;

  • 我也用它.非常好的软件,虽然它有一些无用的功能(对我来说),如使你的程序过期或通过电子邮件向你报告例外的功能.但重命名和逻辑流程非常好,我认为通过这个程序运行良好后,任何人都无法真正读取代码. (2认同)

Dav*_*Fox 13

在任何云服务提供商中托管您的服务.


ker*_*vin 10

如何防止任何C#应用程序的反编译

几乎描述了整个情况.

在某些时候,代码必须被转换为VM字节码,然后用户可以获得它.

机器代码也没有太大的不同.像IDA Pro这样的好的交互式反汇编程序/调试 程序可以使任何本机应用程序透明化.调试器非常智能,可以使用AI来识别常见的API,编译器优化等.它允许用户从机器代码生成的程序集中重新构建更高级别的构造.

IDA Pro也在某种程度上支持.Net.

老实说,在从事逆向工程(兼容性)项目几年之后,我从经验中得到的主要是我可能不应该过多地担心人们窃取我的代码.如果有人想要它,无论我实施什么方案,都不会很难得到它.

  • 只需要使代码读取比编写代码更困难. (7认同)
  • 在某些时候,它不再可能imho (2认同)

Tej*_*aru 6

没有任何混淆器可以保护您的应用程序,甚至这里没有描述。看到此链接,它是一个可以对几乎每个混淆器进行混淆的去混淆器。

https://github.com/0xd4d/de4dot

可以帮助您的最佳方法(但请记住,它们也不是完全教授)是使用混合代码,用不受管的语言对重要代码进行编码,并像C或C ++一样制作DLL,然后用Armageddon或Themida保护它们。Themida并非适用于所有解密工具,它是市场上最好的保护器之一,它还可以保护您的.NET软件。


Mua*_*Dib 5

我知道你不想混淆,但也许你应该检查dotfuscator,它将采取你编译的程序集并为你混淆它们.我认为它甚至可以加密它们.