ObfuscationAttribute模糊处理
在Reflection的强大和Reflector的盛行下,.NET产品的内部实现越来越透明,在恶意用户和Cracker面前,基本上已是砧板上的肉,被切到什么程度只能祈祷遇到的都是钝刀子;于是一批批的混淆工具应声而出,虽然他们的实现机制可能不同,但是都相同的是,使用这些工具的时候,需要为对应要混淆的产品写相当不简单的配置文件,里面描述哪些需要加密,哪些需要排除。那么,有没有办法在Assembly里就让工具知道某些地方不做混淆呢? 答案肯定是有办法了!Microsoft在设计.NET时就考虑到混淆了,并暴露出System.Reflection.ObfuscationAttribute和System.Reflection.ObfuscateAssemblyAttribute,并建议(仅仅是建议,没有要求,所以这个不是万能的)混淆工具提供商对它们提供支持。目前大多数的混淆工具提供商都支持了它们(不知道有哪个没有支持,如果你知道,欢迎提出),下面就对这两个Attribute的使用做简单的展示。 为了说明必要,先拉出我们的测试code来:
public class Type1
{
public void MethodA() { }
public void MethodB() { }
}
public class Type2
{
public void MethodA() { }
public void MethodB() { }
}
编译之后使用IDE自带Dotfuscator做加密,注意这里在Rename配置页里面什么也不做,在Input配置页里选中Honor Obfuscation Attributes,然后就保存并Run,很快看到输出结果,发现所有的类和方法都加密了。 修改Code如下,添上ObfuscationAttribute,代码如下,这里我希望Type1的MethodA方法不混淆,Type2的名字不被混淆,但其他的都自动混淆,到底能不能做到呢?
[assembly: ObfuscateAssemblyAttribute(true)]
public class Type1
{
[ObfuscationAttribute(Exclude = true)]
public void MethodA() { }
public void MethodB() { }
}
[ObfuscationAttribute(Exclude = true, ApplyToMembers = false)]
public class Type2
{
[ObfuscationAttribute(Exclude = false, Feature = "default",
StripAfterObfuscation = false)]
public void MethodA() { }
public void MethodB() { }
}

{ 5
[ObfuscationAttribute(Exclude = true)] 6
public void MethodA()
{ } 7
public void MethodB()
{ } 8
} 9
10
[ObfuscationAttribute(Exclude = true, ApplyToMembers = false)] 11
public class Type2 12

