Berjalan daftar proses Windows 10 dengan WinDbg

  • Whatsapp
Berjalan daftar proses Windows 10 dengan WinDbg
Berjalan daftar proses Windows dengan WinDbg

News.nextcloud.asia

Posting ini didasarkan pada saya menyegarkan pengetahuan saya tentang proses di Windows dan terutama didasarkan pada

. Sementara posting itu berfokus pada Windows 32 bit, saya lebih melihat Windows 10 64 bit saya.

Untuk mulai berjalan di daftar proses Windows, kita harus memulai dengan terlebih dahulu mengaktifkan mode kernel debugging pada host kita. Untuk mengaktifkan debugging mode kernel pada Windows 10, saya melakukan hal berikut dalam prompt perintah “Administrator” (cmd.exe).

Setelah komputer di-boot ulang dan saya memulai WinDbg, hal berikutnya adalah melihat seperti apa struktur daftar tertaut ganda.

lkd> dt _LIST_ENTRY
nt!_LIST_ENTRY
   +0x000 Flink            : Ptr64 _LIST_ENTRY
   +0x008 Blink            : Ptr64 _LIST_ENTRY

Catatan: untuk mendapatkan bantuan tentang perintah yang saya gunakan, di bilah input jendela “perintah” WinDbg, jalankan “.hh” dan ini akan memunculkan layar bantuan. Setelah di sana, cari perintah Anda untuk mempelajari apa yang mereka lakukan.

Di atas, kita melihat bahwa daftar memiliki dua entri. Salah satunya adalah “Flink” dan yang kedua adalah “Blink”. Untuk memahami bagaimana ini digunakan, kita dapat melihat posting blog berikut tentang “Dasar-dasar Mode Kernel: Daftar Tertaut Windows” dari orang-orang di OSR Online.

Untuk mulai menjalankan daftar, kita perlu menemukan kepala daftar ini. Kita dapat melakukan ini dengan melihat “nt!PsActiveProcessHead”.

lkd> x nt!PsActiveProcessHead
fffff800`625ad3b0 nt!PsActiveProcessHead = <no type information>

Dari atas, kita melihat bahwa Active Process Head kita dapat ditemukan di alamat “fffff800`625ad3b0”.

Sekarang kita memiliki penunjuk ke daftar, mari kita lihat apa yang ditunjukkan Flink dan Blink:

