{SmartAssembly} – 混淆你的程序集代码使用向导
SmartAssembly 提供了一种用于优化和混淆你的 .NET 程序集,保护你的作品和软件,减小分发包的大小,提高程序性能。Visual Studio 2003/2005/2008 都集成了一个Dotfuscator 社区版的小工具,功能很简单,使用也比较方便,具体操作可参考如下的文章:Visual Studio 2008 中Dotfuscator的使用
这里,演示SmartAssembly 混淆工具的使用,该工具功能比较强(http://www.smartassembly.com),已经被RedGate收购了,感兴趣的朋友可以去下载。下面介绍具体的操作过程。
1. 启动SmartAssembly 应用程序,进入主界面,点击New Project 按钮,创建一个新的项目。
2. 选择需要改进和保护的主程序集,可以为Windows Forms 应用程序、WPF应用程序、Console 控制台程序、DLL程序集、ASP.NET Web 应用程序等等。
这里,我具体演示如何对一个ASP.NET Web 应用进行保护。点击 Browse Assembly 按钮,选择Web 应用程序编译完成的程序集。
![](https://i-blog.csdnimg.cn/blog_migrate/f95318812e4376b99f7272d1a1147870.gif)
3. 在选择好主程序集后,然后回到SmartAssembly程序界面,如下图所示。设置经过SmartAssembly处理之后的程序集存放的位置。通过点击Set Destination 按钮,进行设置。
![](https://i-blog.csdnimg.cn/blog_migrate/41db283343c98f2b0859913f7fceb348.gif)
4. 下面逐一设置SmartAssembly的程序参数。第一个是Dependencies Merging,设置主程序集依赖的其他相关程序集。
BIZ / DAC / Entity / Common 四个依赖程序集。比较神奇的是,这些依赖的程序集会合并到主程序集中,这样在发布的时候,只需要发布主程序即可,依赖程序集都不需要一起发布了。
![](https://i-blog.csdnimg.cn/blog_migrate/5717d46b0b8222cbdd643953efd85368.gif)
对于本范例而言,选择依赖的
另外,建议不要选择第三方的程序集,如下图所示,我们不需要选择 Enterprise Library 相关的程序集。这样,在发布应用程序时,则需要保护第三方的程序集。
![](https://i-blog.csdnimg.cn/blog_migrate/383c5249e00b3962c3790a0d31e1317d.gif)
5. Pruning 精简代码,这一步将从程序集中删除一些没有用的代码和元数据。SmartAssembly将检查程序集中的代码,自动判断哪些代码是有用的,哪些代码是从不会执行到的。同时,也将移除没有用的元数据。并可以分别选择对主程序集和依赖的程序集进行精简代码操作。
这里,我没有选择任何程序集。有兴趣的朋友,可以试试。
![](https://i-blog.csdnimg.cn/blog_migrate/784306dcde0ee6bd8c379cc8a741a3be.gif)
6. Obfuscation 混淆代码
混淆代码是保护你的程序集最重要的方法。它将类和方法的名称更改为不可读的字符,但不会改变代码的功能,达到保护代码的目的。同时,也可以减少元数据,减小程序集的大小。
这里,我选择主程序集和所有依赖的程序集进行混淆,如下图所示。
Types/Methods 名称以及Fields名称的混淆设置,这里保持默认值。
![](https://i-blog.csdnimg.cn/blog_migrate/f93470ab5da028703578d20e464714c2.gif)
下面还有
后面还有很多其他的选项,这里就逐一解释了,有兴趣的朋友可以自己看看。上述的这些设置,已经足以对发布的应用程序代码进行保护了。
7. Build 输出混淆后的程序集
点击Build 按钮,就输出混淆后的程序集了,并且所有依赖的程序集都合并在一起了,这样在发布的时候,只需要发布合并后的一个程序集和第三方的程序集了。另外,你还可以看看混淆/合并后程序集的大小肯定有变小。
![](https://i-blog.csdnimg.cn/blog_migrate/d59ba8c0a9f7ed5c65a4fd1a3233f919.gif)
CSDN 上有SmartAssembly 最新版的破解版本,可以下载下来试用一下,或者直接到SmartAssembly官方网站下载一个评估版本试试。
最后,在Reflector 中看看反编译的效果。呵呵,这下反编译代码就头大了。
![](https://i-blog.csdnimg.cn/blog_migrate/747ed16d9c5ca5fb3c48da0f868adc47.gif)
在SmartAssembly设置中,有个Other Protections 的选项,你可以选择在添加一些错误的metadata stream,如下图所示,这样在使用Reflector 反编译工具根本就无法打开该程序集。
![](https://i-blog.csdnimg.cn/blog_migrate/a6c24697bd62b7fce1a8ce2d5eeea502.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d02abee2622d4780d7ee121eacbe0aef.gif)