正如类似问题中所讨论的here and here我想保护我的代码免受逆向工程的影响。
我的情况是这样的Simucal在他的(优秀)答案中描述here:
基本上,归结为
你唯一的机会是
源盗窃的目标是如果您
有一些非常具体、难以
工程师,与您相关的算法
域名可以让您在您的
竞赛。这只是关于
只有这样才划算
尝试对一个小
您的申请的一部分。
我也正是这样的情况。一种难以设计的算法,对于我们的特定领域来说是优雅且有价值的。
经过几个月的微调和开发,最终结果非常紧凑(大约 100 行代码)并且优雅。我想保护代码的这个特定部分免受逆向工程的影响,或者至少使其变得合理困难。
该场景是一个用 C# 编写的富客户端应用程序,我必须部署这部分代码 - 我无法从 Web 服务执行它。
我认为由于性能原因(以及跨界问题),提取代码并在非托管本机二进制文件中重写它不是一种选择。
最初我想做简单的混淆,但考虑到代码的大小,我认为这不会提供太多保护。
理想情况下,我想保护我的整个应用程序,但有两个主要问题似乎使普通混淆器和第三方加壳器难以使用:
该应用程序提供了一个插件接口,因此某些程序集(和接口/类)不应被混淆和打包
我们仍然希望在收到错误报告时能够获得真实的堆栈跟踪 - 可能这可以通过我对真实代码的映射混淆来完成。
抛开这些问题不谈(尽管我也希望对此有任何意见),有什么好方法可以保护一小部分代码免受逆向工程的影响?我不担心任何人更改或破解代码,但想让代码变得难以理解和逆向工程。
这是不可能的。如果您的代码可以运行,那么它就可以被读取和逆向工程。你所能做的就是让它变得更难一点,相信我,这只会是一个little更难。你可能不喜欢这个事实,但大多数破解者在破解方面比其他人更擅长让事情变得难以破解。为保护您的代码而付出的努力通常是不值得的,特别是如果它对您的付费客户不利的话。见证 DRM 令人震惊的失败案例。
我的建议是不要担心。如果你的算法确实新颖,请寻求专利(尽管 Bilski 的决定变得有点困难,除非你将其与特定的硬件实现联系起来)。依赖商业秘密也是没有用的,除非你只将你的软件分发给那些签署合同的人,以确保他们不会允许不受限制的访问。然后,你必须有办法来监管这一点。一旦您将二进制文件放在互联网上或在没有合同的情况下分发它们,我相信您将被视为失去了商业秘密状态。
依赖许可也充满危险 - 您可能认为可以在许可中插入禁止逆向工程的条款,但世界各地的许多司法管辖区明确禁止这些条款。而俄罗斯黑帮,无论谁对大部分破解负责,无论如何都不太可能遵守上述规定。
为什么不专注于让你的产品做到最好呢?我们的目标是保持领先地位,而不是完全将他们拒之门外。成为第一个交付产品并始终在竞争群体中拥有最好的产品将确保您的繁荣,这远比在无用的保护上浪费大量精力(IMNSHO)要重要得多。
这只是我的看法。我可能错了。我以前错了,你只需要问我的妻子:-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)