前面介绍了虚拟机预处理层的加密壳核心的实现,今回将在这个基础上介绍另一个目前主流的加密壳核心实现方式--EE、Jit双层加密壳核心
前一回的核心模式解决了反射漏洞的问题,今回将就双层模式介绍两种实现实例。
在今回的双层核心中,就是保留前回的核心部分,并增加核心在 Jit 层的Hook。
关于Jit层Hook,在前面的文章 mscorjit的介绍
我们介绍了Jit层中的三个函数 compileMethod, jitNativeCode, compCompile 。
今回我们的加密壳核心就hook 这三个函数。
和mscorwks。dll中 hook的三个函数算在一起,加密壳核心一共hook了6个函数。
拦截了6个函数来解密一个方法体,我们能做什么呢?
我们可以把方法体分成6段,对方法体进行多核分段解密。
至于怎么个分法,就仁者见仁智者见智了。
目前网络上就有一些.Net程序采用的类似这种加密壳核心保护。
这里再应对一下破解者可能使用的静态解密脱壳手法。
可以在进行加密时即完成方法体的分段,将分段的数据用不同的加密算法加密,并在文件中分开存放。
但是对于从Jit动态Hook的破解者来说,这样的核心只是增加了加密壳核心撰写的麻烦,
对破解者没有多大实质的影响,对JitHook来说不管你分几次解密,最终都是完全解密方法体了。
对此我们可以把这个加密壳核心简化一下,
EE中只保留预处理时对GetILHeader的 hook,Jit中只保留 对最后一个函数compCompile 的Hook。
而后对于静态破解者,我们仍然可以在 compCompile 里面自己实现对方法体的分段解密。
对于Jit Hook的破解者,他们仍然需要拦截 compCompile 以后的函数。
基本保证的加密壳核心的强度不变,但简化了加密壳核心的实现。
简化的最大目的是为了提高加密壳核心的兼容性,尤其是减少对mscorwks.dll的hook。
下一回将就mscorwks.dll和mscorjit.dll 讨论一下 加密壳核心的兼容性问题。
让 .Net 程序 脱离 .net framework框架 运行的方法(补充) | .Net 加密原理,加密壳核心的兼容性以及安全性讨论(六) |
.Net 加密原理,EE,Jit双层加密壳核心的实现(五) | |
[ 发布日期:17年前 (2007-09-06) ] [ 来自:rick@博客园 ] | [分类:原创作品] |
[ 分类:原创作品
| 查看:1956 ]
暂时没有评论,快来发表一个评论吧。
发表评论 |