Я должен проверить подпись файла драйвера (.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);