深入Jit,实现dotNet代码的加解密

简介: 这段时间在测试.Net Jit的容错性,为了方便,就直接将代码插入到Jit中进行测试了。这个种方式就是我前面介绍DNGuard时提到的第一种增加内核强度防反射脱壳的方法。这种技术即可用在dotnet代码的保护上,也可以用在dotnet加密壳的解密上。

这段时间在测试.Net Jit的容错性,为了方便,就直接将代码插入到Jit中进行测试了。
这个种方式就是我前面介绍DNGuard时提到的第一种增加内核强度防反射脱壳的方法。
这种技术即可用在dotnet代码的保护上,也可以用在dotnet加密壳的解密上。

目前的加密壳都是将内核插入到ee中提供解密服务。而dotNet的反射功能也是在ee层实现的,
所以才暴露了加密壳之前的反射漏洞。

如果加密壳将内核插入到jit,和jit融合提供解密服务,那么反射就基本上失效了。在 ee 层就无法获取到解密的代码了。
在这种情况下修复反射基本上是不现实的了,jit只是为ee提供编译服务。当然如果实现了jit层的脱壳,然后反过来再从jit增加一个服务提供ee层调用也是可以修复反射的,但如果实现了jit层的脱壳,再修复反射就有点多此一举了。

如果直接从Jit层脱目前ee层的加密壳是比较轻松的,根本不用考虑修复反射的问题,对.Net 2.0 , 1.1都管用。
这种方法对目前加密壳以及它们的各个版本都有效。只是jit层脱壳有一个问题要解决,因为只有方法被编译时才会进入jit,所以要完全脱壳需要让方法都被编译。
不过这个问题不大,从ee层或者反射着手都可以解决。之前对付某壳老版本时用过,当时该壳没有躲过Profile,可以从profile里面dump到代码,同样只有方法在编译时才能通过profile得到代码。
用反射比较简单,不用了解ee都可以,invoke一个方法时这个方法肯定会被编译的。

Jit层脱壳可以通吃目前的ee层加密壳,加密壳如果还在ee层混就没什么前途了。

Jit层脱Jit层的加密壳,就如同目前用反射脱ee层的壳差不多(甚至可能还稍差一筹),没法做到通吃,只能针对不同的加密壳内核做不同的脱壳核心才行。
Jit加密壳和Jit融合得越复杂,要脱壳难度就越大。不过这样要保证加密壳的稳定性和兼容性,就要做更多的工作了。
就是这个原因,我才做Jit的容错性测试,DNGuard 2.0的内核使用的就是Jit层,容错性测试差不多了。
DNGuard目前的内核基调就不会再调整了。

接下来就要着手DNGuard H-VM的试验和测试了。这个也是纯Jit层的。(H = half)

DNGRuntime在运行时动态还原程序集,进行程序集方法的拆分(即一个方法被拆分为两个或多个),
拆分后的方法差不多是一半走jit,一半走DNG H-VM。

遵循如下约定:
如果方法A走Jit,则被方法A所调用的方法都走 DNG H-VM。

目录
相关文章
|
5月前
|
安全 Java 数据安全/隐私保护
推荐一款加密工具: 加密jar包+设置机器码+使用demo
推荐一款加密工具: 加密jar包+设置机器码+使用demo
225 0
|
6月前
|
数据可视化 BI C#
C#程序采用AOT发布,真的可以避免被反编译?
C#程序采用AOT发布,真的可以避免被反编译?
136 0
|
7月前
|
Linux 数据安全/隐私保护 C++
如何使用Cython对python脚本加密成pyd/so
如何使用Cython对python脚本加密成pyd/so
159 0
如何使用Cython对python脚本加密成pyd/so
|
安全 算法 Go
Go-ecc加密解密详解与代码
Go-ecc加密解密详解与代码
675 0
Go-ecc加密解密详解与代码
把wasm反编译出来
把wasm反编译出来
191 0
|
Dart Java 编译器
简单聊聊 Dart 的 JIT 和 AOT 模式
这是我参与8月更文挑战的第 4 天,活动详情查看:8月更文挑战。为应掘金的八月更文挑战, 本文主要简单聊聊 Dart 的 JIT 和 AOT 模式 Dart 官方有如下介绍: Dart Native includes both a Dart VM with JIT (just-in-time) compilation and an AOT (ahead-of-time) compiler for producing machine code
822 0
|
Dart Java Linux
【Flutter】Dart 语言 ( Dart 语言特征 | JIT 即时编译 | AOT 静态编译 )
【Flutter】Dart 语言 ( Dart 语言特征 | JIT 即时编译 | AOT 静态编译 )
252 0
|
算法 数据安全/隐私保护 C++
Crypto++ 5.6.5开源加解密软件的VS2015编译及使用
Crypto++ 5.6.5开源加解密软件的VS2015编译及使用
267 0
|
安全 API 数据安全/隐私保护
Unity3D代码加密防止反编译及资源加密
代码加密,防止反编译 Virbox Protector加壳工具 利用加壳工具可对Unity3D开发的软件进行加壳保护,主要保护方式:碎片代码、混淆、虚拟化。适用于快速加密方案,不需要编写任何代码,通过设置工具提供选项完成软件加壳保护,方便快捷。
2413 0
|
Java 测试技术 Serverless
Dart编译技术在服务端的探索和应用
作者:闲鱼技术-无浩 前言 最近闲鱼技术团队在Flutter+Dart的多端一体化的基础上,实现了FaaS研发模式。Dart吸取了其它高级语言设计的精华,例如Smalltalk的Image技术、JVM的HotSpot和Dart编译技术又师出同门。
3844 1