понедельник, 17 мая 2021 г.

Как найти wpf callout's без анализа кода в дизассемблере?

Для начала пишем тестовый драйвер, который устанавливает пару callout's (через FwpsCalloutRegister0).

Далее, просто перечисляем все теги памяти, ищем нужный(WFP callouts):

!poolused

...
WfpC        12        74384          0            0    WFP callouts , Binary: netio.sys
...

!poolfind WfpC


fffffa801a148000 : tag WfpC, size   0x12000, Nonpaged pool

Затем выводим содержимое памяти:

dqs fffffa801a148000 L1000 (или dqs fffffa801a148000 L0x12000, но тут уже нужно логировать в log file)

kd> dqs fffffa801a148000 L1000
fffffa80`1a148000  00000000`00000000
fffffa80`1a148008  00000000`00000000
fffffa80`1a148010  00000000`00000000
fffffa80`1a148018  00000000`00000000
fffffa80`1a148020  00000000`00000000
fffffa80`1a148028  00000000`00000000
fffffa80`1a148030  00000000`00000000
fffffa80`1a148038  00000000`00000000
fffffa80`1a148040  00000000`00000000
fffffa80`1a148048  00000001`00000002
fffffa80`1a148050  00000000`00000000
fffffa80`1a148058  fffff880`01ebac40 tcpip!IPSecInboundTransportFilterCalloutClassifyV4
fffffa80`1a148060  fffff880`01dab624 tcpip!IPSecAleConnectCalloutNotify+0x2
fffffa80`1a148068  00000000`00000000
...
fffffa80`1a14c808  00000000`00000000
fffffa80`1a14c810  fffff880`05d0d700 mpsdrv!MpsQueryUserCallout
fffffa80`1a14c818  fffff880`05d0d8e0 mpsdrv!MpsDummyFilterNotify
fffffa80`1a14c820  00000000`00000000
...
fffffa80`1a14ce38  00000000`00000000
fffffa80`1a14ce40  fffff880`05dde19c Ndu!NduFlowEstablishedClassify
fffffa80`1a14ce48  fffff880`05dde810 Ndu!NduCalloutNotify
fffffa80`1a14ce50  00000000`00000000
...
fffffa80`1a14d078  00000000`00000000
fffffa80`1a14d080  fffff880`074d4000 test+0x1000 <== а вот и callout's тестового драйвера
fffffa80`1a14d088  fffff880`074d4500 test+0x1500
fffffa80`1a14d090  00000000`00000000

И не нужно мучатся, в дизасме выискивать смещения на эти структуры, как это делается в некоторых статьях.
Тем более, что на разных версиях ОС эти смещения указывают на совсем другое, и все эти описанные сакральные знания становятся бесполезными. А теги памяти с очень большой вероятностью меняться не будут.