查看: 4146|回复: 14
收起左侧

[文章转载] 一句话让XueTr卸载不了我们的驱动(不知道这会不会是火星或抄袭了…)

[复制链接]
中国网络警察
发表于 2011-5-17 23:15:55 | 显示全部楼层 |阅读模式
驱动代码如下:
/*
* 作者:KiDebug
*/
#include <ntddk.h>

void testUnload(IN PDRIVER_OBJECT DriverObject)
{
}

NTSTATUS testDefaultHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return Irp->IoStatus.Status;
}

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
ULONG i;

for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)<br />         DriverObject->MajorFunction = testDefaultHandler;

DriverObject->DriverUnload = testUnload;

return STATUS_SUCCESS;
}



驱动卸载时,函数调用如下:
kd> kp
ChildEBP RetAddr
ee5deb30 805b1bde nt!IopDeleteDriver
ee5deb4c 80523bf1 nt!ObpRemoveObjectRoutine+0xe0
ee5deb70 804f5778 nt!ObfDereferenceObject+0x5f
ee5dec14 8057a83d nt!IopUnloadDriver+0x28a
ee5dec24 8053e6d8 nt!NtUnloadDriver+0xf
ee5dec24 80500231 nt!KiFastCallEntry+0xf8
ee5deca0 804f55df nt!ZwUnloadDriver+0x11
ee5ded48 8057a83d nt!IopUnloadDriver+0xf1
ee5ded58 8053e6d8 nt!NtUnloadDriver+0xf

在nt!IopDeleteDriver中,有如下的判断代码(WRK,/base/ntos/io/iomgr/objsup.c 787行):

if (driverObject->DriverSection != NULL) {
//
// Make sure any DPC's that may be running inside the driver have completed
//
KeFlushQueuedDpcs ();

MmUnloadSystemImage( driverObject->DriverSection );

PpDriverObjectDereferenceComplete(driverObject);
}

如果driverObject->DriverSection不为空的话,就会调用MmUnloadSystemImage把驱动映象从内核中卸掉
如果driverObject->DriverSection为空的话呢?
那当然就不会把把驱动映象从内核中卸掉了,驱动仍然在内核中,该干嘛干嘛
所以我们只要在驱动的DriverUnload函数里面添加一句代码就行:
/*
* 作者:KiDebug

*/
#include <ntddk.h>

void testUnload(IN PDRIVER_OBJECT DriverObject)
{
DriverObject->DriverSection=NULL;
}

NTSTATUS testDefaultHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return Irp->IoStatus.Status;
}

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
ULONG i;

for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)<br />         DriverObject->MajorFunction = testDefaultHandler;

DriverObject->DriverUnload = testUnload;

return STATUS_SUCCESS;
}

用InstDrv.exe加载编译后的驱动,依次点击安装、启动、停止、卸载,然后用XueTr测试一下,发现虽然能显示test.sys的存在,但菜单里面“卸载驱动(危险)”已经变灰,无法点击了。
x-da
头像被屏蔽
发表于 2011-5-17 23:22:47 | 显示全部楼层
我只是来看ID的~
kangzhen
发表于 2011-5-17 23:22:49 | 显示全部楼层
这个有人实际操作过吗?
143152
发表于 2011-5-17 23:25:01 | 显示全部楼层
小白围观    希望有大虾分析下
知微
发表于 2011-5-17 23:34:10 | 显示全部楼层
linxer说过有bug的。。。。。。。。。。。。等待修复或者看看0.40beta3有没修复
shenwei37
发表于 2011-5-17 23:38:05 | 显示全部楼层

null

围观,小白坐等大侠出现
zyq321128
头像被屏蔽
发表于 2011-5-19 09:44:04 | 显示全部楼层
360软件大赛
kafan988
发表于 2011-5-19 14:30:20 | 显示全部楼层
这个是BUG
nijiuaiwoa
发表于 2011-5-19 16:52:27 | 显示全部楼层
不让XUETR 卸载驱动    很简单撒
涩涩的猪
发表于 2011-5-20 16:16:32 | 显示全部楼层
回复 2楼 x-da 的帖子

我是来看你的防御装备的~
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-12-24 01:53 , Processed in 0.127062 second(s), 17 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表