泛型,.Net 加解密中的一个麻烦

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: .Net中的泛型和C++中的模版很相似,但在编译行为上有些不同。 之前做DNGuard HVM 时就遇到了加密泛型的麻烦问题,最近又发现了泛型在 ngen 加强保护模式下也有问题,在。Net解密中它同样也是一个麻烦。

.Net中的泛型和C++中的模版很相似,但在编译行为上有些不同。

之前做DNGuard HVM 时就遇到了加密泛型的麻烦问题,最近又发现了泛型在 ngen 加强保护模式下也有问题,在。Net解密中它同样也是一个麻烦。

C++中的模版在编译时就生成了实例代码,出现代码膨胀。
.Net的泛型,在编译时只会生成一份MSIL代码,然后在运行时才会出现实例代码。

泛型方法的编译过程和普通方法相比,多了泛型参数的构造和传递以及使用泛型参数构造父类型。

加密处理过程中不能忽略泛型参数,必须把泛型参数也纳入处理范围才行。
处理泛型参数还需要注意参数个数,之前因为没有考虑这个问题,引入了一个隐患。
不过如果你能确定泛型参数不会超过126个那也可以不用考虑。

ni 加强保护模式下泛型的问题,因为泛型代码是在运行时生成实例代码的,
如果对泛型使用反射的话,就有可能导致 Jit 请求的发生,这时就会出现问题。

泛型在解密脱壳中也有一些麻烦。

昨天晚上 tankaiha 告诉我,tracky 找到 一dotNet加密壳 的 vm unpacker。

在国外网站 http://www.tuts4you.com/download.php?list.55 上面有一些 UnpackMe (.NET) 的例程。

我就拿这里的例程测试这个 unpcaker的效果。怎么形容呢?有点像段誉的一阳指。

分析了一下实现原理,它是通过在Jit安装钩子拦截代码的方式做的,拦截的函数是
JitNativeCode 函数。分析了一下它方法体重构的代码,使用的是偷懒的方式(目前加密壳Jit层的一个漏洞)。

从它拦截的位置来看,对maxtocode企业版无害,位置靠前了。

从它方法体重构的代码看,对DNGuard HVM 标准版无害,构造不出正确的方法体。

我比较感兴趣的是它实现主动Jit请求的方法,我在它里面注入了一个Dll,拦截在Jit底层,用来记录哪些方法进入了Jit编译过程。

在测试了几个样例后发现一个问题,记录的的方法中没有一个是泛型的方法,样例中有几个里面是使用了泛型的。

跟踪它的主程序,发现有一处好像是调用了判断是否泛型方法的,然后就jmp跳过了。
把它nop掉后再试,还是没有记录到 泛型方法。

跟踪进去发现是出现了 初始化类型 的异常。看来泛型在脱壳中也是一个麻烦。

曾经有朋友跟我抱怨之前因为 泛型无法加密,他把所有使用泛型的地方都改成不用泛型了。现在用DNGuard能加密泛型了,他又想要再改回去。

其实写代码该怎么用就怎么用,没有必要因为加密的问题影响程序设计。
就像现在,也没有必要因为泛型的脱壳中还存在麻烦,就乱用泛型。

现在技术基本上是透明的,泛型的问题也应该只是早和晚的区别了。

目录
相关文章
|
6月前
|
存储 安全 编译器
|
6月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
344 2
|
数据安全/隐私保护
微信公众号开发--.Net Core实现微信消息加解密
1:准备工作 进入微信公众号后台设置微信服务器配置参数(注意:Token和EncodingAESKey必须和微信服务器验证参数保持一致,不然验证不会通过)。 2:基本配置 设置为安全模式 3、代码实现(主要分为验证接口和消息处理接口): /// /// 验证接口 /// ...
1757 0
|
XML 测试技术 数据格式
一起谈.NET技术,如何将XML与OBJECT进行相互转换(泛型以及通用方法)
  对于ORMCodeHelper(Keny的),完全的采用插件式开发,即插即用,个人感觉还是比较爽的,架构不错。它包括了SQL SERVER 2000,SQL SERVER 2005以及ORACLE的相关C#代码的生成。
819 0
|
XML 测试技术 数据格式
如何将XML与O“.NET研究”BJECT进行相互转换(泛型以及通用方法)
  对于ORMCodeHelper(Keny的),完全的采用插件式开发,即插即用,个人感觉还是比较爽的,架构不错。它包括了SQL SERVER 2000,SQL SERVER 2005以及ORACLE的相关C#代码的生成。
824 0
|
缓存 API 数据库
从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之八 || API项目整体搭建 6.3 异步泛型仓储+依赖注入初探
代码已上传Github+Gitee,文末有地址   番外:在上文中,也是遇到了大家见仁见智的评论和反对,嗯~说实话,积极性稍微受到了一丢丢的打击,不过还好,还是有很多很多很多人的赞同的,所以会一直坚持下去,欢迎提出各种建议,问题,意见等,我这个系列呢,只是一个抛砖引玉的文章,大家可以自定义的去扩展学习,比如你看了.net core api,可以自学.net core mvc呀;看了sqlsugar,可以自学EF,Deppar呀;看了vue,可以自学React、Angular呀,我也是个小白,大家进步是本系列文章的唯一目标。
1739 0