{SmartAssembly} – 混淆你的程序集代码使用向导(转)

 

{SmartAssembly} – 混淆你的程序集代码使用向导(转)

转自:http://www.cnblogs.com/rickie/archive/2009/11/13/1602239.html

 

SmartAssembly 提供了一种用于优化和混淆你的 .NET 程序集,保护你的作品和软件,减小分发包的大小,提高程序性能。 Visual Studio 2003/2005/2008 都集成了一个 Dotfuscator 社区版的小工具,功能很简单,使用也比较方便,具体操作可参考如下的文章: Visual Studio 2008 Dotfuscator 的使用

 

这里,演示 SmartAssembly 混淆工具的使用,该工具功能比较强( http://www.smartassembly.com ),已经被 RedGate收购了,感兴趣的朋友可以去下载。下面介绍具体的操作过程。

 

1. 启动 SmartAssembly 应用程序,进入主界面,点击 New Project 按钮,创建一个新的项目。

 

{SmartAssembly} – 混淆你的程序集代码使用向导(转)

 

 

 

 

2. 选择需要改进和保护的主程序集,可以为 Windows Forms 应用程序、 WPF应用程序、 Console 控制台程序、 DLL程序集、 ASP.NET Web 应用程序等等。

 

这里,我具体演示如何对一个 ASP.NET Web 应用进行保护。点击 Browse Assembly 按钮,选择 Web 应用程序编译完成的程序集。

 

{SmartAssembly} – 混淆你的程序集代码使用向导(转)

 

 

3. 在选择好主程序集后,然后回到 SmartAssembly程序界面,如下图所示。设置经过 SmartAssembly处理之后的程序集存放的位置。通过点击 Set Destination 按钮,进行设置。

 

 

{SmartAssembly} – 混淆你的程序集代码使用向导(转)

 

 

4. 下面逐一设置 SmartAssembly的程序参数。第一个是 Dependencies Merging,设置主程序集依赖的其他相关程序集。

 

 

 

{SmartAssembly} – 混淆你的程序集代码使用向导(转)

对于本范例而言,选择依赖的BIZ / DAC / Entity / Common 四个依赖程序集。比较神奇的是,这些依赖的程序集会合并到主程序集中,这样在发布的时候,只需要发布主程序即可,依赖程序集都不需要一起发布了。

 

 

另外,建议不要选择第三方的程序集,如下图所示,我们不需要选择 Enterprise Library 相关的程序集。这样,在发布应用程序时,则需要保护第三方的程序集。

 

{SmartAssembly} – 混淆你的程序集代码使用向导(转)

 

5. Pruning 精简代码,这一步将从程序集中删除一些没有用的代码和元数据。 SmartAssembly将检查程序集中的代码,自动判断哪些代码是有用的,哪些代码是从不会执行到的。同时,也将移除没有用的元数据。并可以分别选择对主程序集和依赖的程序集进行精简代码操作。

 

这里,我没有选择任何程序集。有兴趣的朋友,可以试试。

 

 

 

{SmartAssembly} – 混淆你的程序集代码使用向导(转)

 

 

6. Obfuscation 混淆代码

混淆代码是保护你的程序集最重要的方法。它将类和方法的名称更改为不可读的字符,但不会改变代码的功能,达到保护代码的目的。同时,也可以减少元数据,减小程序集的大小。

 

这里,我选择主程序集和所有依赖的程序集进行混淆,如下图所示。

 

 

 

{SmartAssembly} – 混淆你的程序集代码使用向导(转)

下面还有Types/Methods 名称以及 Fields名称的混淆设置,这里保持默认值。

 

 

后面还有很多其他的选项,这里就逐一解释了,有兴趣的朋友可以自己看看。上述的这些设置,已经足以对发布的应用程序代码进行保护了。

 

7. Build 输出混淆后的程序集

点击 Build 按钮,就输出混淆后的程序集了,并且所有依赖的程序集都合并在一起了,这样在发布的时候,只需要发布合并后的一个程序集和第三方的程序集了。另外,你还可以看看混淆 /合并后程序集的大小肯定有变小。

 

 

 

{SmartAssembly} – 混淆你的程序集代码使用向导(转)

**** 上有 SmartAssembly 最新版的**版本,可以下载下来试用一下,或者直接到 SmartAssembly官方网站下载一个评估版本试试。

 

 

最后,在 Reflector 中看看反编译的效果。呵呵,这下反编译代码就头大了。

 

 

 

{SmartAssembly} – 混淆你的程序集代码使用向导(转)

 

 

SmartAssembly设置中,有个 Other Protections 的选项,你可以选择在添加一些错误的 metadata stream,如下图所示,这样在使用 Reflector 反编译工具根本就无法打开该程序集。

 

{SmartAssembly} – 混淆你的程序集代码使用向导(转)