【转】Eazfuscator.NET 3.3中混淆化需要注意的一些问题
对于DLL,Eazfuscator.NET默认不会混淆化任何公共成员,因为类库的公共成员很有可能被外界调用,而对于EXE的程序集,所有类型都可能被混淆化。注意上面这句话有一个“可能”,因为Eazfuscator.NET会智能得判定一个成员是否该被混淆化。比如某些可序列化类型的名称是不被混淆化的,还有WPF程序用到的数据绑定可能会影响某些类型属性名称的混淆化。
当然Eazfuscator.NET会读取.NET中已经定义的一些特性来供开发者自定义一些选项,比如上述的公共成员的混淆化可以通过System.Reflection命名空间中的ObfuscateAssemblyAttribute特性来设置,这个特性在.NET 2.0就有了。构造函数有一个参数:assemblyIsPrivate,为True的话所有成员都(可能)会被混淆化。为False的话公共成员不会被混淆化。
所以如果不想让Eazfuscator.NET混淆化EXE程序集中的公共成员,那么需加入下方代码:
using System.Reflection; [assembly: ObfuscateAssemblyAttribute(false)]
其次,即便是程序集的公共成员会被混淆化,还可以对部分类型进行更细致的混淆化设置。使用System.Reflection命名空间中的ObfuscationAttribute特性。
比如禁止对所有公共枚举值类型和其成员进行混淆化:
using System.Reflection; [assembly: Obfuscation(Feature ="Apply to type * when public and enum: renaming", Exclude =true, ApplyToMembers =true)]
甚至还可以针对某一个类型,比如不对程序集当中的Mgen.MyClass类型进行任何混淆化:
using System.Reflection; [assembly: Obfuscation(Feature ="Apply to type Mgen.MyClass: renaming", Exclude =true, ApplyToMembers =true)]
在实际运用中还有一些需要说明的,尤其是WPF/Silverlight/WinRT这种用到XAML数据绑定或其他依靠反射来定义属性值的方式(如Markup Extension)。此时则需要注意RESX资源类型不应该被混淆化,Visual Studio中创建的RESX资源类型默认都是internal修饰符的,这样Eazfuscator.NET会混淆化RESX资源类型生成的属性名称。你可以声明[assembly: ObfuscateAssemblyAttribute(false)],然后把RESX的修饰符改成Public:
或者使用Obfuscation特性来排除RESX类型的混淆化,当然第一种方法最方便。
另外有些环境可以没有ObfuscateAssemblyAttribute和ObfuscationAttribute类型的定义,那么可以复制Eazfuscator.NET安装目录下的Code Snippets文件夹内相应类型的定义(提供C#和VB.NET版本)。当然用户也完全可以自己定义,只要名称和.NET中的一致便可以。
另外还曾写过一些关于Easfuscator.NET的文章,可以参考:
Eazfuscator.NET 3.3:对WPF ViewModel类型定义的处理
最后更多详细的信息,建议参考Eazfuscator.NET的帮助文档,讲的很详细的!
posted on 2014-11-24 17:48 ExplorerMan 阅读(1066) 评论(0) 编辑 收藏 举报