.Net 加密原理,HVM核心的实现原理(八)

目前加密壳将核心转移到Jit层后,内核模式的强度增加空间已经很小了。目前市面上的加密壳至少有一个共同的缺陷,无法防止Jit底层截获IL字节码。

有些壳采用从周边增加强度(如 Anti Hook),由于hook的多样性再加上壳又需要考虑自己的兼容性,所以这个效果不是十分理想。
从防止脱壳入手,通过保护局部变量签名和异常处理表,来阻止方法体的脱壳还原。这样虽然不能阻止截获IL字节码,如果配合流程混淆还是能起到相对有效的保护。
这样仍然有些遗憾,能实现阻止Jit层截获完整的IL字节码就完美了。

http://www.DNGuard.Net/
DNGuard HVM 核心就是为了实现这一点——Jit层中无法截获完整正确的IL代码,它将保护的粒度从原来的"每方法体"降低到"每操作码(HVM伪代码)" 。实际原理也有不同,在Jit编译处理过程中HVM伪代码不会直接还原为IL代码,而是由HVM运行库参与编译实现直接 HVM伪代码-》本地代码。实际上就是HVM核心实现了IL代码一个子集的编译功能。

效率问题:
如果普通ILCode也需要经过HVM核心处理判断一面,是否会造成性能损失?
这个问题没有,HVM核心是利用Win32的异常处理机制动态装载的。只有HVM伪代码才会触发HVM核心的装载。在一个HVM方法编译完成之后,HVM核心会自动卸载。

HVM代码的编译相比ILCode的编译,是否会造成性能损失?
答案是肯定的,HVM提供了一个强度选项,可设置1-5.指示对ILCode进行伪代码替换的比例。
例如设置为1时,只对函数调用指令进行替换。对于函数调用指令的编译实际上是很简单的。
默认设置3,是一个实际性能损失比较小的设置,和纯加密方式相比,基本上可忽略。

 

伪代码动态性:
HVM代码是动态的,静态模式下(强度小于等于3)每个加密模块会有5+种不同方案。每个加密模块的方案各不相同。方案是由模块标识码 + 客户标识码 来动态生成的。
动态模式下,会在HVM核心中对代码进行二次处理,每个方法都会有一个动态的随机方案。
在Jit中截获的伪代码是动态随机的,各个方法中截获的伪代码没有必然的对应关系。

时间: 2024-09-20 10:59:46

.Net 加密原理,HVM核心的实现原理(八)的相关文章

搜索引擎原理简析 不懂搜索引擎原理的SEOer就是在裸奔

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 不懂搜索引擎原理的SEOer就是在裸奔. 嗯,在结束废话之前,再插一句:中国第一个基于网页索引搜索的搜索引擎是北大的天网. 好,先上图来简单看下搜索引擎的"三板斧":数据搜集->预处理[索引]->排名. 数据搜集 即数据的搜集阶段,将网页从浩如瀚海的9201.html">互联网世界搜集到自己的数

微机原理与接口技术-微机原理用74LS273扩展I/O口实验代码修改

问题描述 微机原理用74LS273扩展I/O口实验代码修改 利用实验平台上的锁进插座扩展一片74LS273作为输出口,控制八个LED灯.改为从右往左两个两个亮 OUTBIT equ 0e101h ; 位控制口 CLK164 equ 0e102h ; 段控制口(接164时钟位) DAT164 equ 0e102h ; 段控制口(接164数据位) IN_KEY equ 0e103h ; 键盘读入口 CS245 equ 0A000h data segment LEDBuf db 6 dup(?) ;

计算机组成与原理课程-计算机组成与原理的一个开放题目

问题描述 计算机组成与原理的一个开放题目 设有复数类型数据a=xi+yj,设某机器数字长16位,x,y为实数类型,取值范围-128.0~+127.9, 数据精度不低于0.1. 1)设计一种复数数据a的机器表示方式,并给出其表示范围和精度,说明能够满足数据a的表示要求. 2)给出该复数类型数据a和b的相加过程,并说明设计的数据表示方式在复数加法和结果表示时是否会产生溢出.(我需要的是不会产生溢出的) 解决方案 超过精度或者范围肯定会溢出.除非你用的不是现代科学意义上的计算机. 这个题目无非就是让你

