Loading...
  所在位置:论坛首页 -> ┈┋电脑网络技术区┋┈ -> Asp/Asp.Net技术 -> 泛型 .Net 加解密中的一个麻烦
标题:泛型 .Net 加解密中的一个麻烦收藏 编辑 删除 楼主 | 上一篇 下一篇
晕菜两次
等级:社区游民
权限:普通用户
积分:8
金钱:200
声望:8
经验:8
发帖数:39
注册:2008年4月20日
资料 短消息2008-4-26 11:44:48
.Net中的泛型和C++中的模版很相似,但在编译行为上有些不同。

  之前做DNGuard HVM时就遇到了加密泛型的麻烦问题,最近又发现了泛型在ngen加强保护模式下也有问题,在。Net解密中它同样也是一个麻烦。

  C++中的模版在编译时就生成了实例代码,出现代码膨胀。

  .Net的泛型,在编译时只会生成一份MSIL代码,然后在运行时才会出现实例代码。

  泛型方法的编译过程和普通方法相比,多了泛型参数的构造和传递以及使用泛型参数构造父类型。

  加密处理过程中不能忽略泛型参数,必须把泛型参数也纳入处理范围才行。

  处理泛型参数还需要注意参数个数,之前因为没有考虑这个问题,引入了一个隐患。

  不过如果你能确定泛型参数不会超过126个那也可以不用考虑。

  ni加强保护模式下泛型的问题,因为泛型代码是在运行时生成实例代码的,

  如果对泛型使用反射的话,就有可能导致Jit请求的发生,这时就会出现问题。

  泛型在解密脱壳中也有一些麻烦。

  昨天晚上tankaiha告诉我,tracky找到一dotNet加密壳的vm unpacker。

  在国外网站http://www.tuts4you.com/download.php?list.55上面有一些UnpackMe(.NET)的例程。

  我就拿这里的例程测试这个unpcaker的效果。怎么形容呢?有点像段誉的一阳指。

  分析了一下实现原理,它是通过在Jit安装钩子拦截代码的方式做的,拦截的函数是

  JitNativeCode函数。分析了一下它方法体重构的代码,使用的是偷懒的方式(目前加密壳Jit层的一个漏洞)。

  从它拦截的位置来看,对maxtocode企业版无害,位置靠前了。

  从它方法体重构的代码看,对DNGuard HVM标准版无害,构造不出正确的方法体。

  我比较感兴趣的是它实现主动Jit请求的方法,我在它里面注入了一个Dll,拦截在Jit底层,用来记录哪些方法进入了Jit编译过程。

  在测试了几个样例后发现一个问题,记录的的方法中没有一个是泛型的方法,样例中有几个里面是使用了泛型的。

  跟踪它的主程序,发现有一处好像是调用了判断是否泛型方法的,然后就jmp跳过了。

  把它nop掉后再试,还是没有记录到泛型方法。

  跟踪进去发现是出现了初始化类型的异常。看来泛型在脱壳中也是一个麻烦。

  曾经有朋友跟我抱怨之前因为泛型无法加密,他把所有使用泛型的地方都改成不用泛型了。现在用DNGuard能加密泛型了,他又想要再改回去。

  其实写代码该怎么用就怎么用,没有必要因为加密的问题影响程序设计。

  就像现在,也没有必要因为泛型的脱壳中还存在麻烦,就乱用泛型。

  现在技术基本上是透明的,泛型的问题也应该只是早和晚的区别了。

2008-4-26 11:44:48 顶部
第1页 共页 共0个回复     <<    >>    
 快速回复
  • 支持UBB,HTML标签

  • 高级回复

  • 操作选项:评分 加精 解精 奖惩 设专题 设公告 解公告 固顶 总固顶 解固顶 结帖 解结帖 锁帖 解锁 移帖 删帖
      首页 | 购买指南 | 商业版本 | 虚拟主机 | 特色介绍 | 下载中心 | 支付方式
    Copyright 2004-2008 BBSGood.com Powered By: BBSGood.Speed Version 5.0
      咨询电话:0575-85513832、0575-85513825(传真)、7*24小时咨询服务:13606552007 不良信息举报中心 浙ICP备05029817号
      业务QQ:38958768、客服QQ1:415896239、客服QQ2:343896043、MSN:jccsxx@hotmail.com