Senin, 19 November 2018

Melacak jendela "cmd.exe" yang muncul sekejap

Pernahkah anda mengalami kejadian dimana saat anda menggunakan komputer tiba-tiba muncul jendela "cmd.exe" dalam waktu yang singkat hingga menyulitkan anda untuk mengetahui proses dari program apa itu? Artikel ini akan membahas teknik melacak proses yang muncul sesaat itu. Tapi sebelumnya perlu diluruskan terlebih dahulu kesalahpahaman banyak pengguna Windows tentang jendela "cmd.exe".

Ada dua jenis program yang dijalankan pengguna Windows: program GUI (Graphical User Interface) dan program CUI (Character User Interface atau Console User Interface). Sesuai namanya, perbedaan antara keduanya terletak pada user interface-nya: Program GUI berbasis grafis, sedangkan program CUI berbasis teks. Karena berbasis grafis, program GUI dapat membuat sendiri jendela (window) sebagai user interface-nya; sedangkan program CUI membutuhkan bantuan jendela dari sistem operasi untuk menampilkan user interface-nya. Jendela yang berwarna hitam ini bernama jendela konsol (console window). Sebelum versi Windows 7, proses dari sistem yang bertugas menyediakan jendela konsol adalah csrss.exe. Karena alasan keamanan, sejak Windows 7 tugas untuk menyediakan jendela konsol dialihkan ke proses conhost.exe (Console Window Host).

Banyak pengguna Windows yang menganggap jendela konsol yang berwarna hitam itu adalah milik dari program cmd.exe atau Command Prompt, atau berasumsi bahwa program CUI hanya dapat dijalankan melalui Command Prompt. Dengan menjalankan eksperimen berikut ini anda dapat membuktikan bahwa anggapan itu salah:
  1. Jalankan Command Prompt
  2. Di dalam Command Prompt jalankan perintah berikut ini dan biarkan berjalan terus:
    ping localhost -t
    
  3. Buka dialog Run melalui shortcut key ⊞ Win + R
  4. Copy dan paste perintah di atas ke dialog Run, dan klik OK.
  5. Jalankan Process Explorer.

Untuk versi Windows 8 ke atas, process tree yang dihasilkan akan terlihat seperti gambar di atas. Pada process tree dari explorer, proses PING yang dijalankan melalui dialog Run tidak membutuhkan proses cmd.exe (Command Prompt). Ini membuktikan bahwa program CUI tidak tergantung pada Command Prompt. Namun kedua proses PING tersebut sama-sama menggunakan proses conhost.exe. Proses conhost.exe inilah yang menyediakan jendela konsol untuk proses dari program CUI.

Ada perbedaan mekanisme conhost.exe antara versi Windows 7 dengan Window 8 ke atas. Pada Windows 8 proses conhost.exe selalu menjadi child process dari program CUI yang menggunakan jendela konsolnya (kecuali bila program CUI tersebut menggunakan jendela konsol yang sama dengan parent process-nya seperti pada contoh di atas untuk proses ping.exe yang dijalankan oleh cmd.exe). Pada Windows 7 semua proses conhost.exe dijalankan oleh proses csrss.exe. Untuk mengetahui proses CUI apa yang menggunakan jendela konsol dari proses conhost.exe, anda dapat melihat PID dari process handle yang dimiliki proses conhost.exe. Seperti pada contoh gambar di bawah ini, proses yang menggunakan jendela konsol dari proses conhost.exe yang di-highlight adalah proses ping.exe dengan PID 860.


Sekarang setelah anda memahami bahwa jendela konsol itu berasal dari proses conhost.exe, maka untuk melacak proses dari jendela hitam yang muncul sekejap kita harus memonitor setiap proses conhost.exe yang dijalankan. Untuk melakukan itu kita dapat menggunakan program Process Monitor dari Sysinternals yang mempunyai kemampuan untuk memonitor setiap proses yang dijalankan di komputer.

Sebelum melakukan sesi monitoring, kita harus mengatur settingan Process Monitor terlebih dahulu. Ikuti langkah-langkah pengaturan Process Monitor pada artikel ini. Pada artikel itu tipe operasi/event class yang dipilih adalah Network, tapi karena kali ini kita akan melacak proses, pilih event class Process and Thread saja, sehingga tampilan Process Monitor seperti gambar di bawah ini (yang diberi kotak berwarna hitam). Setelah itu masuk ke menu Options > Select Columns, dan pada bagian Process Management beri tanda centang pada "Parent PID", kemudian klik "OK".


