保护我的代码免受逆向工程
正如这里和这里的类似问题所讨论的,我想保护我的代码免受逆向工程的影响。
Simucal在他的(优秀)答案中描述了我的情况:
基本上,如果你有一些非常具体的,难以设计的,与你的域名相关的算法,让你在竞争中占上风,那么唯一的机会就是你被盗用的目标。 这是试图对应用程序的一小部分进行逆向工程的唯一时间。
我有这种情况。 一个难以设计的算法,对于我们特定的领域来说是优雅和有价值的。
经过几个月的微调和开发,最终结果非常紧凑(大约100行代码)并且非常优雅。 我想从反向工程中保护代码的这个特定部分,或者至少使其合理化很困难。
该场景是用C#编写的富客户端应用程序,我必须部署这部分代码 - 我无法从web服务执行它。
我认为,由于性能原因(和跨界问题),提取代码并将其重写为非托管本机二进制文件不是一种选择。
最初我想做简单的模糊处理,但考虑到代码的小尺寸,我认为这不会提供太多的保护。
理想情况下,我想保护我的整个应用程序,但有两个主要问题似乎使普通混淆器和第三方包装器难以使用:
该应用程序提供了一个插件接口,因此一些程序集(和接口/类)不应该被混淆和打包
我们仍然希望能够在接收错误报告时获得真正的堆栈跟踪 - 这可能会将我的映射混淆处理为实际代码。
把这些问题放在一边(尽管我也很欣赏对此的任何意见),那么保护我的代码的一小部分免受逆向工程的好方法是什么? 我并不担心任何人改变或窃取代码,但想要让代码难以理解和逆向工程。
您应该混淆完整的代码,因为难以到达那个有价值的小部分。 代码越小,它越容易理解它。 大多数混淆器不应该混淆公共接口,因为那里有许多混淆的库。
不过,我认为你应该说服用户,没有特别的伎俩,而不是试图隐藏它。 引用凯撒苏泽的话说,“魔鬼曾经吸引过的最大伎俩是让世界相信他不存在”。
当然,您始终可以为您的发明申请专利并合法保护自己。
除了混淆之外,它几乎是毫无价值的,即使是微软(ScottGu等)也基本上认为具有合适的意图和能力的人会对应用程序进行逆向工程,而在.NET中,基本的防御是授权和IP,而不是试图通过守护你的代码默默无闻或其他防止逆向工程的手段。
这是他们为什么发布BCL源而不是保密的原因的一部分。
它不能做到。 如果你的代码可以运行,那么它可以被读取和反向工程。 你所能做的只是让它变得更难一点,相信我,它只会更难一点。 你可能不喜欢这个事实,但大多数饼干比任何人都更擅长破解。 保护代码的努力通常是不值得的,特别是如果它对付费客户不利。 见证DRM惊人的非成功。
我的建议是不要担心。 如果你的算法是真正新颖的,那就寻求一项专利(尽管在Bilski的决定中有些困难,除非你把它与特定的硬件实现联系起来)。 依靠商业秘密也是无用的,除非你只将软件分发给那些签署合同以确保他们不会无限制访问的合约。 然后,你必须有办法来监督这一点。 当你把二进制文件放到互联网上或在没有合同的情况下分发它们时,我相信你会被认为失去了商业秘密地位。
依靠许可也充满了危险 - 您可能认为您可以在禁止逆向工程的许可证中插入条款,但全球许多管辖区域明确禁止这些条款。 而那些对大部分破解负责的俄罗斯暴徒无论如何都不可能兑现上述条款。
你为什么不专心让自己的产品达到最佳状态呢? 目标是保持领先于人群,而不是完全锁定它们。 作为第一批交付并始终在竞争团队中拥有最佳产品的公司将确保您的繁荣远远超过浪费大量无用保护(IMNSHO)的努力。
这只是我的看法。 我可能是错的。 我以前错了,你只需要问我的妻子:-)
链接地址: http://www.djcxy.com/p/81877.html