lkd> dt _LIST_ENTRY fffff800`625ad3b0
nt!_LIST_ENTRY
 [ 0xffff998b`c62cb328 - 0xffff998b`e9ae9368 ]
   +0x000 Flink            : 0xffff998b`c62cb328 _LIST_ENTRY [ 0xffff998b`c636b328 - 0xfffff800`625ad3b0 ]
   +0x008 Blink            : 0xffff998b`e9ae9368 _LIST_ENTRY [ 0xfffff800`625ad3b0 - 0xffff998b`e636d368 ]

Baik! Dari atas kita melihat beberapa nilai yang dikembalikan untuk Flink dan Blink. Sekarang mari kita pelajari di mana dalam struktur EPROCESS _LIST_ENTRY untuk “ActiveProcessLinks” ditemukan. Daripada membuat daftar seluruh struktur EPROCESS, saya telah mengambil sedikit jalan pintas dengan menentukan opsi “-y” untuk mendapatkan bidang tertentu.

lkd> dt nt!_EPROCESS -y ActiveProcessLinks
   +0x2e8 ActiveProcessLinks : _LIST_ENTRY

Untuk membantu mendapatkan kejelasan lebih lanjut, mari kita pilih proses yang sedang berjalan. Untuk melihat daftar proses yang saat ini dikenal oleh Kernel, mari gunakan ekstensi “!process”.

lkd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS ffff998bc62cb040
    SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000
    DirBase: 001aa002  ObjectTable: ffffd605aca14040  HandleCount: 6914.
    Image: System
....

PROCESS ffff998bd5c3b080
    SessionId: 1  Cid: 1858    Peb: baa6893000  ParentCid: 13d8
    DirBase: 31d200002  ObjectTable: 00000000  HandleCount:   0.
    Image: notepad.exe

PROCESS ffff998bd6303080
    SessionId: 1  Cid: 234c    Peb: e97bb99000  ParentCid: 198c
    DirBase: 3dc400002  ObjectTable: 00000000  HandleCount:   0.
    Image: firefox.exe

....

Di atas, kita melihat snapshot dari beberapa proses yang dikembalikan dari penggunaan “!process 0 0” saya. Mari kita pilih “notepad.exe” di alamat “ffff998bd5c3b080”

lkd> !process 0xffff998bd5c3b080 0
PROCESS ffff998bd5c3b080
    SessionId: 1  Cid: 1858    Peb: baa6893000  ParentCid: 13d8
    DirBase: 31d200002  ObjectTable: 00000000  HandleCount:   0.
    Image: notepad.exe

Sekarang kita memiliki proses di alamat dan mengkonfirmasi itu adalah “notepad.exe”, sekarang mari kita lihat struktur EPROCESS-nya.

lkd> dt nt!_EPROCESS ffff998bd5c3b080 -y ActiveProcessLinks
   +0x2e8 ActiveProcessLinks : _LIST_ENTRY [ 0xffff998b`d6303368 - 0xffff998b`d3d2c868 ]

Dari atas, seperti yang kita lihat sebelumnya “ActiveProcessLinks” dapat ditemukan di +0x2e8. Oleh karena itu, untuk mengkonfirmasi jika kita mengurangi 0x2e8 dari ffff998bd5c3b080, kita akan sampai ke kepala struktur EPROCESS, mari kita uji teori itu.

lkd> dt nt!_EPROCESS ffff998bd5c3b080-0x2e8
   +0x000 Pcb              : _KPROCESS
   +0x2d8 ProcessLock      : _EX_PUSH_LOCK
   +0x2e0 UniqueProcessId  : 0xffffd605`b6216ea6 Void
   +0x2e8 ActiveProcessLinks : _LIST_ENTRY [ 0x00000001`00b60003 - 0xffff998b`d5c3b088 ]
   +0x2f8 RundownProtect   : _EX_RUNDOWN_REF
   +0x300 Flags2           : 0xd5c3b098
   +0x300 JobNotReallyActive : 0y0
   +0x300 AccountingFolded : 0y0
   +0x300 NewProcessReported : 0y0
.....

Dari atas kita melihat kita berada di puncak struktur EPROCESS. Mari kita lanjutkan untuk melihat bagaimana kita dapat memetakan proses lainnya. Untuk melakukannya, mari kita lakukan seperti Ami dan kembali ke sesuatu yang kita lakukan sebelumnya. Artinya, sekali lagi, cari tahu kepala daftar dengan melihat alamat “PSActiveProcessHead”.

lkd> x nt!PsActiveProcessHead
fffff800`625ad3b0 nt!PsActiveProcessHead = <no type information>

Sekali lagi, kita mendapatkan nilai yang kita miliki sebelumnya di “fffff800`625ad3b0”. Sekarang kita memiliki ini, mari kita lihat _LIST_ENTRY sekali lagi.

lkd> dt nt!_LIST_ENTRY fffff800`625ad3b0
 [ 0xffff998b`c62cb328 - 0xffff998b`ea802568 ]
   +0x000 Flink            : 0xffff998b`c62cb328 _LIST_ENTRY [ 0xffff998b`c636b328 - 0xfffff800`625ad3b0 ]
   +0x008 Blink            : 0xffff998b`ea802568 _LIST_ENTRY [ 0xfffff800`625ad3b0 - 0xffff998b`e7b2b868 ]

Sekali lagi, nilainya terlihat mirip dengan apa yang kita lihat sebelumnya. Mari gunakan nilai Flink “0xffff998b`c62cb328” untuk mulai menjalankan daftar. Ingat, kita perlu mengurangi “0x2e8” untuk sampai ke awal struktur EPROCESS berikutnya. Mari kita lakukan itu dan ambil “ImageFileName” dan “ActiveProcessLinks” dari proses selanjutnya.

