.Net 中的名称混淆与名称反混淆

简介: 提到 .Net 的保护,首推就是混淆保护了,而名称混淆基本上是所有混淆保护工具都具有的功能。可以说不支持名称混淆的工具称不上混淆保护工具。对于混淆保护,大家有一个认识,就是 混淆是一个不可逆的过程。而加密保护是一个可逆的过程。

提到 .Net 的保护,首推就是混淆保护了,而名称混淆基本上是所有混淆保护工具都具有的功能。
可以说不支持名称混淆的工具称不上混淆保护工具。
对于混淆保护,大家有一个认识,就是 混淆是一个不可逆的过程。而加密保护是一个可逆的过程。

名称混淆真的完全不可逆吗?答案是否定的。
名称混淆有一部分是可以精确还原的。

.Net的名称混淆在 剖析DotNet的名称混淆保护技术 中有详细介绍。今回注意介绍名称混淆中可逆的部分,以及还原的方法。

一. 属性名称 以及 getter 和 setter 函数。
少部分工具有这个问题。

按照正常规则 属性名称为Name,则 getter函数为 get_Name, setter 函数为 set_Name。
有些工具在混淆是处理不完整。只处理了属性名,没有处理 getter,setter函数名。
比较常见的是 只混淆的 getter和setter函数名,而没有混淆属性名。
这三个只要知其中一个就能推出另外两个。

对于属性还能在一定层度上实现对私有成员变量名的反混淆。
一般属性是公共的,大部分混淆器对公共成员是不混淆的。
如果这个属性有一个私有成员变量和它对应,实际上根据编程习惯,大部分属性都是这样的。
我们能将这个私有成员变量修改得 readable。

二、事件名称 以及 add , remove, fire 函数。
这个和 属性名称以及其setter,getter函数一样。

三、虚函数,接口实现函数
大部分工具对于基类虚函数和接口函数都没有混淆
而只混淆了继承类、实现类中的函数名称。
如:某个类 overide了 ToString 这个函数,然后这个函数名称被混淆了,
通过override 属性我们就能知道它原始的函数名称。

这里也包含了接口中继承的属性,即可以根据接口中的属性名称还原实现类中的属性名称。

四、Form,UserControl等类,窗体设计器的约定规则
根据规则我们知道 有一个必要的设计器变量 private System.ComponentModel.IContainer components 。
两个函数 protected override void Dispose(bool disposing)
和 private void InitializeComponent()。

一般我们很容易就能找到 那个变量和 Dispose函数。
InitializeComponent 我们一般可以从 构造函数中去找,它一般被构造函数调用。

这三个名称还原之后,我们就从 InitializeComponent 的函数体去分析。
根据规则,我们知道 Control.Name 就是 其变量的名称。
Control.Name 是在代码运行时赋值的。根据这个规则,我们能完全还原 Control 的
变量名称。

然后对于控件的事件处理函数,也是在 代码运行时赋值的。

如 button1 的 click 事件处理函数,可以还原为 button1_Click 。
设计器默认的名称就是这种规则。当然,不能保证和原始程序的名称一样。
虽不能100%还原事件处理函数的名称,但已经readable了。

另外附一个工具:
元数据名称编辑器

 

目录
相关文章
|
C# 芯片 API
C# .net中获取台式电脑中串口设备的名称
来源:http://www.cnblogs.com/hshuzhao/p/4028856.html?utm_source=tuicool&utm_medium=referral 、情境: 做项目的时候要打开串口然后进行一些库函数的调用来操作目标板。
1423 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
41 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
99 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
124 0
|
8月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
116 0