.Net 加密原理, 纯EE层加密壳内核的实现(二)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 在上一回 .Net 加密原理,方法体加密信息对应关系的实现  中介绍了实现加密壳首要解决的基础问题, 今回以第一种实现模式介绍如何实现一个纯EE层(mscorwks.dll)的加密壳内核。 首先确定 “方法体加密对应信息” 直接通过元数据来保存。

在上一回 .Net 加密原理,方法体加密信息对应关系的实现  中介绍了实现加密壳首要解决的基础问题,
今回以第一种实现模式介绍如何实现一个纯EE层(mscorwks.dll)的加密壳内核。

首先确定 “方法体加密对应信息” 直接通过元数据来保存。
这里我们使用最简单的记录方式--记录一个四字节的指针信息。
另外再加上一个标识数据,这个我们采用一个 magic DWORD表示。
这样记录信息一共是8字节。所以方法体小于8字节的Method将不能被加密处理。

接下来就是加密壳运行库核心的实现了。这里以早期DNGuard v1.0的运行库实现为例。

在mscorwks.dll 中有一个函数 GetILHeader,框架所有需要取方法体的地方都是通过调用这个函数实现的。
这个函数的原型 COR_ILMETHOD* __fastcall GetILHeader(DWORD_PTR RuntimeMethodHandler);
可以看着这样 DWORD* __fastcall GetILHeader(DWORD_PTR MethodPtr);

在我们的加密壳运行库中实现这个函数,然后用运行库实现的这个函数替换 mscorwks.dll 中的这个函数,
这个过程就是一个标准的 api hook 过程,这里就不详细介绍了。

这样 .Net 框架在需要取方法体时就会进入到我们运行库的这个函数中。


在运行库的函数如: DWORD* __fastcall DNGuard_GetILHeader(DWORD_PTR MethodPtr) 中。
首先我们调用原始的 GetILHeader,得到返回值,
首先判断返回值的前四个字节是否 magic DWORD,
(因为我们把对应关系记录在元数据中的,所以省去自己查询虚拟表的过程,框架已经帮我们完成了。)
如果不是,则直接返回。
如果是,则根据后面的四个字节执行的数据进行方法体的解密,然后把解密结果返回。

DWORD* __fastcall DNGuard_GetILHeader(DWORD_PTR MethodPtr)
{
 DWORD* pIL = OrgGetILHeader(MethodPtr);
 if(*pIL == gdwMagic)
 {
  pIL = DecryptMethod(pIL[1]);
 }
 return pIL;
}


这样一个 EE 层加密壳核心运行库就算完成了。

这种方式兼容性非常好,不会破坏dotNet原有的任何功能,自然也就包含反射功能了。
在 .Net 2.0 中这种加密壳运行库 就会出现反射漏洞了。

下回再介绍这种核心的改进--针对反射漏洞。

目录
相关文章
|
5月前
|
存储 移动开发 安全
Flutter加固原理及加密处理
Flutter加固原理及加密处理
96 0
|
2月前
|
存储 数据安全/隐私保护
.NET Core 究竟隐藏着怎样的神秘力量,能实现强身份验证与数据加密?
【8月更文挑战第28天】在数字化时代,数据安全与身份验证至关重要。.NET Core 提供了强大的工具,如 Identity 框架,帮助我们构建高效且可靠的身份验证系统,并支持高度定制化的用户模型和认证逻辑。此外,通过 `System.Security.Cryptography` 命名空间,.NET Core 还提供了丰富的加密算法和工具,确保数据传输和存储过程中的安全性。以下是一个简单的示例,展示如何使用 .NET Core 的 Identity 框架实现用户注册和登录功能。
32 3
|
2月前
|
存储 算法 Java
深入理解.NET中的托管堆及其工作原理
【8月更文挑战第31天】
28 1
|
5月前
|
存储 安全 算法
无线加密技术的种类、工作原理
【4月更文挑战第22天】
185 0
|
2月前
|
存储 算法 网络安全
二进制加密PHP Webshell原理及简单实现
二进制加密PHP Webshell原理及简单实现
60 8
|
3月前
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
71 10
|
2月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
107 0
|
3月前
|
算法 安全 Java
Java中MD5加密算法的原理与实现详解
Java中MD5加密算法的原理与实现详解
|
4月前
|
Java C# 数据安全/隐私保护
|
5月前
|
安全 网络协议 应用服务中间件
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
下一篇
无影云桌面