NTSTATUS ProcessDumps(PEPROCESS pEprocess, ULONG_PTR nBase, ULONG nSize) { BOOLEAN bAttach = FALSE; KAPC_STATE ks = { 0 }; PVOID pBuffer = NULL; NTSTATUS status = STATUS_UNSUCCESSFUL;
if (nSize == 0 || pEprocess == NULL) { return status; }
pBuffer = ExAllocatePoolWithTag(PagedPool, nSize, 'lysh'); if (!pBuffer) { return status; }
memset(pBuffer, 0, nSize);
if (pEprocess != IoGetCurrentProcess()) { KeStackAttachProcess(pEprocess, &ks); bAttach = TRUE; }
status = SafeCopyMemory_R3_to_R0(nBase, (ULONG_PTR)pBuffer, nSize);
if (bAttach) { KeUnstackDetachProcess(&ks); bAttach = FALSE; }
OBJECT_ATTRIBUTES object; IO_STATUS_BLOCK io; HANDLE hFile; UNICODE_STRING log;
RtlInitUnicodeString(&log, L"\\??\\C:\\lyshark_dumps.exe"); InitializeObjectAttributes(&object, &log, OBJ_CASE_INSENSITIVE, NULL, NULL);
status = ZwCreateFile(&hFile, GENERIC_WRITE, &object, &io, NULL, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_WRITE, FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0);
if (!NT_SUCCESS(status)) { DbgPrint("打开文件错误 \n"); return STATUS_SUCCESS; }
ZwWriteFile(hFile, NULL, NULL, NULL, &io, pBuffer, nSize, NULL, NULL); DbgPrint("写出字节数: %d \n", io.Information); DbgPrint("[*] LyShark.exe 已转存"); ZwClose(hFile);
if (pBuffer) { ExFreePoolWithTag(pBuffer, 'lysh'); pBuffer = NULL; }
return status; }
VOID UnDriver(PDRIVER_OBJECT driver) { DbgPrint(("Uninstall Driver Is OK \n")); }
NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath) { DbgPrint("hello lyshark.com \n");
NTSTATUS ntStatus; PEPROCESS pCurProcess = NULL;
__try { ntStatus = PsLookupProcessByProcessId((HANDLE)272, &pCurProcess); if (NT_SUCCESS(ntStatus)) { ntStatus = ProcessDumps(pCurProcess, 0x140000000, 1024); ObDereferenceObject(pCurProcess); } } __except (1) { ntStatus = GetExceptionCode(); }
Driver->DriverUnload = UnDriver; return STATUS_SUCCESS; }
|