#include <ntifs.h> #include <windef.h>
#define IOCTL_IO_LyShark CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS)
VOID UnDriver(PDRIVER_OBJECT pDriver) { PDEVICE_OBJECT pDev; UNICODE_STRING SymLinkName; pDev = pDriver->DeviceObject; IoDeleteDevice(pDev); RtlInitUnicodeString(&SymLinkName, L"\\??\\LySharkDriver"); IoDeleteSymbolicLink(&SymLinkName); DbgPrint("驱动卸载完毕..."); }
NTSTATUS CreateDriverObject(IN PDRIVER_OBJECT pDriver) { NTSTATUS Status; PDEVICE_OBJECT pDevObj; UNICODE_STRING DriverName; UNICODE_STRING SymLinkName;
RtlInitUnicodeString(&DriverName, L"\\Device\\LySharkDriver"); Status = IoCreateDevice(pDriver, 0, &DriverName, FILE_DEVICE_UNKNOWN, 0, TRUE, &pDevObj);
pDevObj->Flags |= DO_BUFFERED_IO;
RtlInitUnicodeString(&SymLinkName, L"\\??\\LySharkDriver"); Status = IoCreateSymbolicLink(&SymLinkName, &DriverName); return STATUS_SUCCESS; }
NTSTATUS DispatchCreate(PDEVICE_OBJECT pDevObj, PIRP pIrp) { pIrp->IoStatus.Status = STATUS_SUCCESS; DbgPrint("派遣函数 IRP_MJ_CREATE 执行 \n"); IoCompleteRequest(pIrp, IO_NO_INCREMENT); return STATUS_SUCCESS; }
NTSTATUS DispatchClose(PDEVICE_OBJECT pDevObj, PIRP pIrp) { pIrp->IoStatus.Status = STATUS_SUCCESS; DbgPrint("派遣函数 IRP_MJ_CLOSE 执行 \n"); IoCompleteRequest(pIrp, IO_NO_INCREMENT); return STATUS_SUCCESS; }
NTSTATUS DispatchIoctl(PDEVICE_OBJECT pDevObj, PIRP pIrp) { NTSTATUS status = STATUS_INVALID_DEVICE_REQUEST; PIO_STACK_LOCATION pIrpStack; ULONG uIoControlCode; PVOID pIoBuffer; ULONG uInSize; ULONG uOutSize;
pIrpStack = IoGetCurrentIrpStackLocation(pIrp);
uIoControlCode = pIrpStack->Parameters.DeviceIoControl.IoControlCode;
pIoBuffer = pIrp->AssociatedIrp.SystemBuffer;
uInSize = pIrpStack->Parameters.DeviceIoControl.InputBufferLength;
uOutSize = pIrpStack->Parameters.DeviceIoControl.OutputBufferLength;
switch (uIoControlCode) { case IOCTL_IO_LyShark: { DWORD dw = 0;
memcpy(&dw, pIoBuffer, sizeof(DWORD));
DbgPrint("[+] hello lyshark \n");
dw++;
memcpy(pIoBuffer, &dw, sizeof(DWORD));
status = STATUS_SUCCESS; break; }
pIrp->IoStatus.Status = status; pIrp->IoStatus.Information = uOutSize; IoCompleteRequest(pIrp, IO_NO_INCREMENT); return status; }
if (status == STATUS_SUCCESS) pIrp->IoStatus.Information = uOutSize; else pIrp->IoStatus.Information = 0;
pIrp->IoStatus.Status = status; IoCompleteRequest(pIrp, IO_NO_INCREMENT); return status; }
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING RegistryPath) { CreateDriverObject(pDriver);
pDriver->DriverUnload = UnDriver; pDriver->MajorFunction[IRP_MJ_CREATE] = DispatchCreate; pDriver->MajorFunction[IRP_MJ_CLOSE] = DispatchClose; pDriver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchIoctl;
DbgPrint("By:LyShark ...");
return STATUS_SUCCESS; }
|