lkd> dt nt!_EPROCESS 0xffff998b`c62cb328-0x2e8 -y ActiveProcessLinks.Flink -y ActiveProcessLinks.Blink -y ImageFileName
   +0x2e8 ActiveProcessLinks       :  [ 0xffff998b`c636b328 - 0xfffff800`625ad3b0 ]
      +0x000 Flink                    : 0xffff998b`c636b328 _LIST_ENTRY [ 0xffff998b`d0e97868 - 0xffff998b`c62cb328 ]
      +0x008 Blink                    : 0xfffff800`625ad3b0 _LIST_ENTRY [ 0xffff998b`c62cb328 - 0xffff998b`ea78e468 ]
   +0x450 ImageFileName            : [15]  "System"

Dari atas kita lihat proses pertama adalah “System”. Kami juga melihat “ActiveProcessLinks.Flink” itu adalah proses selanjutnya, itu di “0xffff998b`c636b328” sedangkan “ActiveProcessLinks.Blink” ada di “0xffffff800`625ad3b0”. Mari kita gunakan logika yang sama yang kita lakukan sebelumnya untuk mempelajari apa proses selanjutnya yang dilihat oleh Kernel setelah proses “Sistem”. Ingatlah untuk sekali lagi mengurangi “0x2e8” dari nilai “ActiveProcessLinks.Flink” yang Anda terima di atas.

lkd> dt nt!_EPROCESS 0xffff998b`c636b328-0x2e8 -y ActiveProcessLinks.Flink -y ActiveProcessLinks.Blink -y ImageFileName
   +0x2e8 ActiveProcessLinks       :  [ 0xffff998b`d0e97868 - 0xffff998b`c62cb328 ]
      +0x000 Flink                    : 0xffff998b`d0e97868 _LIST_ENTRY [ 0xffff998b`da09e868 - 0xffff998b`c636b328 ]
      +0x008 Blink                    : 0xffff998b`c62cb328 _LIST_ENTRY [ 0xffff998b`c636b328 - 0xfffff800`625ad3b0 ]
   +0x450 ImageFileName            : [15]  "Registry"

Di atas, kita melihat proses selanjutnya adalah “Registry”. Mari lakukan dua contoh lagi untuk melihat apakah pola ini berlanjut.

lkd> dt nt!_EPROCESS 0xffff998b`d0e97868-0x2e8 -y ActiveProcessLinks.Flink -y ActiveProcessLinks.Blink -y ImageFileName
   +0x2e8 ActiveProcessLinks       :  [ 0xffff998b`da09e868 - 0xffff998b`c636b328 ]
      +0x000 Flink                    : 0xffff998b`da09e868 _LIST_ENTRY [ 0xffff998b`d085b868 - 0xffff998b`d0e97868 ]
      +0x008 Blink                    : 0xffff998b`c636b328 _LIST_ENTRY [ 0xffff998b`d0e97868 - 0xffff998b`c62cb328 ]
   +0x450 ImageFileName            : [15]  "smss.exe"

… dan akhirnya untuk Flink …

lkd> dt nt!_EPROCESS 0xffff998b`da09e868-0x2e8 -y ActiveProcessLinks.Flink -y ActiveProcessLinks.Blink -y ImageFileName
   +0x2e8 ActiveProcessLinks       :  [ 0xffff998b`d085b868 - 0xffff998b`d0e97868 ]
      +0x000 Flink                    : 0xffff998b`d085b868 _LIST_ENTRY [ 0xffff998b`d0859868 - 0xffff998b`da09e868 ]
      +0x008 Blink                    : 0xffff998b`d0e97868 _LIST_ENTRY [ 0xffff998b`da09e868 - 0xffff998b`c636b328 ]
   +0x450 ImageFileName            : [15]  "csrss.exe"

Terlihat bagus sejauh ini. Mari kita verifikasi ini dengan melihat ekstensi “!process”.

kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS ffff998bc62cb040
    SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000
    DirBase: 001aa002  ObjectTable: ffffd605aca14040  HandleCount: 7052.
    Image: System

PROCESS ffff998bc636b040
    SessionId: none  Cid: 0060    Peb: 00000000  ParentCid: 0004
    DirBase: 1e0c00002  ObjectTable: ffffd605aca28c00  HandleCount:   0.
    Image: Registry

