• 深入Jit,实现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。

  • 相关阅读:
    PSFTP使用简单教程
    JavaMail应用--通过javamail API实现在代码中发送邮件功能
    java常用数据类型转换
    自己封装的Java excel数据读取方法
    java怎样实现重载一个方法
    怎样做好测试保证交付产品质量
    软件测试之测试用例颗粒度问题
    Python 一句命令启动一个web服务器
    ansible 模块之在学习--lineinfile
    centos 7 安装sql 审核工具 inception + archer
  • 原文地址:https://www.cnblogs.com/rick/p/586904.html
Copyright © 2020-2023  润新知