Mengenal Teknik Keylogger

Waktu Membaca: 2 menit

 

Di tahun 2019 ini, malware berupa keylogger masih banyak ditemukan, dilihat melalui pencarian dengan tag #keylogger pada situs virustotal.com, banyak user virustotal yang mengupload sample keylogger. Meksipun definisi keylogger bersifat netral, yaitu selain berupa malware,bisa juga berupa program yang memang mencatat ketikkan keyboard atau keystroke untuk parental control dan semacamnya tentu kita perlu mengetahui lebih dalam tentang keylogger.

Pada sistem operasi Windows, ada 2 teknik yang paling banyak digunakan para pembuat keylogger yaitu mendapatkan informasi bahwa suatu tombol pada keyboard telah ditekan dan menggunakan hook. Kedua tehnik tersebut memanfaat fungsi fungsi Windows API (atau sering disebut WINAPI) sebagai berikut :

GetAsyncKeyState

Syntax (dalam bahasa C++):

SHORT WINAPI GetAsyncKeyState(
  _In_ int vKey
);

Fungsi GetAsyncKeyState yang berada pada file user32.dll atau library user32.lib ini adalah fungsi WINAPI yang paling sering digunakan oleh para pembuat keylogger. Fungsi GetAsyncKeyState mempunyai parameter berupa vKey atau Virtual-key code bertipe integer. Virtual key atau vkey bisa berupa tombol standar seperti A-Z, angka 0-9 sampai tombol up, tombol down, tombol capslock, tombol enter atau tombol shift dan lainnya sehingga suatu keylogger dapat mencatat dengan sempurna semua ketikkan korbannya dan tentu suatu password yang diinput dapat tercatat sama persis, meskipun beberapa karakter diberi capslock atau diberi tambahan karakter berupa underscore dan lainnya.

Beberapa contoh virtual-key code yaitu : VK_SHIFT (dibagi menjadi VK_LSHIFT dan VK_RSHIFT untuk membedakan apakah tombol shift sebelah kanan atau kiri yang ditekan), VK_NUMPADx (dimana nilai x adalah angka 0 -9) ,VK_CAPITAL (tombol capslock), VK_Fx (x adalah angka 1-24) dan masih banyak lainnya.

GetKeyState

Syntax (dalam bahasa C++) :

SHORT WINAPI GetKeyState(
  _In_ int nVirtKey
);

Fungsi WINAPI yang berada pada file user32.dll atau library user32.lib ini sama halnya seperti GetAsyncKeyState. GetKeyState menghasilkan atau mengembalikan status dari suatu virtual key code. Perbedaan dengan GetAsyncKeyState, GetKeyState hanya mengambil informasi status dari 1 atau individual key,sementara GetAsyncKeyState mengambil status dari key yang saat ini sedang ditekan secara asynchronous atau real time.

GetKeyboardState

Syntax (dalam bahasa C++) :

BOOL WINAPI GetKeyboardState(
  _Out_ PBYTE lpKeyState
);

Fungsi WINAPI yang berada pada file user32.dll atau library user32.lib ini mengembalikan return bertipe Boolean. Jika return bernilai 1 maka suatu tombol atau key telah ditekan, GetKeyboardState juga dapat menggunakan virtual-key code pada parameter lpKeyState sama halnya seperti GetKeyState maupun GetAsyncKeyState .

SetWindowsHookEx

Syntax (dalam bahasa C++) :

HHOOK WINAPI SetWindowsHookEx(
  _In_ int       idHook,
  _In_ HOOKPROC  lpfn,
  _In_ HINSTANCE hMod,
  _In_ DWORD     dwThreadId
);

Pembuat keylogger menggunakan tehnik hook dengan fungsi WINAPI SetWindowsHookEx dengan parameter id bernama “WH_KEYBOARD_LL”. Dengan parameter WH_KEYBOARD_LL tersebut, maka keylogger akan menginstal suatu hook prosedur yang akan meng-intercept notifikasi bahwa suatu tombol telah ditekan secara low-level.Tehnik ini banyak dipakai pada keylogger saat ini, karena mampu melakukan hook, maka kemampuan keylogger ditambah dengan  “menyembunyikan dirinya sendiri” (disebut stealth atau rootkit) dari antivirus atau user dengan bersembunyi kedalam usermode atau kernel mode sehingga tidak terdeteksi di memory.

Tehnik hooking adalah tehnik yang banyak digunakan oleh bermacam malware, begitu juga dengan keylogger, meskipun banyak juga keylogger yang masih menggunakan fungsi GetAsyncKeyState, terlepas dari bahasa apapun malware tersebut dibuat apakah Visual Basic, Delphi, C++ dan lainnya.

Semoga Bermanfaat

Artikel ini dibuat oleh Yudha Tri Putra sebagai penulis artikel, diperbolehkan menyalin artikel ini secara utuh tanpa mengubah atau menambah isi artikel.

Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *