среда, 28 октября 2009 г.

Полезности при работе с LiveKD

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

1. Чтобы отладчик выводил логи, можно использовать команду .logopen
2. Чтобы просмотреть сервисы, на которых стоят хуки, надо просмотреть таблицу KiServiceTable, делается это командой dds KiServiceTable L130
3. Чтобы просмотреть информацию о процессах, сущестувет команда !process 0 0 - она выводит все процессы. такая же команда с параметром 1 выведет краткую инфу о процессе, которая будет включать DirBase, которая понадобится для перехода в контекст процесса ( .context ), также можно просмотреть PEB процесса, VAD etc.
Поговорим подробнее о просмотре дерева VAD
1. получим инфу, где находится Vad в процессе firefox.exe
0: kd> !process 8a3758a8 1
PROCESS 8a3758a8  SessionId: 0  Cid: 06c8    Peb: 7ffdf000  ParentCid: 0288
    DirBase: 0b3c81c0  ObjectTable: e3721438  HandleCount: 1257.
    Image: firefox.exe
    VadRoot 8a0cac38 Vads 613 Clone 0 Private 27256. Modified 19445. Locked 0.

Далее, используем команду !vad отладчика ядра:
0: kd> !vad 8a0cac38
VAD     level      start      end    commit
8a2540a8 (16)         10       10         1 Private      READWRITE
8a241b80 (17)         20       20         1 Private      READWRITE
8a23cc98 (15)         30      12f        52 Private      READWRITE
8a175f08 (17)        130      132         0 Mapped       READONLY
8a254600 (16)        140      141         0 Mapped       READONLY
8a393850 (18)        150      18f        64 Private      READWRITE
8a141910 (17)        190      19f         7 Private      READWRITE
89f98d98 (19)        1a0      1af         0 Mapped       READWRITE
8a144bc8 (18)        1b0      1c5         0 Mapped       READONLY
8a1d8fb0 (20)        1d0      210         0 Mapped       READONLY
8a1a3eb8 (19)        220      260         0 Mapped       READONLY
8a1dafd8 (21)        270      275         0 Mapped       READONLY
8a0e6910 (20)        280      2eb        96 Mapped  Exe  EXECUTE_WRITECOPY
8a2cb270 (21)        2f0      3d3       213 Mapped  Exe  EXECUTE_WRITECOPY
8a27e630 (22)        3e0      3f7        18 Mapped  Exe  EXECUTE_WRITECOPY
Обратим внимание на адреса с Execute_writecopy:


0: kd> !vad 8a0e6910  1

VAD @ 8a0e6910
  Start VPN          280  End VPN      2eb  Control Area  8a211ca0
  FirstProtoPte e1486460  LastPte fffffffc  Commit Charge       60 (96.)
  Secured.Flink        0  Blink          0  Banked/Extend        0
  File Offset          0
      ImageMap ViewShare EXECUTE_WRITECOPY


ControlArea  @ 8a211ca0
  Segment      e1486420  Flink      00000000  Blink        00000000
  Section Ref         0  Pfn Ref          6a  Mapped Views        1
  User Ref            1  WaitForDel        0  Flush Count         0
  File Object  8a36fd78  ModWriteCount     0  System Views        0

  Flags (90000a0) Image File HadUserReference Accessed


      File: \Program Files\Mozilla Firefox\sqlite3.dll

Segment @ e1486420
 ......................................................................
Reload command: .reload sqlite3.dll=280000,6c000


Как видим, там содержится модуль sqlite3.dll


Чтобы просмотреть, что именно содержится по адресу StartVPN есть замечательные команды , !dd!da, !du, !dc. Если вы заметили, то при еще при выводе !vad 8a0cac38, у нас выводятся StartVPN & EndVPN адреса. Так что можно смело писать !dc addr>*0x1000

Что самое интересное, командой dс 280*1000 невозможно просмотреть что находится по этому адресу, точнее выдается инфа, но не та. Для этого, нужно переключиться в комнтекст данного процесса, как пишет MSDN, юзаем команду .process 8a3758a8 , далее - смотрим dc 280*1000 и убеждаемся, что там находится на 1-й строчке сигнатура РЕ файла - 'MZ'.... вот для меня только вопрос.. как выйти из контекста ?  Об этом  и PEB - в следующей статье )

Комментариев нет:

Отправить комментарий