如果其中一个的第一件事情,当我开始用C#我的教训是最重要的。 你可以反编译使用反射器或其他工具的任何.NET程序集。 许多开发人员都没有意识到这个事实,其中大部分是震惊,当我告诉他们自己的源代码。
防止反编译仍然是一个艰巨的任务。 我仍然在寻找一种快速,简单和安全的方式来做到这一点。 我不想混淆我的代码,所以我的方法名称将是A,B,C左右。 反射器或其他工具应无法在所有认识我的应用程序作为.NET程序集。 我知道一些工具已经但他们都非常昂贵。 有没有保护我的应用程序的任何其他方式?
编辑:
这样做的原因,我的问题是不能防止盗版。 我只想从阅读我的代码阻止竞争对手。 我知道他们会和他们已经做了。 他们甚至告诉我的。 也许我有点偏执,但生意上的对手看我的代码不会让我感觉很好。
Answer 1:
有一点要记住的是,你想这样做的方式,使商业意义。 要做到这一点,你需要定义自己的目标。 那么,到底什么是你的目标是什么?
防止盗版? 这一目标是不可能实现的。 即使本地代码可以被反编译或破裂; 盗版软件在网上提供的众多(即使产品像Windows和Photoshop)就是明证一个确定的黑客可以随时访问。
如果你不能阻止盗版,那么怎么样仅仅是减少了吗? 这也就是误导。 只需要一个人破解代码它提供给大家。 你每次都幸运。 海盗们只需要幸运一次。
我把它给你的目标应该是追求利润最大化。 你似乎认为停止盗版是必要的这一努力。 它不是。 利润简直是收入减去成本。 停止盗版行为增加了成本 。 它需要付出努力,这意味着在这个过程中的某个地方增加了成本,所以降低了方程的那一侧。 保护您的产品也无助于增加收入。 我知道,你看看所有这些海盗和看到所有你可以做,如果只有他们会支付许可费,而不是金钱,但实际情况是,这将永远不会发生。 有一些夸张这里,但普遍认为,海盗谁是无法破解您的安全要么找到一个类似的产品,它们可以破解或没有。 他们决不会购买它来代替,因此,他们并不代表销售损失。
此外, 确保你的产品实际上减少了收入 。 有两个原因。 一个是谁有麻烦您激活或安全,因此决定不再次购买或要求他们退钱的客户的小部分。 另一种是人究竟是谁试图软件盗版版本,以确保它在购买前工作的很小的比例。 限制你的产品的盗版分配( 如果你以某种方式能够在此取得成功),防止这些人曾经尝试你的产品,所以他们绝对不会买它。 此外,海盗还可以帮助您的产品传播给更广泛的受众,从而达到更多的人谁愿意为它付出。
一个更好的策略是,认为你的产品将被盗版,并想办法掌握情况的优势。 一对夫妇的话题更多的链接:
如何防止被窃取我的代码?
保护.NET应用程序
Answer 2:
在工作这里我们使用Dotfuscator的从先发制人的解决方案。
虽然这是不可能的,以保护.NET程序集100%Dotfuscator的使得它够硬,我认为。 我带来了许多的迷惑技术;
横向组件重命名
重命名方案
重命名前缀
增强的重载归纳
增量模糊处理
HTML重命名报表
控制流
字符串加密
而事实证明,他们不是对小公司来说是非常昂贵的。 他们有一个小公司一个特殊定价。
(不,我不工作的抢占;-))
有免费的当然选择;
Answer 3:
Answer 4:
如何防止任何C#应用程序的编译
几乎描述了整个局面。
在一些点,代码都被翻译成VM字节,并且用户可以得到它呢。
机器代码是没有太大的不同的两种。 像一个很好的互动拆装/调试器IDA Pro的让几乎所有的本地应用程序是透明的。 调试器是足够聪明使用AI确定共同的API,编译器优化等它允许用户从meticuloulsy从机器代码生成的汇编重建更高级别的结构。
而IDA Pro支持的.Net在一定程度上也。
老实说,在一个逆向工程的工作之后(兼容性)项目了几年,我得到了我的经验,最主要的是,我可能不应该过分担心人偷了我的代码。 如果有人想它,它永远不会是很难得到它,不管我怎样实施方案。
Answer 5:
我知道你不想模糊,但也许你应该看看Dotfuscator的 ,它会带你编译的程序集,并混淆它们。 我认为它甚至可以将它们加密。
Answer 6:
没有obsfuscator可以保护您的应用程序,甚至没有在这里描述的任何一个。 看到此链接,它可以deobsfuscate几乎每obsfuscator那里的deobsfuscator。
https://github.com/0xd4d/de4dot
它可以帮助你(但请记住,他们也是不充分的教授),最好的办法是使用混合代码,代码的重要代码在非托管语言和C或C ++做一个DLL等,然后保护他们要么世界末日或Themida。 Themida不是每个裂解装置,它在市场上最好的保护者之一,它也可以保护您的.NET软件。
Answer 7:
我听说过那直接编译IL本地代码的一些项目。 你可以从这个帖子一些额外的信息: 是否有可能编译.NET IL代码为机器码?
Answer 8:
我们使用{} SmartAssembly用于企业级分布式应用程序的.NET保护,它已为我们伟大的工作。
Answer 9:
如果你想充分保护您的反编译程序,看看阿拉丁HASP。 您可以在只能通过您的应用程序访问的加密壳包装你的组件。 当然,人们不禁要问,他们是如何做到这一点,但它的工作原理。 我不知道但是如果他们保护您的应用程序与运行时附件/反射而这正是Crack.NET是能够做到的。
- 编辑另外要注意编译为本地代码的解决方案...有本机代码的反编译为好。
Answer 10:
你的API?
而不是试图保护所有客户设备的任何一个产品的一个DDL文件,为什么不为您宝贵的产品功能创建API服务? 让被保存在设备上的实际产品消费,当你想它的API来交付产品。
我认为你是100%肯定,你的代码不被反编译和您在API中设定自己的极限,使开发人员/黑客不消耗你不希望它的方式您的API这种方式。
当然是更多的工作,但最终,你是在控制。
Answer 11:
如果有人偷你的代码,那么很可能意味着你的商业模式是行不通的。 我是什么意思呢? 例如,我买你的产品,然后我寻求支持。 你太忙,或者认为我的要求是无效和浪费你的时间。 我是你的产品,以支持我的相关业务进行解码。 你的产品变得更有价值,我和我优先考虑我的时间的方式来解决撬动你的产品的商业模式。 我重新编码和重新品牌的产品,然后走出去,让你决定离开桌子上的钱。 是有原因的保护代码,但最有可能你正在寻找从错误的角度思考问题。 当然你。 你是“编码器”,而我是商人。 ;-)干杯!
PS。 我也是一名开发人员。 即“编码器”
Answer 12:
我知道这是旧的,但, Themida是我用过的最先进的防破解软件。
这不是免费的,虽然。
Answer 13:
除了这里列出的第三方产品,还有另一个问题:NETLIB Encryptionizer。 但是它工作在比模糊处理的方式不同。 混淆器修改组件本身就带有反混淆“引擎”内置到它。 Encryptionizer加密文件级动态链接库(托管或非托管)。 因此,它不修改DLL除非对它进行加密。 “发动机”在这种情况下,你的应用程序和操作系统之间的坐在一个内核模式驱动程序。 (免责声明:我是从NETLIB安全 )
文章来源: How can I protect my .NET assemblies from decompilation?