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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 这段时间在测试.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。

目录
相关文章
|
4月前
|
编译器 Linux C语言
编译并运行 Cython 代码的几种方式
编译并运行 Cython 代码的几种方式
94 1
|
6月前
|
Linux iOS开发 MacOS
CMake调用第三方库的两种方法
这两种方法都可以用来在 CMake 中调用第三方库,选择哪种方法取决于你的具体需求和第三方库的提供情况。
827 0
|
8月前
|
Java 测试技术 Go
使用go的内置运行时库调试和优化程序
【5月更文挑战第18天】在本文中,作者探讨了如何为运行时程序添加剖析支持以优化性能。他们面临的问题是一个程序需要找出平方根为整数且逆序平方等于其逆序的数字。他们首先展示了原始代码,然后使用`runtime`库进行优化,将计算和调用功能分离,同时记录CPU和内存使用情况。
61 4
|
8月前
|
Linux 数据安全/隐私保护 iOS开发
【教程】使用ipagurd打包与混淆Cocos2d-x的Lua脚本
本文将介绍如何使用ipagurd工具对Cocos2d-x中的Lua脚本进行打包与混淆,以及在iOS应用开发中的实际应用。我们将以Cocos2d-x-2.2.1 samples中的HelloLua为例,详细展示整个处理流程,并提供相应的代码案例演示。
|
缓存 Java 开发工具
你会在 JitPack 上创建依赖库吗?
你会在 JitPack 上创建依赖库吗?
298 0
你会在 JitPack 上创建依赖库吗?
|
自然语言处理 前端开发 安全
iOS-底层原理 31:LLVM编译流程 & Clang插件开发
iOS-底层原理 31:LLVM编译流程 & Clang插件开发
609 0
iOS-底层原理 31:LLVM编译流程 & Clang插件开发
|
Dart 程序员
dart系列之:手写Library,Library编写最佳实践
dart系列之:手写Library,Library编写最佳实践
|
测试技术 数据安全/隐私保护 C++
|
Java Maven Android开发
5分钟用Jitpack发布开源库
项目开发中会用到很多开源库, 他们一般通过Maven/Gradle依赖进来的. 演而优则唱,开发越来越溜以后, 你是否也蠢蠢欲动,想发布自己的库呢. 下面介绍怎么通过Jitpack进行发布Github代码, 真的非常非常简单,几分钟搞定~
3714 0
|
监控 开发工具 Android开发
《深入理解Android:Telephony原理剖析与最佳实践》一2.2 Android源代码下载及编译过程
本节书摘来自华章出版社《深入理解Android:Telephony原理剖析与最佳实践》一 书中的第2章,第2.2节,作者:杨青平,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1651 0