欢迎光临 Rick 's BLOG
日志首页  | C# .Net编程  | 原创作品  | 生活点滴  | C\C++相关  | 多媒体相关※ERMP  | VB相关  | 其它运维与编程  |  留言簿
让 .Net 程序 脱离 .net framework框架 运行的方法(补充) .Net 加密原理,加密壳核心的兼容性以及安全性讨论(六)
未知  .Net 加密原理,EE,Jit双层加密壳核心的实现(五)
[ 发布日期:17年前 (2007-09-06) ]   [ 来自:rick@博客园 ] [分类:原创作品]
前面介绍了虚拟机预处理层的加密壳核心的实现,今回将在这个基础上介绍另一个目前主流的加密壳核心实现方式--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 讨论一下 加密壳核心的兼容性问题。
引用通告地址 (0):
复制引用地址https://www.rickw.cn/trackback/204
复制引用地址https://www.rickw.cn/trackback/204/GBK
[ 分类:原创作品  | 查看:1956 ]

暂时没有评论,快来发表一个评论吧。
发表评论
作者:   用户:[访客] 
评论:

表  情
禁止表情 | 禁止UBB | 禁止图片 | 识别链接
对不起,你没有权限上传附件!
验证:
 
PoweredBy R-Blog V1.00 © 2004-2024 WWW.RICKW.CN, Processed in second(s) , 7 queries    京ICP备17058477号-5