PROCESS ffff998bd0e97580
    SessionId: none  Cid: 01d4    Peb: 65129c2000  ParentCid: 0004
    DirBase: 296d10002  ObjectTable: ffffd605af644540  HandleCount:  52.
    Image: smss.exe

PROCESS ffff998bda09e580
    SessionId: 0  Cid: 02a8    Peb: 705bc80000  ParentCid: 028c
    DirBase: 199900002  ObjectTable: ffffd605ae720c00  HandleCount: 756.
    Image: csrss.exe

PROCESS ffff998bd085b580
    SessionId: 0  Cid: 0304    Peb: 3aa038000  ParentCid: 028c
    DirBase: 45bc00002  ObjectTable: ffffd605af212380  HandleCount: 155.
    Image: wininit.exe

PROCESS ffff998bd0859580
    SessionId: 1  Cid: 030c    Peb: 5e45a62000  ParentCid: 02f8
    DirBase: 334200002  ObjectTable: ffffd605aea12680  HandleCount: 1213.
    Image: csrss.exe

PROCESS ffff998bda3ea480
    SessionId: 0  Cid: 0354    Peb: a3794a6000  ParentCid: 0304
    DirBase: 19a00002  ObjectTable: ffffd605afc25e80  HandleCount: 847.
    Image: services.exe

PROCESS ffff998bd85e8580
    SessionId: 0  Cid: 0368    Peb: 6c5042e000  ParentCid: 0304
    DirBase: 107a00002  ObjectTable: ffffd605afd3b8c0  HandleCount: 1749.
    Image: lsass.exe

PROCESS ffff998bd8e25080
    SessionId: 1  Cid: 03a4    Peb: 35e2b86000  ParentCid: 02f8
    DirBase: 46a800002  ObjectTable: ffffd605b091f600  HandleCount: 256.
    Image: winlogon.exe

....

PROCESS ffff998bea2e4580
    SessionId: 1  Cid: 26cc    Peb: 1002d1000  ParentCid: 0f34
    DirBase: 4a700002  ObjectTable: ffffd605b9b0a040  HandleCount: 142.
    Image: SystemIdleCheck.exe

PROCESS ffff998bf5ea0380
    SessionId: 0  Cid: 27ac    Peb: ce9260a000  ParentCid: 0354
    DirBase: 61900002  ObjectTable: ffffd605c637b680  HandleCount: 192.
    Image: WmiApSrv.exe

Cuplikan di atas terlihat cocok dengan apa yang telah kita pelajari sejauh ini. Saya percaya jika kita melanjutkan pola ini, kita akan dapat berjalan di atas pohon dan mengidentifikasi semua proses melalui Flink. Namun, kami tidak memverifikasi Blink. Mari kita uji beberapa di antaranya sebelum kita melanjutkan.

Percaya atau tidak, itu sama seperti yang kami lakukan di atas. Satu-satunya perbedaan adalah alih-alih menggunakan alamat di Flink, kami malah menggunakan alamat di Blink.

Mari kita lihat proses “Registry” untuk melihat apa yang ditunjuknya melalui Blink-nya.

lkd> !process ffff998bc636b040 0
PROCESS ffff998bc636b040
    SessionId: none  Cid: 0060    Peb: 00000000  ParentCid: 0004
    DirBase: 1e0c00002  ObjectTable: ffffd605aca28c00  HandleCount:   0.
    Image: Registry

Mari kita lihat “ActiveProcessLinks.Flink” dan “ActiveProcessLinks.Blink” -nya.

lkd> dt nt!_EPROCESS ffff998bc636b040 -y ActiveProcessLinks.Flink -y ActiveProcessLinks.Blink -y ImageFileName
   +0x2e8 ActiveProcessLinks       :  [ 0xffff998b`d0e97868 - 0xffff998b`c62cb328 ]
      +0x000 Flink                    : 0xffff998b`d0e97868 _LIST_ENTRY [ 0xffff998b`da09e868 - 0xffff998b`c636b328 ]
      +0x008 Blink                    : 0xffff998b`c62cb328 _LIST_ENTRY [ 0xffff998b`c636b328 - 0xfffff800`625ad3b0 ]
   +0x450 ImageFileName            : [15]  "Registry"

