.Net 中枚举AppDomains

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: .Net 框架提供的基础类库中并没有枚举AppDomains的功能,只提供了获取当前执行代码所在的AppDomain功能。 国外一家提供.Net保护工具的,同时提供了一个AppDomain dump工具。

.Net 框架提供的基础类库中并没有枚举AppDomains的功能,只提供了获取当前执行代码所在的AppDomain功能。

国外一家提供.Net保护工具的,同时提供了一个AppDomain dump工具。用来证明其保护有效。

名称就不提了,简单介绍一下其保护原理:整体加密保护,支持嵌入程序集生成单一可执行文件。

也就是用native loader 包裹一下,仍然还是整体加密保护模式。

但是和其它工具有一点区别。程序集整体解密后不是放在默认AppDomain中执行的,它另外创建了一个AppDomain。

其提供的dump 工具的原理:

注入到选择的进程,然后获取当前AppDomain,枚举AppDomain中的 程序集,直接整体dump程序集。

这个工具可以对付大多数整体加密保护。却对付不了他们自家的。被其用来证明自己的保护效果。

 

程序集一般在默认AppDomain中执行的,其注入后,获取当前appdomain得到的使默认AppDomain,所以无法枚举被加密保护的程序集。

如果加上AppDomain的枚举功能,这个工具就可以用来对付他们自己的保护产品了。

 

基础类库中并没有枚举AppDomains的功能,那是否可以在C#中实现呢?

答案使肯定的。基础类库没有,但是其宿主接口提供了这个功能。

ICorRuntimeHost 接口中的两个方法

EnumDomains 和 NextDomain 。

具体详情可以参考 msdn。

在C#中怎么使用呢?

首先添加引用

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscoree.tlb

路径根据实际情况来定,版本号也不一定非得要2.0.50727 只要存在 mscoree.tlb就行。

这个接口在 1.0 中就提供了,更高的版本就不用说了。

 

IntPtr enumHandle = IntPtr.Zero;

CorRuntimeHostClass host = new mscoree.CorRuntimeHostClass();

host.EnumDomains(out enumHandle);

object domain = null;

while (true)

{

host.NextDomain(enumHandle, out domain);

if (domain == null) break;

AppDomain appDomain = (AppDomain)domain;

//********

}

host.CloseEnum(enumHandle);

Marshal.ReleaseComObject(host);

目录
相关文章
|
6月前
|
安全 API C#
C#.Net筑基-类型系统②常见类型--枚举Enum
枚举(enum)是C#中的一种值类型,用于创建一组命名的整数常量。它们基于整数类型(如int、byte等),默认为int。枚举成员可指定值,未指定则从0开始自动递增。默认值为0。枚举可以与整数类型互相转换,并可通过`[Flags]`特性表示位域,支持位操作,用于多选场景。`System.Enum`类提供了如`HasFlag`、`GetName`等方法进行枚举操作。
|
开发框架 安全 前端开发
一个高性能类型安全的.NET枚举实用开源库
一个高性能类型安全的.NET枚举实用开源库
71 0
|
JSON 开发框架 算法
.Net 序列化枚举为字符串
我所做的项目是需要调用业务算法的,算法中有一个入参是油品的性质,这个性质有名称、编码、类型等属性,其中类型是固定质量性质、体积性质和其他性质这三种,所以我把其作为枚举类型。问题也由此产生,默认情况下,枚举是以其整数形式进行 JSON 序列化,这就需要同研发算法的同事约定好数值的含义。但是经过协商,算法同事要求我们传递成字符串。因此,我们希望它们在一些情况下以字符串的形式进行序列化。本文将讲解实现这一目标的各种方法。
艾伟:.NET中Flags枚举的使用
  .NET中的枚举我们一般有两种用法,一是表示唯一的元素序列,例如一周里的各天;还有就是用来表示多种复合的状态。这个时候一般需要为枚举加上[Flags]特性标记为位域,例如: [Flags] enum Styles{ ShowBorder = 1, //是否显示边框ShowCa...
794 0
|
C# 开发者
一起谈.NET技术,C# 枚举在项目中的应用总结
本文主要是我在实际项目中对C#枚举的应用总结,如果存在不足的地方欢迎您指出。      一、枚举基本运用      1、枚举其实可以理解为一个恒量的结合,又或者可以认为它是一种类型。比如以下枚举定义:   public enum MicrosoftTechnology { CSharp, ASPNETMVC, SQLServer, WCF, SilverLight, } 此枚举默认值为int型,当然我们可以根据需要指定枚举的数据类型。
1210 0
|
C# 开发者
C# 枚举在项目中的应用“.NET研究”总结
本文主要是我在实际项目中对C#枚举的应用总结,如果存在不足的地方欢迎您指出。      一、枚举基本运用      1、枚举其实可以理解为一个恒量的结合,又或者可以认为它是一种类型。比如以下枚举定义:   public enum MicrosoftTechnology { CSharp, ASPNETMVC, SQLServer, WCF, SilverLight, } 此枚举默认值为int型,当然我们可以根据需要指定枚举的数据类型。
1181 0
|
缓存 Java 安全
.NET获取枚举DescriptionAttribute描述信息性能改进的多种方法
原文:.NET获取枚举DescriptionAttribute描述信息性能改进的多种方法 一. DescriptionAttribute的普通使用方式 1.1 使用示例   DescriptionAttribute特性可以用到很多地方,比较常见的就是枚举,通过获取枚举上定义的描述信息在UI上显示...
1011 0
|
Web App开发 前端开发 .NET