.Net 加密原理,加密壳核心的兼容性以及安全性讨论(六)

前面我们介绍了目前主流的双层加密壳核心实现原理,
同时提到了应对兼容性,同时考虑安全性的前提下对加密壳核心进行简化。
今回主要讨论一下安全性、兼容性需要注意哪些因素。

关于安全性,主要应对两类破解者
1、静态分析脱壳
对于这一类,行之有效的方法就是增加加密算法的数量和复杂度。
加密壳核心的实现方式对其影响可忽略。

2、动态框架核心层拦截
对于这一类有两种防范,一是针对框架核心层进行检测,对Hook进行反制。
二是构造合理的加密壳核心模式,将核心数据局限在加密壳运行库范围内,
使破解者在加密壳运行库范围外拦截不到全部所需的信息。

关于兼容性,主要有两类
1、对未知框架环境的兼容
因为不同框架核心中各个函数的物理地址可能不一样,这就是兼容的最大麻烦,
所以尽可能少的hook框架核心函数能增加对未知框架的兼容性。

2、和其它加密壳并存的兼容性问题
这种情况比较少见,但也是不容忽视的。

如:某.Net中间件厂商使用A加密了其产品,另一家软件公司使用了该中间件,而这家公司又要使用B加密自己的产品。
这时就出现了一个软件环境中出现两种加密壳核心的情况。
不过这种情况基本上可以不用太多顾虑,一般这两家公司之间可以协调解决。

但是另外一种情况就比较难办了:
Web应用在虚拟主机上的问题,如果在同一虚拟主机上部署两种不同加密壳加密的web应用,也同样要面临这个问题。

怎么处理这个问题
在安全性方面对框架进行检测,反制拦截破解者,这样将对第2个兼容性产生问题。

所以理想的方案是使用第二种构造合理加密壳核心来加强安全性,这样不会对兼容性造成负面影响。
当然,如果你决定不考虑和其它加密壳的兼容性问题也就不用理会这个问题了。

撇开兼容性的第二条,我们来看看第一条。
麻烦的根源是函数地址的未知性,尤其是对于mscorwks.dll中的函数地址,没有任何参考点。
唯一的兼容方法就是模糊搜索,所以尽量减少对mscorwks.dll中的hook能在一定曾度上提高兼容性。

mscorjit.dll中的函数比较容易准确确定,因为它又一个入口函数地址可以直接获取到,
然后顺藤摸瓜就能把下级函数地址获取到,当然这需要一个小型的反汇编引擎。搜索1到3层基本上是没啥问题的了。

结论:mscorwks.dll是双层加密壳兼容性的瓶颈所在。

前面提到对框架进行检测,会影响兼容性,其实,这种方法对安全性的提高并没有多大的实质性帮助。
主要原因,加密壳要考虑兼容性(兼容未知框架)以及程序效率,所以不可能对框架进行全面检测,检测范围有限,同时因为hook方式的多样性,检测成功率也比较低。
对付一些初级用户也许能收到一点效果。

那么怎么办呢
下回我们将介绍加密壳核心兼容性和安全性共赢的实现模式,纯Jit层核心的实现。

时间: 2024-10-23 01:40:18

.Net 加密原理,加密壳核心的兼容性以及安全性讨论(六)的相关文章

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

目前加密壳将核心转移到Jit层后,内核模式的强度增加空间已经很小了.目前市面上的加密壳至少有一个共同的缺陷,无法防止Jit底层截获IL字节码. 有些壳采用从周边增加强度(如 Anti Hook),由于hook的多样性再加上壳又需要考虑自己的兼容性,所以这个效果不是十分理想. 从防止脱壳入手,通过保护局部变量签名和异常处理表,来阻止方法体的脱壳还原.这样虽然不能阻止截获IL字节码,如果配合流程混淆还是能起到相对有效的保护. 这样仍然有些遗憾,能实现阻止Jit层截获完整的IL字节码就完美了. htt

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

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

.Net 加密原理, 纯EE层加密壳内核的实现(二)

