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

我应该担心混淆我的.NET代码吗?,.net,obfuscation,.net,Obfuscation,我相信SO上的许多读者都使用了来反编译他们的.NET代码。 我感到惊讶的是,我们的源代码可以多么准确地从编译后的程序集中重新构造出来 我很想知道你们中有多少人使用模糊处理,用于哪种产品 我确信,对于通过internet提供下载的.NET应用程序来说,这是一个更重要的问题,而不是为特定客户机定制的应用程序 对我来说很容易——如果你需要保护知识产权——如果不需要的话 使用正确的工具很容易。我认为在某种程度上,我们都应该担心我们的IP:) 这是一个好问题,因为我很想知道更多(我现在做的不是混淆) 在工

我相信SO上的许多读者都使用了来反编译他们的.NET代码。 我感到惊讶的是,我们的源代码可以多么准确地从编译后的程序集中重新构造出来

我很想知道你们中有多少人使用模糊处理,用于哪种产品


我确信,对于通过internet提供下载的.NET应用程序来说,这是一个更重要的问题,而不是为特定客户机定制的应用程序

对我来说很容易——如果你需要保护知识产权——如果不需要的话


使用正确的工具很容易。

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

这是一个好问题,因为我很想知道更多(我现在做的不是混淆)

在工作中与我的经理进行了一些讨论后,他说他不会混淆,但会安装NGEN,很明显,这应该足以停止Reflector在您的组件上的工作,但我不知道这是否是真的以及在何种程度上是真的,所以请不要将其视为福音:)


好问题:)+1

我不会太担心它。我宁愿专注于推出一款很棒的产品,获得一个良好的用户基础,并正确对待您的客户,而不是担心最小比例的用户担心窃取您的代码或查看源代码。

我们目前混淆了我们所有的输出,尽管我们是一个小公司,向少数客户销售专业软件

我们做出这一决定的原因很简单——我们发现一位心怀不满的前员工正积极与我们的客户接洽,要求提供二进制文件——有人担心他打算对新功能进行反向工程,以提供竞争性的功能


当然,如果他使用该软件,他仍然能够做到这一点,但没有理由让它对他来说很容易。

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

例如,每次使用匿名类型时,都会得到一个非常模糊的名称编译回来的IL。每次使用yield,都会得到一个实现IEnumerable和IEnumerator的全新类(巧妙的优化,不可读的代码)。每次使用匿名委托时,您都会得到一个新方法,其名称在我所知道的所有.Net语言中都是无效的,但在IL中这没关系。

@Rob Cooper

与我的同事进行了一些讨论 经理在工作,他说他没有 混淆,但在安装时不加密, 显然,这应该足以 停止你的工作 集合,但我不知道 是真的,到什么程度,请 不要把它当作福音:)


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

但更重要的是,Ngen在安装程序集后在客户机上运行。Ngen只是强制程序集立即编译,而不是稍后使用JIT。原始程序集保留且未修改,并且必须保留,因为Ngen可能无法编译整个程序集


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

记住,混淆不是加密。IMHO,如果有人意识到逆向工程代码的价值,他们会这么做。对于托管代码或本机代码,无论是否模糊,都是如此。当然,混淆会吓跑那些不经意的观察者,但是你的生意真的受到了这些人的威胁吗?我见过的每一种.NET模糊处理方法都会让你的开发生涯更加艰难


有些服务提供真正的加密,比如微软的SLP。请看

观察的有效性有限,它可能会让随便的人远离。最有效的观察方法是只向用户提供最小数量的代码。如果可以,让您的应用程序运行在很大程度上依赖fat服务器。

我们不会对“非公共”应用程序使用模糊处理,但会对公共可用应用程序使用模糊处理。模糊处理的应用程序包含大量高度复杂的代码,我们花了大量的时间编写,这就是为什么我认为模糊处理是必须的——至少在这种情况下是这样

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

…如果我们谈论WinForms Apps,这可能会有点问题。NGen不会以任何方式影响Reflector。使用NGen工具不会从系统中删除原始程序集。让开发变得更困难是一个很好的观点。奇妙的评论:“混淆会阻止不经意的观察者,但你的业务实际上受到这样的人的威胁吗?”“我想从任何安装包(如MSI或CAB文件)中提取原始文件是完全可能的。”-是:除非软件包含应保护的敏感数据(如私钥和密码)@Marclopes:私钥不应随应用程序一起交付。。。你可能是指公钥。。。密码应该是散列的,而不是明文的……你还有什么办法来存储私钥?服务器访问?如果没有互联网连接呢?