64位vista,win7中KeServiceDescriptorTable问题

     最近在移植64位驱动,原本在32位驱动中使用到了KeServiceDescTable进行SSDT Hook等。但是在64位系统上是不允许进行SSDT HOOk的。在64位的XP系统上,使用到这个导出符号式没有问题的。但是在64位Vista和Win7下面,如果使用了这个符号,那么你在加载驱动的时候,返回的错误是找到不指定文件。在修这个bug真是有点吃力,只能一点点个跟进去,还好手边有WRK,要不然就完蛋了。首先说说加载驱动的过程吧,首先由应用层启动服务,之后会调用nt中的NtloadDriver,进去之后调用了IopLoadUnloadDriver(驱动卸载也是调用这个,只是参数改为FALSE),最好调用了IopLoadDriver进行。在这个函数中才是真正的加载驱动,包括加载镜像文件,检查导入表,修改重定位表等。具体的还是要看WRK的代码了。WRK虽然不是具体操作系统的原始代码,但是整个框架是有的。

    不说这个了,跟到IopLoadDriver之后,通过错误信息,还以为是镜像文件不存在导致的呢。后来发现在进行检查导入表的时候返回失败了。但是导入表中的函数实在是太多了,单步调就太痛苦了。在返回错误的时,下单点,查看当前检测的符号名,基本上确定是由KeServiceDescriptionTable导致的了。之后,专门写了专门用来检查导入表符号的小工具,真是有点累。这个工具主要的功能就是静态分析PE文件的导入表,挨个对导入表中的符号,去导入文件的导出表中去搜索。搜索的代码基本上用的是WRK中的代码。奇怪的是,在ntoskrnl.exe中有导出这个符号的。于是我在次调试分析加载过程。使用条件断点,很快确定是这个符号的文件。之后把驱动中使用到KeServiceDescriptionTable驱动。果然不出所料,驱动可以加载起来了。O(∩_∩)O哈哈~
     总结一下,这个符号虽然是有导出的,但是我们不可以使用。这个可能就是为了防止SSDT hook的时候来着吧。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值