如果我开始使用C#时学到的第一件事是最重要的一件事。您可以使用Reflector或其他工具反编译任何.NET程序集。许多开发人员都没有意识到这一点,当我向他们展示源代码时,他们中的大多数都感到震惊。
防止反编译仍然是一项艰巨的任务。我仍在寻找一种快速,简便,安全的方法。我不想混淆我的代码,所以我的方法名称将是a,b,c左右。反射器或其他工具应该无法将我的应用程序识别为.NET程序集。我已经了解了一些工具,但它们非常昂贵。还有其他方法可以保护我的申请吗?
编辑:
我的问题的原因不是防止盗版。我只想阻止竞争对手阅读我的代码。我知道他们会,他们已经做到了。他们甚至告诉过我。 也许我有点偏执,但商业竞争对手阅读我的代码并不能让我感觉良好。
答案 0 :(得分:99)
要记住的一件事是,您希望以具有商业意义的方式执行此操作。为此,您需要定义目标。那么,你的目标到底是什么?
防止盗版?这个目标是不可能实现的。甚至本机代码也可以反编译或破解;在线提供的众多商品(即使是像Windows和Photoshop这样的产品)证明了一个坚定的黑客可以随时获取访问权。
如果你无法阻止盗版,那么仅仅减少盗版呢?这也是错误的。它只需要一个人破解你的代码就可以让每个人都可以使用它。你每次都要幸运。海盗只需要幸运一次。
我把它给你目标应该是最大化利润。你似乎相信阻止盗版是这项努力的必要条件。它不是。利润只是收入减去成本。 停止盗版会增加成本。这需要付出努力,这意味着在过程中的某个地方增加成本,因此减少了等式的这一方面。 保护您的产品也 以增加收入。我知道您会看到所有这些海盗,如果只是他们会支付您的许可证费用,那么您可以查看所有可用的钱但实际情况是,永远不会发生。这里有一些夸张,但它通常认为,无法破解你的安全的海盗会找到一个类似的产品,他们可以破解或没有。他们从不购买它,因此他们不代表销售损失。
此外,实际保护您的产品降低收入。有两个原因。其中一小部分客户在激活或安全性方面遇到问题,因此决定不再购买或要求退款。另一个是实际尝试使用盗版软件以确保其在购买前有效的人中的一小部分。限制您的产品的盗版分发(如果您在某种程度上能够成功)可以防止这些人尝试您的产品,因此他们永远不会购买它。此外,盗版还可以帮助您的产品传播给更广泛的受众,从而吸引更多愿意为此付费的人。
更好的策略是假设您的产品会被盗版,并考虑如何利用这种情况。关于这个主题的更多链接:
How do i prevent my code from being stolen?
Securing a .NET Application
答案 1 :(得分:16)
在这里工作时,我们使用PreEmptive Solutions的Dotfuscator。
虽然不可能保护.NET程序集100%Dotfuscator让我觉得很难。 我带来了很多混淆技术;
交叉装配重命名
重命名方案
重命名前缀
增强过载感应
增量混淆
HTML重命名报告
控制流程
字符串加密
事实证明,对于小公司来说,它们并不贵。他们对小公司有特殊定价。
(不,我不是为PreEmptive工作;-))
当然有freeware个替代品;
答案 2 :(得分:13)
在任何云服务提供商中托管您的服务。
答案 3 :(得分:10)
How to preventing decompilation of any C# application
几乎描述了整个情况。
在某些时候,代码必须转换为VM字节码,然后用户就可以获得它。
机器代码也没有太大的不同。像IDA Pro这样的好的交互式反汇编程序/调试程序可以使任何本机应用程序透明化。调试器非常智能,可以使用AI来识别常见的API,编译器优化等。它允许用户从机器代码生成的程序集中重新构建更高级别的构造。
IDA Pro也在某种程度上支持.Net。
老实说,在从事逆向工程(兼容性)项目几年之后,我从经验中得到的主要是我可能不应该过多担心人们窃取我的代码。如果有人想要它,无论我实施什么方案,都不会很难得到它。
答案 4 :(得分:5)
我知道你不想混淆,但也许你应该看看dotfuscator,它会带你编译的程序集并为你混淆它们。我认为它甚至可以加密它们。
答案 5 :(得分:4)
没有混淆器可以保护您的应用程序,甚至没有任何描述。看到这个链接,它是一个deobsfuscator,它几乎可以对每个混淆器进行反应。
https://github.com/0xd4d/de4dot
可以帮助你的最好方法(但要记住它们也不是完全教授)是使用混合代码,用非托管语言编写重要代码并制作类似C或C ++的DLL,然后用Armageddon保护它们或者Themida。 Themida不适合每一个饼干,它是市场上最好的保护者之一,它也可以保护您的.NET软件。
答案 6 :(得分:3)
我听说过一些直接将IL编译成本机代码的项目。 您可以从这篇文章中获得一些额外的信息: Is it possible to compile .NET IL code to machine code?
答案 7 :(得分:3)
我们使用{SmartAssembly}来保护企业级分布式应用程序的.NET,它对我们来说非常有用。
答案 8 :(得分:2)
如果您想完全保护您的应用免受反编译,请查看Aladdin的Hasp。您可以将程序集包装在只能由应用程序访问的加密shell中。当然有人想知道他们是如何做到这一点的,但它有效。但我不知道他们是否保护您的应用程序免受Crack.NET能够执行的运行时附件/反射。
- 编辑 另外要注意编译本机代码作为解决方案......本机代码也有反编译器。
答案 9 :(得分:1)
您是API吗?
为什么不为您的宝贵产品功能创建API服务,而不是尝试在所有客户设备上的某个产品中保护您的一个ddl文件?让设备上保存的实际产品使用该API来根据需要提供产品。
我认为这样您就可以100%确定您的代码未经过反编译,并且您在API中设置了自己的限制,这样开发人员/黑客就不会以您不想要的方式使用您的API。
当然还有一些工作要做,但最终,你处于掌控之中。
答案 10 :(得分:0)
如果有人必须窃取您的代码,则可能意味着您的商业模式无效。那是什么意思?例如,我购买你的产品然后我要求支持。你太忙了,或者相信我的请求无效,浪费你的时间。我解码您的产品以支持我的相关业务。您的产品对我来说变得更有价值,我会优先考虑我的时间,以便解决业务模式以利用您的产品。我重新编码并重新标记您的产品,然后出去赚取您决定留在桌面上的钱。有保护代码的原因,但很可能你是从错误的角度看问题。你当然是。你是“编码员”,我是商人。 ;-)干杯!
PS。我也是开发人员。即“编码员”
答案 11 :(得分:0)
我知道这已经过时了,Themida是我用过的最先进的防破解软件。
但是,它并不是免费的。
答案 12 :(得分:0)
除此处列出的第三方产品外,还有另一种产品:NetLib Encryptionizer。但是,它的工作方式与混淆器不同。混淆器使用内置的去混淆“引擎”修改组件本身。加密器在文件级别加密DLL(托管或非托管)。因此,除了对其进行加密外,它不会修改DLL。在这种情况下,“引擎”是位于应用程序和操作系统之间的内核模式驱动程序。 (免责声明:我来自NetLib Security)