.net (Why)我应该使用模糊处理吗?[关闭]

bf1o4zei  于 2023-05-02  发布在  .NET
关注(0)|答案(8)|浏览(125)

已关闭,此问题为opinion-based。目前不接受答复。

4天前关闭。锁定,此问题及其答案为locked,因为此问题离题但具有历史意义。它目前不接受新的答案或交互。
在我看来,混淆是一个福尔斯“模糊安全”或“虚假保护感”阵营的想法。为了保护知识产权,有版权;为了防止安全问题被发现,有 * 修复这些问题 *。简而言之,我认为这是解决社会问题的技术方案。Those almost never work.
然而,我似乎是我们开发团队中唯一一个有这种感觉的人,所以我要么错了,要么只是需要令人信服的论据。我们的产品使用。NET,一个开发人员建议。NETReact器(顺便说一句,在这个SO线程中也建议了)。
.NET Reactor通过混合任何pure来完全停止任何反编译。NET汇编(用C#、VB.NET、 Delphi .NET、J#、MSIL...)与本机机器代码。
所以,基本上,你一次性抛弃了字节码的所有优点?
混淆是否有良好的 * 工程 * 好处?

z4iuyo4d

z4iuyo4d1#

你问的是工程方面的原因,所以严格来说,这不是对问题的回答。但我认为这是一个有效的澄清。
正如你所说,混淆是为了解决一个社会问题。社会(或商业)问题,不像技术问题,很少有完整的解决方案。在解决或尽量减少这个问题方面只有一定程度的成功。
在这种情况下,模糊处理会增加反编译和窃取代码的障碍。它将阻止偶然的攻击,并通过惰性,使您的知识产权不太可能被盗。打个令人厌烦的比方,防盗器不能防止你的车被偷,但它会降低被偷的可能性。
当然,在可维护性方面,(可能)在性能方面,最重要的是在使用户更难准确地提交错误报告方面,这是有代价的。
正如GateKiller所说,混淆不会阻止一个坚定的团队反编译,但是(这取决于你的产品是什么)一个团队有多坚定地攻击你?
所以,这不是一个解决社会问题的技术方案,这是一个技术决定,它给复杂的社会结构增加了一种影响。

mwg9r5ms

mwg9r5ms2#

如果一个大的程序员团队真的想得到你的源代码,并且有时间、金钱和精力,那么他们就会成功。
因此,混淆应该阻止那些没有时间、金钱或精力来获取你的源的人,你可以称他们为过路人。

u0njafvf

u0njafvf3#

如果坚持使用纯托管代码模糊处理,可以减少相当多的程序集大小,并且模糊处理的类/函数名(折叠为单个字母)意味着更小的内存占用。这几乎总是可以忽略不计的,但确实对一些移动的/嵌入式设备有影响(并被使用)(尽管主要是在java中)。

a2mppw5e

a2mppw5e4#

一个潜在的工程好处是,在某些情况下,模糊处理可以创建更小的可执行文件或其他工件。g.混淆javascript会导致文件变小(因为所有变量都命名为“a”和“b”而不是“descriptiveNameOne”,并且所有空格都被剥离,等等)。这导致使用混淆javascript的网页加载速度更快。显然,这并不适用于(尽可能多)。NET世界,但它是一个例子,其中有一个直接的工程效益的情况。

p8h8hvxi

p8h8hvxi5#

虽然没有关系。net,我会考虑在Javascript中进行模糊处理,可能还有其他被解释的语言。JavaScript从混淆中受益匪浅,因为它减少了所需的带宽,以及解析器必须读取的令牌。
但是对我来说,混淆编译的字节码似乎并没有那么有用。我的意思是你会尝试和实现什么?我只能看到模糊处理在许可证检查代码中稍微有用,以避免它太容易被绕过。

2ic8powd

2ic8powd6#

我发布了一个问题,它可能会帮助你,因为它讨论了一些问题:should-i-be-worried-about-obfuscating-my-net-code

nfs0ujit

nfs0ujit7#

使用模糊处理的主要原因是保护知识产权,正如您所指出的。对于企业来说,购买混淆产品通常更具成本效益。NETReact器比它是尝试和合法地执行您的版权。
混淆还可以提供其他更多附带的好处,例如性能改进和程序集大小减小。这将是你正在寻找的“工程”优势。

mkh04yzy

mkh04yzy8#

使用加密来保护途中的信息。
使用模糊处理来保护程序仍然拥有的信息。

相关问题