Windows Проверка ядра подписи драйвера из памяти - PullRequest
0 голосов
/ 16 марта 2020

Я должен проверить подпись файла драйвера (.sys) из ядра windows без чтения информации о сертификате из самого файла .sys. Так что в основном я ищу способ проверить цифровую подпись загруженного модуля ядра из памяти.

Я подумал, что могу просто проверить область памяти для информации о сертификате, но кажется, что сертификат не загружается в память, так как раздел не содержит ожидаемой информации:

PIMAGE_NT_HEADERS64 GetNtHeaders(PVOID imageBase)
{
    if (!imageBase)
        return nullptr;

    const auto dosHeader = reinterpret_cast<PIMAGE_DOS_HEADER>(imageBase);
    if (dosHeader->e_magic != IMAGE_DOS_SIGNATURE)
        return nullptr;

    const auto ntHeaders = reinterpret_cast<PIMAGE_NT_HEADERS64>(reinterpret_cast<DWORD64>(imageBase) + dosHeader->e_lfanew);
    if (ntHeaders->Signature != IMAGE_NT_SIGNATURE)
        return nullptr;

    return ntHeaders;
}


PIMAGE_NT_HEADERS64 headers = GetNtHeaders(pDrvObject->DriverStart);
DbgPrint("VirtualAddress %llx\n", headers->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress);
DbgPrint("Size %llx\n", headers->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size);
...