在上一回 .Net 加密原理,方法体加密信息对应关系的实现  中介绍了实现加密壳首要解决的基础问题, 今回以第一种实现模式介绍如何实现一个纯EE层(mscorwks.dll)的加密壳内核. 首先确定 "方法体加密对应信息" 直接通过元数据来保存. 这里我们使用最简单的记录方式--记录一个四字节的指针信息. 另外再加上一个标识数据,这个我们采用一个 magic DWORD表示. 这样记录信息一共是8字节.所以方法体小于8字节的Method将不能被加密处理. 接下来就是加密壳运行库核心的实

PGP加密原理

PGP是一个基于RSA公匙加密体系的邮件加密软件.可以用它对你的邮件保密以防止非授权者阅读,它还能对你的邮件加上数字签名从而使收信人可以确信邮件是你发来的.它让你可以安全地和你从未见过的人们通讯,事先并不需要任何保密的渠道用来传递密匙.它采用了:审慎的密匙管理,一种RSA和传统加密的杂合算法,用于数字签名的邮件文摘算法,加密前压缩等,还有一个良好的人机工程设计.它的功能强大有很快的速度.而且它的源代码是免费的.实际上PGP的功能还不止上面说的:;PGP可以用来加密文件,还可以用PGP代替UUen

非对称加密(1)非对称加密原理

现在我们已经知道对称加密的一个最大的问题是如何安全地传输密钥,并且在对称加密的体系下找不到好的解决方案.1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是"公开密钥系统".相对于"对称加密算法"这种方法也叫做"非对称加密算法". 与对称加密算法不同,非对称加密算法需要两个密钥:公钥(publickey)和私钥(privatekey

U盘加密原理你了解多少

  U盘中采取的数据保护技术一般分为两种:一种是软件加密,一种是硬件加密,关于两种加密措施,他们之间有什么区别呢?下面我们要来说说U盘加密的原理. 简单的来说,硬件加密技术一般所指的是采用AES 128位或256位硬件数据加密技术对产品硬件进行加密,具备防止暴力破解.密码猜测.数据恢复等功能.而软件加密则是通过产品内置的加密软件实现对存储设备的加密功能.同时实现硬件加密的方式主要有键盘式加密.刷卡式加密,指纹式加密等.而软件加密主要有密码加密.证书加密.光盘加密等. 当然两者加密方式都有各自的优

c#如何加密与加壳?被引用的块化处理。

问题描述 c#如何加密与加壳?被引用的块化处理. 我公司的软件是用C#编写的,内容很庞大,许多部分都是经过长期经验积累的结果,软件统调需要各个部分,但这样做不利于保密.希望把各部分程序做成块,主程序引用即可,不能够看到各部分的块化程序,不知道怎样做?谢谢各位大侠了. 解决方案 有各种混淆工具, visual studio自带的就有, 在tools菜单下, PreEmptive Docfuscator 解决方案二: 接口编程,强内聚,低偶合

U盘加密原理相关介绍

  随着U盘的广泛应用,人们也越来越离不开U盘,也就有重要的文件储存在U盘里,这时对U盘进行加密就变得十分重要.U盘加密究竟有哪些方式呢? u盘中采用的数据保护技术一般分软件和硬件两种,前者利用软件进行加密,后者将专用加密芯片做到u盘中,从硬件层面进行加密.那么二者之间有何区别? 简单的来说,硬件加密技术一般所指的是采用AES 128位或256位硬件数据加密技术对产品硬件进行加密,具备防止暴力破解.密码猜测.数据恢复等功能.而软件加密则是通过产品内置的加密软件实现对存储设备的加密功能.同时实现硬

《Python密码学编程》——1.5 如何使用加密轮盘加密

1.5 如何使用加密轮盘加密 首先,在纸上用英语写下你的消息.在这个例子里,我们将会加密这条消息:"The secret password is Rosebud.".接着,旋转内圈,直到它的字母匹配外圈的字母.值得注意的是,外圈的字母A下面有一个点.再看看外圈里的这个点对应的内圈里的数字,这个数字就是密钥. 这个密钥就是加密或解密消息的秘密所在.任何读过这本书的人都知道凯撒加密法,就像任何读过关于锁的书的人都知道门锁的工作原理.但是,就像平常的锁和钥匙,除非他们有密钥,否则他们不能解锁