我应该担心混淆我的.NET代码吗?

时间:2020-03-05 18:39:50  来源:igfitidea点击:

我敢肯定,许多SO的读者都使用过Lutz Roeder的.NET反射器来反编译他们的.NET代码。
我很惊讶从编译后的程序集中重新构建源代码的准确性。

我想听听你们中有多少人使用混淆技术,以及使用哪种产品?

我敢肯定,对于我们提供的可通过Internet下载的.NET应用程序,这是一个更为重要的问题,而不是为特定客户端定制的。

解决方案

回答

如果我们需要保护知识产权,那么对我来说很容易,如果不这样做的话,那就太难了。

使用正确的工具即可轻松完成。

回答

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

尽管这是一个很好的问题,但我希望对此有更多的了解(我目前尚未对此进行混淆)。

在与我的经理进行了一些讨论之后,他说他并没有混淆,但是NGEN确实在安装中,这显然足以阻止Reflector在组件上工作,但是我不知道这是否正确以及在多大程度上适用,所以请不要把它当作福音:)

好问题:) +1

回答

我不会为此担心太多。我宁愿专注于推出出色的产品,获得良好的用户群并正确对待客户,而不必担心与窃取代码或者查看源代码有关的用户比例最小。

回答

尽管我们是一家小公司,向少数客户出售专业软件,但我们目前仍在混淆所有输出。

我们做出这个决定的原因很简单,我们发现一个心怀不满的前雇员正在积极地向客户索要二进制文件,出于某种考虑,他打算对新功能进行逆向工程以提供竞争性功能。

当然,如果他使用该软件,他仍然可以执行此操作,但是没有理由使它变得容易。

回答

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

例如,每次使用匿名类型时,都会得到一个IL,该IL会以一个晦涩难懂的名称进行编译。每次使用yield时,都会得到一个全新的类,该类同时实现IEnumerable和IEnumerator(智能优化,不可读的代码)。每次使用匿名委托时,我们都会得到一个新方法,该方法的名称在我所知道的每种.Net语言中都是无效的,但是在IL中就可以了。

回答

罗伯·库珀

Having had some discussions with my
  manager at work, he said he doesn't
  obfuscate, but does NGEN on install,
  apparantly that should be enough to
  stop Reflector working on your
  assemblies, but I have no idea if this
  is true and to what extent, so please
  don't take it as gospel :)

这不能提供任何防止拆卸的保护措施。首先,我想从任何安装包(例如MSI或者CAB文件)中提取原始文件都是有可能的。

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

Ngen是为了性能而不是安全性,它不会阻止反汇编或者使其变得更加困难。

回答

请记住,混淆不是加密。恕我直言,如果有人意识到对代码进行逆向工程的价值,他们会做到的。对于托管代码或者本机代码,无论是否混淆,都是如此。当然,混淆会阻止偶然的观察者,但是业务实际上受到这种人的威胁吗?我见过的每种.NET混淆方法都会使我们作为开发人员的生活更加艰难。

有提供真正加密功能的服务,例如Microsoft的SLPS。请参阅http://www.microsoft.com/slps/default.aspx

回答

混淆的有效性受到限制,这可能会使随便的人远离。最有效的混淆方式是仅使用户可以使用的代码量最少。如果可以的话,使应用运行在很大程度上取决于胖服务器。

回答

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

回答

同意,大多数懂一点代码的人都不需要窃取代码!