Показаны сообщения с ярлыком verifier. Показать все сообщения
Показаны сообщения с ярлыком verifier. Показать все сообщения

четверг, 2 апреля 2020 г.

VfDifThunks

It seems that in w10 build 19569 new verifier table has appeared - VfDifThunks along with new exported function DifRegisterPlugin (which is used only in VerifierExt.sys for now). List of intercepted functions:

четверг, 25 апреля 2013 г.

VfXdvThunks in windows 8.1 (build 9374)

Added functions:
  • IoSetDeviceToVerify
  • RtlCompareUnicodeString
  • RtlDowncaseUnicodeChar
  • RtlEqualUnicodeString
  • RtlFreeUnicodeString
  • RtlGenerateClass5Guid
  • RtlGUIDFromString
  • RtlHashUnicodeString
  • RtlStringFromGUID
  • RtlUnicodeToUTF8N
  • RtlUpcaseUnicodeChar
  • RtlUTF8ToUnicodeN
  • RtlxAnsiStringToUnicodeSize
  • RtlxUnicodeStringToAnsiSize

вторник, 4 октября 2011 г.

ViErrorDescriptions

и вот еще на сладкое - диагностические сообщения, которые driver verifier может выдать в ф-ции ViErrorDisplayDescription (в квадратных скобках внутренний код сообщения). По моему дают весьма наглядное представление о технологии

VerifierExt.sys

а вот например начиная с w8 driver verifier также содержит часть кода во внешнем драйвере VerifierExt.sys. Я понятия не имею зачем было так сделано - никакого механизма plugins в driver verifier по прежнему не предусмотрено и имя VerifierExt.sys жестко прошито в ntoskrnl.exe
Соотв-но интересен интерфейс сопряжения между этим драйвером и ядром
Например таблицы ф-ций driver verifierа в ядре имеют примерно такой формат:

struct THUNK_ITEM

{
  const char *func_name;
  PVOID verifier_thunk;
  PVOID unknown;
  ULONG index;
  PVOID *original_func;
};
Здесь интерес представляют три поля
  •  verifier_thunk - это собственно указатель на ф-цию, производящую разнообразные проверки параметров, уровень Irql и так далее
  • original_func - указатель на указатель на оригинальную ф-цию, перехват которой осуществлен driver verifier
  • index - просто некое уникальное число
 Драйвер VerifierExt.sys помимо всякого предоставляет экспортируемую ф-цию GetXdvDDIWrappers, которая возвращает примерно такую структуру:

struct ddi_wrappers

{
  DWORD version; // равен 4, что проверяется в ф-ции ViXdvBindXdvDDIWrappers
  DWORD tab_size;
  PVOID wrappers[tab_size];
};
Соотв-но связь между указателем на ф-цию верификации в wrappers и набором THUNK_ITEM в ядре происходит по полю THUNK_ITEM.index
Например ф-ция валидации ExCreateCallback лежит по индексу 24 в массиве wrappers. Она же имеет index 24 в VfXdvThunks
Список ф-ций из VerifierExt.sys:

понедельник, 26 сентября 2011 г.

VfMandatoryThunks

продолжая тему
таблица одинакова в vista, w7 & w8

w8 VfXdvThunks

а вот например в ядре w8 driver verifier состоит нынче аж из четырех таблиц:
  1. VfXdvThunks
  2. VfPoolThunks
  3. VfMandatoryThunks
  4. VfRegularThunks
Соотв-но VfXdvThunks содержит в себе следующие ф-ции (303 штуки !):

среда, 27 июля 2011 г.

StorPortVerifierFunctionTable

еще один драйвер, поддерживающий Driver Verifier - storport.sys (Microsoft Storage Port Driver)
Списки перехватываемых ф-ций:

понедельник, 25 июля 2011 г.

ScsiPortVerifierFunctionTable

а вот например еще scsiport.sys поддерживает Driver Verifier
Список перехватываемых ф-ций одинаков под всеми версиями windows:
  • ScsiPortInitialize
  • ScsiPortGetSrb
  • ScsiPortCompleteRequest
  • ScsiPortGetDeviceBase
  • ScsiPortNotification
  • ScsiPortFlushDma
  • ScsiPortFreeDeviceBase
  • ScsiPortGetBusData
  • ScsiPortGetLogicalUnit
  • ScsiPortGetPhysicalAddress
  • ScsiPortGetUncachedExtension
  • ScsiPortGetVirtualAddress
  • ScsiPortIoMapTransfer
  • ScsiPortMoveMemory
  • ScsiPortSetBusDataByOffset
  • ScsiPortValidateRange
  • ScsiPortStallExecution

пятница, 22 июля 2011 г.

ndisVerifierFunctionTable

вдогон - ndis тоже поддерживает Driver Verifier, только списочек перехватываемых ф-ций сильно короче:
xp
  • NdisAllocateMemory
  • NdisAllocateMemoryWithTag
  • NdisAllocatePacketPool
  • NdisAllocatePacketPoolEx
  • NdisFreePacketPool
  • NdisQueryMapRegisterCount
  • NdisFreeMemory
vista & w7
  • NdisAllocateMemory
  • NdisAllocateMemoryWithTag
  • NdisAllocatePacketPool
  • NdisAllocatePacketPoolEx
  • NdisFreePacketPool
  • NdisQueryMapRegisterCount
  • NdisFreeMemory
  • NdisGetRoutineAddress

FltpFilterVerifierThunks

а вот например я уже писал про всякие ф-ции, перехватываемые Driver Verifier
Внезапно оказалось что такие ф-ции могут перехватываться не только из ntoskrnl, но и из любых других драйверов, имеющих соотв-щую поддержку
Собс-но поддержка заключается в вызове недокументированной ф-ции MmAddVerifierThunks, которой на вход приезжают два параметра:

struct vrf_thunk
{
 PVOID original_function;
 PVOID patched_function;
};

NTKERNELAPI NTSTATUS MmAddVerifierThunks(struct vrf_thunk *tab, ULONG tabSizeInBytes);


Driver Verifier патчит IAT подопытного драйвера, заменяя original_function на patched_function, которая в свою очередь делает все необходимые проверки (например своих параметров или IRQL) и вызывает original_function (или DbgPrintEx если чо-нть нашлось).

Например fltmgr поддерживает driver verifier, регистрируя в DriverEntry табличку FltpFilterVerifierThunks. Интересно, что число поддерживаемых ф-ций отличается в разных версиях windows:

четверг, 24 февраля 2011 г.

VfOrderDependentThunks & VfPoolThunks

вдогон еще по паре таблиц под каждую версию windows

VfRegularThunks

а вот например списки ф-ций, которые driver verifier перехватывает при загрузке подопытного драйвера (не надо тока учить меня гуглом пользоваться - ничего не находится по теме)