Как получить адрес SSDT - PullRequest
       42

Как получить адрес SSDT

0 голосов
/ 27 апреля 2018

Я пытаюсь написать программу на c, которая перечисляет адреса SSDT, поэтому, если какая-то функция подключена, я вижу другой адрес. Как я могу получить адрес SSDT? Я использовал WinDbg и перечислил с KeServiceDescriptorTable, теперь, как я получаю этот адрес в c. Я искал в Интернете это и увидел программы, которые использовали NtQuerySystemInformation с SystemModuleInformation. Я не нашел никакой документации для этих программ или статей или объяснений для этого.

Спасибо за помощь

1 Ответ

0 голосов
/ 21 июня 2018

[Ниже для режима ядра].

В 32-разрядных средах KeServiceDescriptorTable экспортируется NTOSKRNL, и, таким образом, вы можете получить адрес с помощью MmGetSystemRoutineAddress .

Однако в 64-битных средах вам нужно найти KeServiceDescriptorTable самостоятельно при сканировании памяти, поскольку NTOSKRNL не будет экспортироваться. Это довольно просто, когда вы выяснили, где используется таблица в ядре Windows, проверьте процедуры, связанные с внутренним системным вызовом, в NTOSKRNL.

Примечание: вам потребуется сдвиг байтов при извлечении адреса в 64-битной среде.

Теперь, когда у вас есть адреса, вы можете выполнить сравнение, чтобы определить, находятся ли адреса в определенном диапазоне в памяти, и попытаться определить, является ли адрес неправильным (например, был ли он манипулирован). Вы также можете выполнить экспертизу операндов в памяти для углубленного анализа.

...