• XSS.stack #1 – первый литературный журнал от юзеров форума

Приветствую всех, пожалуйста помогите найти PID по имени процесса в Kernel Driver на языке C под Windows 10-11

Пожалуйста, обратите внимание, что пользователь заблокирован
Все упирается в пару ядерных вызовов - ObReferenceObjectByName и PsGetProcessId. Первым ты получаешь структуру EPROCESS по имени, второй вызов под капотом из EPROCESS дергает UniqueProcessId.

C:
// Псевдокод из IDA
HANDLE __stdcall PsGetProcessId(PEPROCESS Process)
{
    return CONTAINING_RECORD(Process, _EPROCESS, Pcb)->UniqueProcessId;
}
 
Последнее редактирование:
C:
NTSTATUS GetProcessIdByName(_In_ PUNICODE_STRING ProcessName, _Out_ PHANDLE ProcessId) {
    NTSTATUS status = STATUS_UNSUCCESSFUL;
    PEPROCESS process = NULL;
    HANDLE pid = NULL;
    ULONG bufferSize = 1024;
    PVOID buffer = NULL;

    buffer = ExAllocatePoolWithTag(NonPagedPool, bufferSize, 'Proc');
    if (!buffer) {
        return STATUS_INSUFFICIENT_RESOURCES;
    }

    status = ZwQuerySystemInformation(SystemProcessInformation, buffer, bufferSize, &bufferSize);
    if (status == STATUS_INFO_LENGTH_MISMATCH) {
        ExFreePool(buffer);
        buffer = ExAllocatePoolWithTag(NonPagedPool, bufferSize, 'Proc');
        if (!buffer) {
            return STATUS_INSUFFICIENT_RESOURCES;
        }
        status = ZwQuerySystemInformation(SystemProcessInformation, buffer, bufferSize, &bufferSize);
    }

    if (NT_SUCCESS(status)) {
        PSYSTEM_PROCESS_INFORMATION spi = (PSYSTEM_PROCESS_INFORMATION)buffer;
        while (spi->NextEntryOffset) {
            UNICODE_STRING currentProcessName;
            RtlInitUnicodeString(&currentProcessName, spi->ImageName.Buffer);
            if (RtlCompareUnicodeString(ProcessName, &currentProcessName, TRUE) == 0) {
                pid = spi->UniqueProcessId;
                *ProcessId = pid;
                status = STATUS_SUCCESS;
                break;
            }
            spi = (PSYSTEM_PROCESS_INFORMATION)((PUCHAR)spi + spi->NextEntryOffset);
        }
    }

    if (buffer) {
        ExFreePool(buffer);
    }

    return status;
}
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх