ZwSetSystemInformation释疑

3 篇文章 0 订阅

ZwSetSystemInformation比较特殊,用了那段经典的加载方法,会发现老是加载不成功,到底成不成呢?

我用VMWARE+WinDbg测试了,lm,发现服务列表里面是有了的,但是dbgview没有输出。

在这里(http://hi.baidu.com/hypkb/blog/item/fe58b7830b377498f603a6f4.html)找到这样一段话:

 

 

起初是在<Rootkit:Subverting the Windows Kernel>那本书上面看到的,可惜怎么试都是失败,本身很简单就调调API的问题,再后来看到这篇:
用SystemLoadAndCallImage加载Rootkit
其中有这么一句话
typedef unsigned long NTSTATUS; //我认为这里应该是typedef long NTSTATUS,
                        //否则一个unsigned的值总是不小于0,下面这个宏就会
                        //出问题

实际上我后来才知道Greg Hoglund为什么会犯下这个"错误",因为哇卡卡大牛说他成功了, 我才知道即使ZwSetSystemInformation成功的话他还是会返回一个小于零的值,这就是为什么,Greg Hoglund要使用unsigned的原因吧.
ZwSetSystemInformation(
     SystemLoadAndCallImage
     ,&GregsImage
     ,sizeof(SYSTEM_LOAD_AND_CALL_IMAGE));

我的Driver是用VirtualDDK生成的标准驱动d.sys,和寒江独钓的first例子,只加了dbgprint一些信息。每次测试,基本上重装虚拟机。
下面是测试:
1、直接从系统安装,要Inf的,工作正常。不过有时候dbgview会脑残不显示。设备管理器里有。
2、用SRVINSTW.EXE安装,工作正常。设备管理器里有。
3、用ZwSetSystemInformation,加载first.sys,提示成功了!dbgview显示OK(要等一会)。net start first 提示没有服务!winobj看也没有显示。(不确定看漏没有)。windbg lm有。
加载d.sys,提示不成功了!设备管理器里没有。windbg lm有。

反正dbgview是没有输出了,到底运行了没有呢?为什么first.sys有输出,d.sys没有呢?

找了许久,似乎在这里找到了http://forum.driverdevelop.com/read.php?tid=102399

貌似“ZwSetSystemInformation加载的有些问题比如不能建device等等",是否?

请大牛指点一二。

 

更新:用WinDBG单步跟踪了一些,分别在DriverEntry和DriverUnload设断点,跟踪发现,first.sys能完整运行DriverEntry和DriverUnload,但是d.sys在DeviceObject的设置完成后,一到下一句的dbgprint要输出时,就报错了。运行不到尾部的 return STATUS_SUCCESS;估计是不能创造DeviceObject了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值