【转】Eazfuscator.NET 3.3中混淆化需要注意的一些问题
2014-11-24 17:48
447 查看
对于DLL,Eazfuscator.NET默认不会混淆化任何公共成员,因为类库的公共成员很有可能被外界调用,而对于EXE的程序集,所有类型都可能被混淆化。注意上面这句话有一个“可能”,因为Eazfuscator.NET会智能得判定一个成员是否该被混淆化。比如某些可序列化类型的名称是不被混淆化的,还有WPF程序用到的数据绑定可能会影响某些类型属性名称的混淆化。
当然Eazfuscator.NET会读取.NET中已经定义的一些特性来供开发者自定义一些选项,比如上述的公共成员的混淆化可以通过System.Reflection命名空间中的ObfuscateAssemblyAttribute特性来设置,这个特性在.NET 2.0就有了。构造函数有一个参数:assemblyIsPrivate,为True的话所有成员都(可能)会被混淆化。为False的话公共成员不会被混淆化。
所以如果不想让Eazfuscator.NET混淆化EXE程序集中的公共成员,那么需加入下方代码:
其次,即便是程序集的公共成员会被混淆化,还可以对部分类型进行更细致的混淆化设置。使用System.Reflection命名空间中的ObfuscationAttribute特性。
比如禁止对所有公共枚举值类型和其成员进行混淆化:
甚至还可以针对某一个类型,比如不对程序集当中的Mgen.MyClass类型进行任何混淆化:
在实际运用中还有一些需要说明的,尤其是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中属性的特性问题
Eazfuscator.NET 3.3中枚举的处理
Eazfuscator.NET 3.3:对WPF ViewModel类型定义的处理
最后更多详细的信息,建议参考Eazfuscator.NET的帮助文档,讲的很详细的!
当然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中属性的特性问题
Eazfuscator.NET 3.3中枚举的处理
Eazfuscator.NET 3.3:对WPF ViewModel类型定义的处理
最后更多详细的信息,建议参考Eazfuscator.NET的帮助文档,讲的很详细的!
相关文章推荐
- 【转】Eazfuscator.NET 3.3中混淆化需要注意的一些问题
- VC.NET 需要注意的一些问题
- 玩DotNetNuke需要解决的一些小问题
- ASP.NET中实现二级或多级域名(修改UrlRewrite)需要注意的问题
- ASP.NET中实现二级或多级域名(修改UrlRewrite)需要注意的问题 (转)
- 漂亮MM拍照时需要注意的一些问题(火力增强版)
- ava 调用 .net Webservice的一些问题和注意事项
- 在web项目中一些需要注意的问题
- .net 序列化时,需要注意的一些问题
- jQuery调用WCF需要注意的一些问题
- c++中 关于字符串的一些需要注意的问题
- asp.net文件上传需要注意的问题
- 程序员创业初次做生意需要注意的一些问题
- 转载:ASP.NET开发应用程序时需要注意的10个问题
- 关于SelectOjbect使用需要注意的一些问题
- Java 调用 .net Webservice的一些问题和注意事项
- ASP.NET中实现二级或多级域名(修改UrlRewrite)需要注意的问题
- ASP.NET中实现二级或多级域名(修改UrlRewrite)需要注意的问题
- 在c#里调用C++的dll时,需要注意的一些问题
- UrlRewritingNet与FCKEditor同时使用时需要注意的问题