.net - (为什么)我应该使用混淆?

标签 .net security obfuscation

在我看来,混淆是一种属于“模糊安全”或“错误的保护意识”阵营的想法。保护知识产权,有版权;为了防止发现安全问题,我们需要解决这些问题。简而言之,我将其视为解决社会问题的技术方案。 Those almost never work.

但是,我似乎是我们开发团队中唯一有这种感觉的人,所以我要么错了,要么只需要令人信服的论据。我们的产品使用 .NET,一位开发人员建议使用 .NET Reactor(顺便说一下, was suggested in this SO thread as well )。

.NET Reactor completely stops any decompiling by mixing any pure .NET assembly (written in C#, VB.NET, Delphi.NET, J#, MSIL...) with native machine code.

所以,基本上,你一次性抛弃了字节码的所有优点?

混淆是否有良好的工程优势?

最佳答案

您询问是出于工程原因,所以严格来说这并不是问题的答案。但我认为这是一个有效的澄清。

正如你所说,混淆是为了解决社会问题。与技术问题不同,社会(或商业)问题很少有完整的解决方案。解决或最小化问题的成功程度有限。

在这种情况下,混淆会增加他人反编译和窃取您的代码的障碍。它将阻止偶然的攻击,并且通过惯性,可能会降低您的知识产权被盗的可能性。打个令人厌烦的比方,防盗锁止装置并不能防止您的汽车被盗,但会降低这种可能性。

当然,在可维护性、(可能)性能方面以及最重要的是使用户更难准确提交错误报告方面都会有成本。

正如 GateKiller 所说,混淆不会阻止坚定的团队进行反编译,但是(这取决于您的产品是什么)一个团队可能会攻击您的决心有多大?

所以,这不是一个社会问题的技术解决方案,而是一个为复杂的社会结构增加一种影响的技术决策。

关于.net - (为什么)我应该使用混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31882/

相关文章:

c# - 拦截 ASP NET MVC POST 值

c - 随机文本混淆算法失败

java - 使用 Proguard 混淆时的可分包问题

c# - 为什么我需要通过引用我的交换函数来传递字符串?

c# - 在多台开发机器上打开引用 "MS-Office Object Library"的项目

javascript - 除了默默无闻的安全性之外,同源策略还提供什么安全优势?

php - 奇怪的 apache/PHP POST 错误

javascript - JavaScript 和浏览器的混淆

.net - 从 C# 中的窗体继承

c# - 保护区与在基类中使用私有(private)区域