{ 13
[ObfuscationAttribute(Exclude = false, Feature = "default", 14
StripAfterObfuscation = false)] 15
public void MethodA()
{ } 16
public void MethodB()
{ } 17
}这里用到了ObfuscateAssemblyAttribute和ObfuscationAttribute,偶从MSDN摘取了它们的功能说明: ObfuscateAssemblyAttribute:指示模糊处理工具对适当的程序集类型使用其标准模糊处理规则。 ObfuscationAttribute:指示模糊处理工具对程序集、类型或成员采取指定的操作。 备注: ObfuscationAttribute 和 ObfuscateAssemblyAttribute 属性使得程序集作者可以批注二进制文件,以便模糊处理工具能够使用最少的外部配置正确处理这些二进制文件。
| 重要事项: |
|---|
|
应用此属性不会自动模糊处理该属性应用到的代码实体。应用此属性是为模糊处理工具创建配置文件的替代方法。也就是说, 它仅提供有关模糊处理工具的说明。Microsoft 建议模糊处理工具供应商遵循此处描述的语义。 但并不保证特定工具遵循 Microsoft 建议。 |
ObfuscationAttribute 属性 (Attribute) 具有一个字符串 Feature 属性 (Property)。模糊处理工具可将此属性的字符串值映射到它们实现的功能(最好是通过使用用户可访问的 XML 配置文件)。ObfuscationAttribute 定义两个功能字符串:“default”和“all”。字符串“default”应映射到模糊处理工具的默认模糊处理功能,而“all”应映射到模糊处理工具支持的模糊处理功能的完整集合。Feature 属性的默认值为“all”,该值启用模糊处理功能的完整集合。 当应用于某个程序集时,ObfuscationAttribute 也应用于该程序集内的所有类型。如果 ApplyToMembers 属性 (Property) 未指定或设置为 true,则该属性 (Attribute) 也应用于所有成员。ObfuscationAttribute 不指定程序集是公共的还是私有的。若要指定程序集是公共的还是私有的,请使用 ObfuscateAssemblyAttribute 属性。 如果 ApplyToMembers 属性未指定或设置为 true,则当应用于类或结构时,ObfuscationAttribute 也应用于该类型的所有成员。当应用于方法、参数、字段和属性 (Property) 时,该属性 (Attribute) 仅影响其应用到的实体。 修改完代码,编译,再次使用Dotfuscator,使用刚才相同的配置混淆,结果如下图,是不是和想象的一样。 
结论: 通过给特定的类、方法、属性、Assembly可以帮助简化混淆工具的配置脚本。 GCDN(http://gcdn.grapecity.com/cs)
ObfuscationAttribute模糊处理的更多相关文章
- 在知乎上看到 Web Socket这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错
在知乎上看到这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错,所以推荐给大家,非常值得一读. 作者:Ovear链接:https://www.zhihu.com/que ...
- Oracle 用Drapper进行like模糊传参查询需要在参数值前后带%符合
Oracle 用Drapper进行like模糊传参查询需要在参数值前后带%符合 string sqlstr="select * from tblname where name like ...
- Win10 字体模糊解决(DPI缩放禁用),设置默认输入法英文
电脑坏了 , 换了新电脑, 但是新电脑,死活不能装win7, 装都不能装!!!郁闷了 好多地方字体模糊了,百般设置都不好看, 后来远程桌面到win2008server, 发现,在远程桌面里面居然很清晰 ...
- Mybatis框架的模糊查询(多种写法)、删除、添加(四)
学习Mybatis这么多天,那么我给大家分享一下我的学习成果.从最基础的开始配置. 一.创建一个web项目,看一下项目架构 二.说道项目就会想到需要什么jar 三.就是准备大配置链接Orcl数据库 & ...
- js—模糊查询
首先要明白什么是模糊查询(废话又来了),就是根据关键字把列表中符合关键字的一项或某项罗列出来,也就是要检查列表的每一项中是否含有关键字,因此抽象一下就是一个字符串中是否含有某个字符或者字符串. 以下例 ...
- 机器学习笔记----Fuzzy c-means(FCM)模糊聚类详解及matlab实现
前言:这几天一直都在研究模糊聚类.感觉网上的文档都没有一个详细而具体的讲解,正好今天有时间,就来聊一聊模糊聚类. 一:模糊数学 我们大家都知道计算机其实只认识两个数字0,1.我们平时写程序其实也是这样 ...
- mybatis : trim标签, “等于==”经验, CDATA标签 ,模糊查询CONCAT,LIKE
一.My Batis trim标签有点类似于replace效果. trim 属性, prefix:前缀覆盖并增加其内容 suffix:后缀覆盖并增加其内容 prefixOverrides:前缀判断的条 ...
- combobox实现模糊查询自动填充
利用winform设计软件界面时,经常用到combobox控件,但有时需要绑定数据表中的数据,更进一步,需要实现对数据表中数据的模糊查询功能.本文就讲讲述如何用C#实现combobox下拉列表的模糊查 ...
- [转]ORACLE中Like与Instr模糊查询性能大比拼
instr(title,'手册')>0 相当于 title like '%手册%' instr(title,'手册')=1 相当于 title like '手册%' instr(titl ...
随机推荐
- ObjectInput read方法的坑
最近搞得一个bug,搞了好久既抓包分析数据,又debug竟然就是搞不懂为什么数据只是读了前面一部分.后来仔细研究了一下API,原来这个方法并不是你指的多少就读入多少指定的长度是最大长度,我嚓,太坑爹了 ...
- centos6.4下安装freetds使php支持mssql
centos版本:6.4 php版本5.3.17 没有安装之前的情况:nginx+php+mysql+FPM-FCGI 接下来安装步骤如下: 1.打开http://www.freetds.org/,进 ...
- JQuery淡入淡出 banner切换特效
附件中提供另一种实现方式 基本类似 主要的实现方法如下: var ShowAD=function(i){ showImg.eq(i).animate({opacity:1},settings.sp ...
- PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解,$_SERVER['HTTP_X_FORWARDED_HOST']
uchome的index文件中的二级域名功能判断,使用了php的$_SERVER['HTTP_HOST'],开始对这个不是很了解,所以百度了一下,发现一篇帖子有点意思,转发过来做个记录. 在php中, ...
- CorelDRAW 插件的安装和使用
CorelDRAW 是一款在中国非常受欢迎的图形软件,开放的界面和编程技术,能够对它进行二次开发制作插件,插件大抵有三种gms.cpg.exe格式,下面介绍一下这三种插件的安装和使用方法. 一.gms ...
- Spark小课堂Week4 从控制台看Spark逻辑结构
Spark小课堂Week4 从控制台看Spark逻辑结构 层级关系: 从监控控制台,我们可以看到如下关系: 一个 Job 包含 n Stage 一个 Stage 包含 n Task Job0解决什么问 ...
- Opencv 的数据结构
opencv的基本数据结构 结构 成员 意义 CvPoint int x,y 图像中的点 CvPoint2D32f float x,y 二维空间中的点 CvPoint3D32f float x,y,z ...
- KM3
本科:读完一本书,知道book里讲的是什么,带有知识吸收: 硕士:读完一本书,知道book里的内容,而且还能发现相关的问题,带有知识的思考: 博士:读完一本书,知道book里的内容,而且还能发现相关的 ...
- 【BZOJ3262】 陌上花开
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...
- 对.net orm工具Dapper在多数据库方面的优化
Dapper是近2年异军突起的新ORM工具,它有ado.net般的高性能又有反射映射实体的灵活性,非常适合喜欢原生sql的程序员使用,而且它源码很小,十分轻便.我写本博客的目的不是为了介绍Dapper ...