Jika sekarang kita melihat nilai Blink untuk melihat di mana ia menunjuk, kita melihat bahwa kita mendapatkan:

lkd> dt nt!_EPROCESS 0xffff998b`c62cb328-0x2e8 -y ActiveProcessLinks.Flink -y ActiveProcessLinks.Blink -y ImageFileName
   +0x2e8 ActiveProcessLinks       :  [ 0xffff998b`c636b328 - 0xfffff800`625ad3b0 ]
      +0x000 Flink                    : 0xffff998b`c636b328 _LIST_ENTRY [ 0xffff998b`d0e97868 - 0xffff998b`c62cb328 ]
      +0x008 Blink                    : 0xfffff800`625ad3b0 _LIST_ENTRY [ 0xffff998b`c62cb328 - 0xffff998b`ea5a35a8 ]
   +0x450 ImageFileName            : [15]  "System"

Bagus!!! Seperti yang diharapkan, “Registry” Blink menunjuk ke proses sebelumnya dalam daftar yaitu “System”. Mari kita lihat satu lagi. Sekali lagi, mengingat apa yang kita lihat sebelumnya, mari kita lihat proses “smss.exe” untuk melihat di mana titik itu. Jika semua berjalan sesuai rencana, Blink-nya harus menunjuk ke “Registry”. Mari kita lihat apakah ini benar.

lkd> !process ffff998bd0e97580 0
PROCESS ffff998bd0e97580
    SessionId: none  Cid: 01d4    Peb: 65129c2000  ParentCid: 0004
    DirBase: 296d10002  ObjectTable: ffffd605af644540  HandleCount:  52.
    Image: smss.exe

Mari kita lihat “ActiveProcessLinks.Flink” dan “ActiveProcessLinks.Blink” -nya.

lkd> dt nt!_EPROCESS ffff998bd0e97580 -y ActiveProcessLinks.Flink -y ActiveProcessLinks.Blink -y ImageFileName
   +0x2e8 ActiveProcessLinks       :  [ 0xffff998b`da09e868 - 0xffff998b`c636b328 ]
      +0x000 Flink                    : 0xffff998b`da09e868 _LIST_ENTRY [ 0xffff998b`d085b868 - 0xffff998b`d0e97868 ]
      +0x008 Blink                    : 0xffff998b`c636b328 _LIST_ENTRY [ 0xffff998b`d0e97868 - 0xffff998b`c62cb328 ]
   +0x450 ImageFileName            : [15]  "smss.exe"

Sekarang mari kita uji nilai Blink dari “0xffff998b`c636b328” untuk melihat di mana ia menunjuk.

lkd> dt nt!_EPROCESS 0xffff998b`c636b328-0x2e8 -y ActiveProcessLinks.Flink -y ActiveProcessLinks.Blink -y ImageFileName
   +0x2e8 ActiveProcessLinks       :  [ 0xffff998b`d0e97868 - 0xffff998b`c62cb328 ]
      +0x000 Flink                    : 0xffff998b`d0e97868 _LIST_ENTRY [ 0xffff998b`da09e868 - 0xffff998b`c636b328 ]
      +0x008 Blink                    : 0xffff998b`c62cb328 _LIST_ENTRY [ 0xffff998b`c636b328 - 0xfffff800`625ad3b0 ]
   +0x450 ImageFileName            : [15]  "Registry"

Bagus!! Sangat bagus!!! Jadi kami mengonfirmasi bahwa Flink dan Blink masing-masing menunjuk ke struktur proses selanjutnya dan struktur sebelumnya.

Sekarang untuk gambar di bawah ini. Gambar di bawah ini merupakan snapshot dari apa yang kita lihat di atas. Namun, saya tidak memetakan semua proses tetapi konsepnya tetap sama.

Yah harap Anda menikmati posting ini.

Seperti biasa, tinggalkan komentar jika menurut Anda saya melewatkan sesuatu.

Referensi:
http://jumpdollar.blogspot.com/2014/09/windbg-walking-windows-linked-lists.html
http://www.osronline.com/article.cfm?article=499
https://www.blackhat.com/presentations/win-usa-04/bh-win-04-butler.pdf

Pos terkait

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.