• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

.NET加密原理之方法体加密信息对应关系

发布: 2008-5-15 10:09 | 作者: 不详 | 来源: yesky | 查看: 105次 | 进入软件测试论坛讨论

领测软件测试网 关键字:.net在 per method 的dotNet加密中,首要解决的方法体对应关系,即在运行时加密壳如何确定当前要解密的方法体所对应的加密信息。

  目前大部分加密壳都直接利用了dotNet的元数据来保存这种对应关系,我们知道在元数据中每个方法都会对应一个RVA值,加密壳可以直接把这个关系记录在RVA的地址处。在框架运行中RVA处的数据会被作为“方法体”在处理流程中直接传递,加密壳通过拦截框架处理流程中的函数,来对“方法体”进行分流处理。即先判断RVA处的数据是否“方法体加密对应信息”,如果是进入加密壳运行库的内部处理,不是则按原框架流程处理。

  对于这个“方法体加密对应信息”,最简单的方式是指记录一个指针信息,指向另一处数据块,四字节空间就够了。但是为了和普通没有加密的方法体进行区分,除了这个之外还需要增加一些唯一标识以便能被运行库在运行时安全无误的区分出来。

  大家可以用UE打开,加密后的程序集,看看一个方法体RVA处的数据,应该能很容易分别出来哪些是记录的“方法体加密对应信息”。

  正是这个原因,所以DNGuard v1.0和同类处理方式的加密壳,对方法体小于某个指定字节数的,就不能进行加密。

  因为“方法体加密对应信息”的大小超过的方法体的空间大小,写入的话会覆盖到后面方法体的信息。这实际上也是因为偷懒造成的。可以通过对方法体进行重排来解决这个问题,当然要麻烦很多了。

  这种模式实际上就是在元数据保存了一个虚拟表实现了 MethodToken => “方法体加密对应信息” 的对应记录。这个表可以看着是公开的。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: net NET Net 关系 原理

21/212>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网