6

我以前经常使用 JavaScript 工作,而真正困扰我的雇主的一件事是源代码太容易被窃取。即使进行了混淆,也没有什么真正的帮助,因为我们都知道任何有能力的开发人员都可以根据需要阅读该代码。

JS 脚本是一回事,但是那些在 IP(知识产权)上投资了数百万的 SOA 项目呢?我喜欢 .net,尤其是 C#,但最近我又不得不回答这个问题“如果我们把这个编译好的程序交给我们的客户,他们的开发人员可以对它进行逆向工程吗?” 我已经竭尽全力混淆代码,但我知道另一个坚定的 C# 开发人员不会花太多时间来获取代码。

所以我认真地提出一个问题,是否不可能保护 .net 代码?

我的考虑如下:

  1. 即使是常规的本机可执行文件也可以反转,但并不是每个开发人员都有能力做到这一点。与.net 程序集相比,反汇编本机可执行文件要困难得多。
  2. 混淆只会让你到目前为止,但它确实有一点帮助。
  3. 为什么我从未见过 Microsoft 公开承认任何用 .net 编写的东西都容易被盗 IP?为什么我从未在任何 Microsoft 网站上看到过任何反措施培训?为什么 VS 带有社区混淆器作为可选组件?好吧,也许我只是在这里陷入困境,但它在大多数开发人员的优先级列表中并不高。
  4. 是否有计划在任何未来版本的 .net 中解决我的担忧?

我不是在敲.net,但我想要一些现实的答案,谢谢,标记为主观和社区的问题!

4

2 回答 2

10

所有代码都可以逆向工程。

.NET 降低了这方面的门槛(试试 Reflector!),但混淆又提高了它。一个好的混淆器可以将标准提高到足够高,以防止除非常敬业、有动力的人之外的所有人对您的代码进行逆向工程。

话虽如此,我个人更喜欢专注于质量。我运行一个小型 ISV,我们使用 .NET - 混淆很重要,但如果你能提供高质量的产品,那么如果有人试图对你的代码进行逆向工程真的没关系。

甚至,假设,如果他们可以对所有事情进行逆向工程,对于一个复杂的项目,他们在实际交付具有市场竞争优势的东西方面会落后数年......

于 2010-03-30T23:58:15.227 回答
1

任何代码都可以进行逆向工程。是的,.NET 或 Java 比高度优化的 C++ 更容易,但不如 Javascript 或 PHP。混淆对减少漏洞大有帮助,但现实情况是,一旦代码在他手中,一个坚定的逆向工程师就会找到你的秘密,不管你做了什么来隐藏它。你所做的一切,充其量只是让他更讨厌。

好的混淆工具将阻止那些在 Reflector 开始和结束其专业知识的临时程序员真正了解您的代码是如何工作的。除此之外,你所做的任何事情基本上都是无望的。

在不久的将来,我认为这种情况不会发生任何变化,因为 .NET 使逆向工程变得如此容易的特性与允许框架中强大的反射和动态性的特性相同。

于 2010-03-31T00:01:14.033 回答