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

почему то не сравниваются 2 строки wchar_t в Kernel Driver

mddbs

RAID-массив
Пользователь
Регистрация
09.02.2024
Сообщения
98
Реакции
3
пробовал через wcscmp не получается
пробовал через преобразование wchar_t в UNICODE_STRING и там уже через RtlCompareUnicodeString не получается

C:
HANDLE GetProcessPid(wchar_t* name)
{
    PSYSTEM_PROCESS_INFO pInfo = (PSYSTEM_PROCESS_INFO)NQSI(SystemProcessInformation), pInfoCur = pInfo;
    pInfoCur->UniqueProcessId;
    NTSTATUS status = STATUS_UNSUCCESSFUL;
    HANDLE pid;
    UNICODE_STRING uname1;
    UNICODE_STRING uname2;

    //Sleep(10000);
    RtlInitUnicodeString(&uname1, name);
    //DbgPrint("1.");
    while (TRUE)
    {

        const wchar_t* ProcessName = pInfoCur->ImageName.Buffer;
        if (MmIsAddressValid((PVOID)ProcessName) == TRUE) {

            //Sleep(10000);
            RtlInitUnicodeString(&uname2, ProcessName);
            //DbgPrint("2.");

            DbgPrint("Process Name: %ws\n", ProcessName);
            //Sleep(10000);
            if (RtlCompareUnicodeString(&uname1, &uname2, TRUE) == 0)
            {
                DbgPrint("3.");
                Sleep(10000);
                pid = pInfoCur->UniqueProcessId;
                KFree(pInfo);
                return pid;
            }
            else pInfoCur = (PSYSTEM_PROCESS_INFO)((ULONG64)pInfoCur + pInfoCur->NextEntryOffset);
        }
        else pInfoCur = (PSYSTEM_PROCESS_INFO)((ULONG64)pInfoCur + pInfoCur->NextEntryOffset);

    }
}

хотя строку находит
 

Вложения

  • Снимок экрана 2024-05-27 005846.png
    Снимок экрана 2024-05-27 005846.png
    1.7 КБ · Просмотры: 35
  • Снимок экрана 2024-05-27 005948.png
    Снимок экрана 2024-05-27 005948.png
    3.7 КБ · Просмотры: 35
C:
    PVOID KAllocate(SIZE_T size) {

        return ExAllocatePoolWithTag(NonPagedPool, size, 'proc');

    }


    VOID KFree(PVOID memory) {

        ExFreePoolWithTag(memory, 'proc');

    }


    HANDLE GetProcessPid(wchar_t* name) {

        ULONG bufferSize = 1024 * 1024; // 1MB initial buffer size

        PVOID buffer = KAllocate(bufferSize);

        if (!buffer) {

            return NULL;

        }


        NTSTATUS status;

        while ((status = NtQuerySystemInformation(SystemProcessInformation, buffer, bufferSize, &bufferSize)) == STATUS_INFO_LENGTH_MISMATCH) {

            KFree(buffer);

            buffer = KAllocate(bufferSize);

            if (!buffer) {

                return NULL;

            }

        }


        if (!NT_SUCCESS(status)) {

            KFree(buffer);

            return NULL;

        }


        PSYSTEM_PROCESS_INFO pInfo = (PSYSTEM_PROCESS_INFO)buffer;

        PSYSTEM_PROCESS_INFO pInfoCur = pInfo;

        HANDLE pid = NULL;

        UNICODE_STRING uname1;

        RtlInitUnicodeString(&uname1, name);


        while (pInfoCur->NextEntryOffset != 0) {

            UNICODE_STRING uname2;

            RtlInitUnicodeString(&uname2, pInfoCur->ImageName.Buffer);


            if (RtlCompareUnicodeString(&uname1, &uname2, TRUE) == 0) {

                pid = pInfoCur->UniqueProcessId;

                break;

            }

            pInfoCur = (PSYSTEM_PROCESS_INFO)((ULONG64)pInfoCur + pInfoCur->NextEntryOffset);

        }


        KFree(buffer);

        return pid;

    }
 


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