我应该担心模糊我的.NET代码吗?

时间:2008-08-15 08:36:20

标签: .net obfuscation

我确信很多读者都使用Lutz Roeder.NET reflector来反编译他们的.NET代码。 我很惊讶我们的源代码可以从我们编译的程序集中重新编译。

我有兴趣听到有多少人使用混淆,以及使用什么类型的产品?

我确信这对于您提供的通过互联网下载的.NET应用程序来说是一个更重要的问题,而不是针对特定客户端定制的内容。

10 个答案:

答案 0 :(得分:20)

我不会太担心。我宁愿专注于推出一款出色的产品,获得良好的用户群,以及正确对待客户,而不是担心窃取代码或查看源代码的用户占最小比例。

答案 1 :(得分:10)

请记住,混淆不是加密。恕我直言,如果有人认为反向工程代码的价值,他们就会这样做。这对托管代码或本机代码来说都是如此,无论是否混淆。当然,混淆会阻碍不经意的观察者,但你的企业是否真的受到这些人的威胁?我见过的每一种.NET混淆方法都会让你作为开发人员的生活更加艰难。

有些服务提供真正的加密,例如Microsoft的SLPS。见http://www.microsoft.com/slps/default.aspx

答案 2 :(得分:7)

我们目前对我们的所有输出进行了模糊处理,即使我们是一家向少数客户销售专业软件的小型公司。

我们做出这个决定有一个简单的原因 - 我们发现一个心怀不满的前雇员正在积极地接近我们的客户请求二进制文件 - 有些人担心他打算对新功能进行逆向工程以提供竞争功能。

当然,如果他使用该软件,他仍然可以这样做,但没有理由让他轻松。

答案 3 :(得分:5)

没有新的混淆,但自1.1以来有很多编译器技巧

例如,每次使用匿名类型时,都会获得IL,并使用一个非常模糊的名称进行编译。每次使用yield都会得到一个全新的类,它实现了IEnumerable和IEnumerator(聪明的优化,不可读的代码)。每次使用匿名委托时,你都会得到一个新方法,其名称在我知道的每种.Net语言中都是无效的,但在IL中这很好。

答案 4 :(得分:4)

@Rob Cooper

  

与我进行了一些讨论   经理在工作,他说他没有   混淆,但安装NGEN,   显然应该足够了   停止反射器在你的工作   集会,但我不知道是否这样   这是真的,在多大程度上,所以请   不要把它当成福音:)

这不提供任何防止拆卸的保护。首先,我想象很有可能从任何安装包中提取原始文件,如MSI或CAB文件。

但更重要的是,Ngen在安装程序集后运行在客户端计算机上。 Ngen只是强制程序集现在编译而不是以后使用JIT。原始程序集保持不变并且必须保留,因为Ngen可能无法编译整个程序集。

Ngen是为了表现而不是安全,并没有采取任何措施来防止拆卸或使其更加困难。

答案 5 :(得分:3)

对我来说很容易 - 如果你需要保护知识产权 - 混淆 - 如果不是的话。

使用合适的工具很容易。

答案 6 :(得分:2)

我认为在某种程度上我们都应该担心我们的IP:)

很好的问题虽然是我渴望了解更多的东西(我目前正在做混淆)。

与我的经理在工作中进行了一些讨论,他说他没有混淆,但安装NGEN,显然应该足以阻止Reflector在你的程序集上工作,但我不知道这是否属实,在多大程度上,所以请不要把它当作福音:)

好问题:) +1

答案 7 :(得分:2)

我们不对“非公开”应用程序使用混淆,但我们将其用于公共可用应用程序。混淆的应用程序包含大量高度复杂的代码,这使我们花费了大量的时间来编写,这就是让我认为混淆是必须的原因 - 至少在这种情况下。

答案 8 :(得分:0)

阴道灼热的效果有限,它可能让休闲男人远离。最有效的阻碍是只为用户提供最少量的代码。如果可以的话,让你的应用程序运行在很大程度上依赖于胖服务器。

答案 9 :(得分:0)

同意,大多数知道如何编码的人都不需要窃取您的代码!