网上大多数原理总结,UDP打洞原理

网络上的大多数UDP原理研究分析后,自己总结了下面的结果. 1.client A 登录 通过http服务器 webservices 验证成功获取自身信息与好友 列表信息等. 2.Http服务器登记client A的NAT后的IP地址与端口 3.Client B登录 通过http服务器 webservices 验证成功获取自身信息与好友列 表信息等. 4.Http服务器登记client B的NAT后的IP地址与端口 5.Client A想发送消息给Client B,向HTtp服务器获取Client

迅雷等下载软件原理,网络直播的原理!

问题描述 大家给我介绍几本书,或者开源项目,或者,给我发送源代码:948351520@qq.com谢谢!!! 解决方案 解决方案二:迅雷最基本的机制,是每一个下载过文件的终端都可以给系统提供可用新资源的识别码(假设是md5).这样即使文件名不一样,也可以识别它们是相同资源.然后当一个人要求下载一个资源时,会请求服务器把全世界有同样识别码(假设是md5)的资源全都发来,然后从多个资源并行下载,哪一个快就从哪里多下载一些.解决方案三:流媒体的,我想还是算了,暂时微软并没有在.net中增加其支持(特别

Nginx-->进阶-->原理-->Nginx+php+fastcgi的原理与关系

一.用户对动态PHP网页访问过程 用户浏览器发起对网页的访问:http://192.168.1.103/index.php 用户和nginx服务器进行三次握手进行TCP连接(忽略包括nginx访问控制策略.nginx防火墙等访问控制策略) 第一步:用户将http请求发送给nginx服务器 第二步:nginx会根据用户访问的URI和后缀对请求进行判断 1.例如用户访问的index.php,nginx则会根据配置文件中的location进行匹配,例如: root@json:/data/web# ca

.Net 加密原理,纯Jit层加密壳核心的实现(七)

前面我们介绍了目前主流的双层加密壳核心实现原理, 以及应对兼容性,同时考虑安全性的前提下对加密壳核心进行简化. 并就加密壳核心的兼容性以及安全性进行了讨论 ,提到了加密壳核心兼容性和安全性共赢的实现模式,纯Jit层核心. 今回我们将介绍这种加密壳核心的实现. 前面我们已经将加密壳核心简化为只Hook框架内核的两个函数,mscorwks.dll中一个,mscorjit.dll中一个. 同时在兼容性方面我们了解到mscorwks.dll是一个瓶颈问题,所以我们将要抛弃核心对mscorwks.dll的

discuz论坛程序的PHP加密函数原理

  康盛的 authcode 函数可以说对中国的PHP界作出了重大贡献.包括康盛自己的产品,以及大部分中国使用PHP的公司都用这个函数进行加密,authcode 是使用异或运算进行加密和解密. 原理如下,假如: 加密 明文:1010 1001 密匙:1110 0011 密文:0100 1010 得出密文0100 1010,解密之需和密匙异或下就可以了 解密 密文:0100 1010 密匙:1110 0011 明文:1010 1001 并没有什么高深的算法,密匙重要性很高,所以,关键在于怎么生成密

Ajax技术组成与核心原理分析_AJAX相关

本文主要为大家分析了Ajax技术组成原理,供大家参考,具体内容如下 1.Ajax特点:局部刷新.提高用户的体验度,数据从服务器商加载  2.AJax的技术组成不是新技术,而是之前技术的整合 Ajax: Asynchronous Javascript And Xml;(异步的JavaScript和XML) 包括的技术:JavaScript.XML.CSS.XMLHttpRequest 异步:发送请求以后,不等结果,由回调函数处理. JavaScript:向服务器发送请求,获得返回结果,更新页面 X