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:
Показаны сообщения с ярлыком verifier. Показать все сообщения
Показаны сообщения с ярлыком verifier. Показать все сообщения
четверг, 2 апреля 2020 г.
четверг, 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
среда, 25 июля 2012 г.
вторник, 4 октября 2011 г.
ViErrorDescriptions
и вот еще на сладкое - диагностические сообщения, которые driver verifier может выдать в ф-ции ViErrorDisplayDescription (в квадратных скобках внутренний код сообщения). По моему дают весьма наглядное представление о технологии
VerifierExt.sys
а вот например начиная с w8 driver verifier также содержит часть кода во внешнем драйвере VerifierExt.sys. Я понятия не имею зачем было так сделано - никакого механизма plugins в driver verifier по прежнему не предусмотрено и имя VerifierExt.sys жестко прошито в ntoskrnl.exe
Соотв-но интересен интерфейс сопряжения между этим драйвером и ядром
Например таблицы ф-ций driver verifierа в ядре имеют примерно такой формат:
Здесь интерес представляют три поля
Соотв-но связь между указателем на ф-цию верификации в wrappers и набором THUNK_ITEM в ядре происходит по полю THUNK_ITEM.index
Например ф-ция валидации ExCreateCallback лежит по индексу 24 в массиве wrappers. Она же имеет index 24 в VfXdvThunks
Список ф-ций из VerifierExt.sys:
Соотв-но интересен интерфейс сопряжения между этим драйвером и ядром
Например таблицы ф-ций 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 - просто некое уникальное число
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 г.
w8 VfXdvThunks
а вот например в ядре w8 driver verifier состоит нынче аж из четырех таблиц:
- VfXdvThunks
- VfPoolThunks
- VfMandatoryThunks
- VfRegularThunks
среда, 14 сентября 2011 г.
среда, 27 июля 2011 г.
StorPortVerifierFunctionTable
еще один драйвер, поддерживающий Driver Verifier - storport.sys (Microsoft Storage Port Driver)
Списки перехватываемых ф-ций:
Списки перехватываемых ф-ций:
понедельник, 25 июля 2011 г.
ScsiPortVerifierFunctionTable
а вот например еще scsiport.sys поддерживает Driver Verifier
Список перехватываемых ф-ций одинаков под всеми версиями windows:
Список перехватываемых ф-ций одинаков под всеми версиями 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
xp
- NdisAllocateMemory
- NdisAllocateMemoryWithTag
- NdisAllocatePacketPool
- NdisAllocatePacketPoolEx
- NdisFreePacketPool
- NdisQueryMapRegisterCount
- NdisFreeMemory
- NdisAllocateMemory
- NdisAllocateMemoryWithTag
- NdisAllocatePacketPool
- NdisAllocatePacketPoolEx
- NdisFreePacketPool
- NdisQueryMapRegisterCount
- NdisFreeMemory
- NdisGetRoutineAddress
FltpFilterVerifierThunks
а вот например я уже писал про всякие ф-ции, перехватываемые Driver Verifier
Внезапно оказалось что такие ф-ции могут перехватываться не только из ntoskrnl, но и из любых других драйверов, имеющих соотв-щую поддержку
Собс-но поддержка заключается в вызове недокументированной ф-ции MmAddVerifierThunks, которой на вход приезжают два параметра:
Driver Verifier патчит IAT подопытного драйвера, заменяя original_function на patched_function, которая в свою очередь делает все необходимые проверки (например своих параметров или IRQL) и вызывает original_function (или DbgPrintEx если чо-нть нашлось).
Например fltmgr поддерживает driver verifier, регистрируя в DriverEntry табличку FltpFilterVerifierThunks. Интересно, что число поддерживаемых ф-ций отличается в разных версиях windows:
Внезапно оказалось что такие ф-ции могут перехватываться не только из 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 г.
VfRegularThunks
а вот например списки ф-ций, которые driver verifier перехватывает при загрузке подопытного драйвера (не надо тока учить меня гуглом пользоваться - ничего не находится по теме)
Подписаться на:
Комментарии (Atom)