что такое nt! PsActiveProcessHead? - PullRequest
       37

что такое nt! PsActiveProcessHead?

0 голосов
/ 11 февраля 2019

Справочная информация. При использовании волатильности переменная «PsActiveProcessHead» может быть найдена путем сканирования «KDBG» (мертвой системы) или в Windows Crash Dump (опять же, мертвая система) в _DMP_HEADER.

В действующей системе адрес этого символа можно найти по (lkd >> x nt! PsActiveProcessHead)

Вопрос: К какому объекту / структуре ядра Windows относится переменная «nt! PsActiveProcessHead»/относится к?(на какой объект / структуру указывает этот символ?)

Например, «ActiveProcessLinks», который также является структурой «_LIST_ENTRY» (такой же, как «ActiveProcessHead»), принадлежит объекту _EPROCESS.Есть ли такой объект для "ActiveProcessHead"?

Спасибо

1 Ответ

0 голосов
/ 11 февраля 2019

Да, он также указывает на двусвязный список (_LIST_ENTRY), а точнее на _EPROCESS.ActiveProcessLinks.

Проверка двусвязного списка, на который указывает nt!PsActiveProcessHead:

0: kd> dt nt!_list_entry poi(nt!PsActiveProcessHead)
 [ 0xffffc582`ca5c3328 - 0xfffff804`40c10680 ]
   +0x000 Flink            : 0xffffc582`ca5c3328 _LIST_ENTRY [ 0xffffc582`d11d1328 - 0xffffc582`ca4b15e8 ]
   +0x008 Blink            : 0xfffff804`40c10680 _LIST_ENTRY [ 0xffffc582`ca4b15e8 - 0xffffc582`edada368 ]

Следующая запись:

0: kd> dt nt!_list_entry poi(0xffffc582`ca5c3328)
 [ 0xffffc582`d0023428 - 0xffffc582`ca5c3328 ]
   +0x000 Flink            : 0xffffc582`d0023428 _LIST_ENTRY [ 0xffffc582`d54243a8 - 0xffffc582`d11d1328 ]
   +0x008 Blink            : 0xffffc582`ca5c3328 _LIST_ENTRY [ 0xffffc582`d11d1328 - 0xffffc582`ca4b15e8 ]

Получение смещения, при котором ActiveProcessLink находится в структуре _EPROCESS:

0: kd> ? @@c++(#FIELD_OFFSET(nt!_eprocess, ActiveProcessLinks))
Evaluate expression: 744 = 00000000`000002e8

Просто подтверждение с помощью первых двух миганий Iиметь в вышеприведенных выходных данных (примечание: мы удаляем смещение ActiveProcessLinks из имеющегося у нас адреса, а затем выгружаем ImageFileName из структуры EPROCESS).Это просто доказывает, что он действительно указывает на ActiveProcessLinks в _EPROCESS:

0: kd> dt nt!_eprocess 0xffffc582`ca5c3328-@@c++(#FIELD_OFFSET(nt!_eprocess , ActiveProcessLinks)) ImageFileName
   +0x450 ImageFileName : [15]  "Registry"

0: kd> dt nt!_eprocess 0xffffc582`d0023428-@@c++(#FIELD_OFFSET(nt!_eprocess , ActiveProcessLinks)) ImageFileName
   +0x450 ImageFileName : [15]  "csrss.exe"

Сброс всего списка:

0: kd> !list "-t nt!_eprocess.ActiveProcessLinks.Flink -e -x \"dt nt!_eprocess ImageFileName\"(poi(nt!PsActiveProcessHead) - @@c++(#FIELD_OFFSET(nt!_eprocess, ActiveProcessLinks)))"

dt nt!_EPROCESS ImageFileName 0xffffc582ca4b1300
   +0x450 ImageFileName : [15]  "System"

dt nt!_EPROCESS ImageFileName 0xffffc582ca5c3040
   +0x450 ImageFileName : [15]  "Registry"

dt nt!_EPROCESS ImageFileName 0xffffc582d11d1040
   +0x450 ImageFileName : [15]  "smss.exe"

dt nt!_EPROCESS ImageFileName 0xffffc582d0023140
   +0x450 ImageFileName : [15]  "csrss.exe"

 [...snip....]

Так что в основном это должен быть списоктекущий активный процесс.Указывает на двусвязный список в _EPROCESS.ActiveProcessLinks.

...