Satu lagi yang perlu diset untuk mempermudah pelacakan adalah pengaturan filter: klik icon "Filter" (yang diberi kotak warna merah pada gambar di atas) atau tekan Ctrl + L untuk menampilkan dialog Filter. Ada 3 operasi yang kita butuhkan dalam pelacakan proses konsol yang muncul sesaat: Process Create, Process Start, dan Process Exit. Pilih kondisi "Operation" dan "is" (yang diberi kotak hijau pada gambar di bawah), kemudian pilih salah satu dari ketiga operasi yang disebutkan sebelumnya pada drop-down list (yang diberi kotak biru), setelah itu pilih "Include" (yang diberi kotak oranye), dan klik Add (yang diberi kotak hitam). Lakukan langkah-langkah yang sama untuk kedua operasi lainnya sehingga ketiga operasi itu bisa terlihat pada list di bawahnya (yang diberi kotak warna merah). Setelah itu klik "OK".


Sekarang kita bisa memulai sesi monitoring. Klik tombol capture atau tekan Ctrl + E untuk memulainya dan biarkan Process Monitor berjalan terus di background sampai proses konsol yang muncul sesaat itu dijalankan. Usahakan agar anda tidak menjalankan program CUI selama sesi monitoring agar anda tidak melihat banyak proses conhost.exe yang dicatat oleh Process Monitor sehingga menyulitkan anda untuk menentukan proses konsol mana yang muncul sesaat.

Setelah anda melihat jendela konsol muncul sekejap, klik tombol capture atau tekan Ctrl + E untuk menghentikan monitoring. Perhatikan pada baris-baris terakhir yang mempunyai Process Name yang berisi conhost.exe. Sebagai contoh, seperti gambar di bawah ini baris-baris tersebut pada Windows 8.


Untuk memastikan bahwa jendela konsol dari proses ini yang muncul sekejap, perhatikan selisih waktu antara operasi Process Start dan Process Exit dari proses conhost.exe (yang diberi kotak berwarna biru). Seperti yang dapat anda lihat selisihnya kurang dari satu detik. Ini membuktikan bahwa proses conhost.exe tersebut yang muncul sesaat.

Seperti yang sudah dijelaskan sebelumnya, pada Windows versi 8 ke atas, proses conhost.exe selalu menjadi child process dari program CUI yang menggunakan jendela konsolnya. Dengan melihat Parent PID dari proses conhost.exe pada gambar di atas, kita dapat memastikan bahwa parent process dari proses conhost tersebut adalah PING.EXE. Ini menunjukkan bahwa dalam contoh ini program CUI yang muncul sesaat itu adalah ping.exe (anda juga dapat memastikannya dengan melihat selisih waktu antara operasi Process Start dan Process Exit dari proses PING.EXE).

Sekarang kita telah mengetahui program CUI apa yang muncul sekejap, tapi bukan program itu yang kita inginkan. Yang kita ingin tahu adalah mengapa program itu dijalankan secara otomatis. Untuk mengetahui ini, kita harus melacak proses apa yang menjalankan program CUI itu. Dari gambar di atas, dengan melihat Parent PID dari proses PING.EXE kita dapat mengetahui bahwa proses yang menjalankannya adalah svchost.exe (untuk contoh kasus ini, penyebabnya adalah adanya task untuk menjalankan PING.EXE pada Scheduled Tasks).

Untuk Windows 7 baris-baris event yang dihasilkan Process Monitor berbeda dengan Windows 8 karena seperti yang telah dijelaskan sebelumnya, yang menjalankan proses conhost.exe adalah csrss.exe. Kita tidak bisa menentukan program CUI yang menggunakan jendela konsol dari proses conhost dengan menggunakan Parent PID yang dimiliki proses conhost karena PID tersebut adalah milik dari proses csrss.exe, seperti yang dapat anda lihat pada gambar di bawah ini.


Tapi meskipun tidak bisa menggunakan cara yang sama, kita tetap dapat memastikan proses conhost yang muncul sesaat dengan memperhatikan selisih waktu antara operasi Process Start dan Process Exit yang dilakukannya. Dan karena Process Monitor mencatat event secara kronologis, kita juga dapat memastikan program CUI yang menggunakan jendela konsol dari proses conhost tersebut dengan memperhatikan operasi Process Start dan Process Exit milik proses lain yang letak barisnya berdekatan dengan baris dari proses conhost.exe. Seperti yang anda lihat pada gambar di atas, baris-baris operasi Process Start dan Process Exit yang dilakukan proses PING.EXE letaknya berdekatan dengan proses conhost tersebut. Anda juga dapat melihat bahwa proses ping dan conhost dijalankan pada waktu yang hampir bersamaan.

Setelah kita mengetahui proses dari program CUI yang menggunakan jendela konsol yang muncul sesaat, dengan menggunakan ParentPID dari proses tersebut kita bisa mengetahui proses apa yang menjalankannya. Seperti yang dapat anda lihat pada gambar di atas, proses tersebut adalah taskeng.exe (dengan menggunakan contoh kasus yang sama, proses yang menjalankan task dari Scheduled Taks pada Windows 7 adalah taskeng.exe, bukan svchost.exe seperti pada Windows 8).

Demikian tutorial troubleshooting masalah jendela konsol yang muncul sesaat dengan menggunakan Process Monitor. Semoga bermanfaat.

Tidak ada komentar:

Posting Komentar