Dotfuscator是一款.NET混淆器和压缩器,防止你的应用程序被反编译。
为什么要保护?
使用.NET编写的程序较容易被反编译,也就是逆向工程。.NET应用程序编译为一种高级、富有表现力的文件语法,称为MSIL(Microsoft Intermediate Language),包含方法和变量名称,可以轻松地反编译回源代码形式。
无论是否合法,攻击者都可以使用免费的反编译器轻松查看任何.NET应用程序的源代码,他们可以公开软件许可代码,复制保护机制和个人/团队私有的业务逻辑。任何人都可以阅读软件应用程序的所有信息,通过利用漏洞,窃取想法,破解应用程序甚至可能更严重。
混淆是一种可以在程序集中提供符号的无缝重命名,以及其他技巧来阻止反编译器的技术。正确应用混淆可以使应用程序的安全程度呈数量级的提高,同时保持应用程序的完整性。
当混淆器工具开始使用可读程序指令时,有一个副作用是输出会混淆人工解释器并破坏人工解释器正在使用的反编译器。在保留可执行逻辑的同时,反向语义呈现为非确定性的。所以,尝试对指令进行反向工程会失败,因为转换不明确。 深度混淆会产生无数的反编译可能性,如果重新编译,其中一些还会产生不正确的逻辑。反编译器作为计算机器无法知道哪些可能性可以用有效的语义重新编译。人们编写并使用反编译器来自动化反编译算法,这些算法对于计算机器来说是十分具挑战性的。
除了混淆之外,Dotfuscator还可以提供额外的保护层。这些保护包括检测,可以主动检测可能的攻击(例如篡改,调试或在root设备上运行),并可以使用预定义的行为或自定义逻辑进行响应。所有的这些保护措施使应用程序极难进行逆向工程或修改。
编译后保护
有一点很重要的是要理解Dotfuscator是一个“后编译”工具 - 它保护你已编译的.NET程序集(.dll和.exe文件)。开发环境和工具不需要做任何改变,源代码也不会以任何方式被改变甚至读取。受保护的程序集在功能上等同于传统程序集(除非有意更改),并且将在公共语言运行时(CLR)上执行。(即使可以对强混淆的程序集进行反编译,与原始源代码相比,它也会产生明显的语义差异。)
下图显示了使用和不使用Dotfuscator的典型构建过程的流程:
如图所示,你的应用程序将正常编译,然后Dotfuscator将保护这些程序集。Dotfuscator将把程序集作为输入,根据你的配置设置执行保护,并生成这些程序集的受保护版本作为输出。