Windows Keylogger逆向分析

Xtutlab
4 min readOct 9, 2020

--

在惡意程式當中,最常見的行為是木馬/後門,接下來就是鍵盤側錄(Keylogger),因此我們這篇就要來研究它是如何運作的,雖然在技術上並沒有特別困難,不過想要入門惡意程式逆向分析的同學,會是不錯的選擇。

在分析Keylogger之前,我們先了解一下它是利用哪個API來記錄我們的按鍵。

SetWindowsHookEx是Windows提供給開發人員來Hook鍵盤、滑鼠、視窗訊息等等事件,因此Keylogger最常使用這個API,其中第一個參數(idHook)是要Hook哪種事件的行為,第二個參數(lpfn)是觸發此事件需要處理的函式(Callback Function)位址,第三個參數(hmod)是Current Module Handle,第四個參數(dwThreadID)是要Hook的Thread id,如果第四個參數是0,代表全局(桌面上運作的所有程式)Hook。

鍵盤事件有分WH_KEYBOARD(數值為0x2)和WH_KEYBOARD_LL(數值為0xD),WH_KEYBOARD僅Hook視窗程式在調用GetMessage或PeekMessage時,按下鍵盤的按鍵,才會進入處理函式,不過WH_KEYBOARD_LL是在驅動層來過濾按下的按鍵,所以它可以更完整的監控所按下的按鍵。

一、SetWindowsHookEx分析

我們可以在SetWindowsHookEx下中斷點,並且分析它的參數,第一個參數它是使用0xD(WH_KEYBOARD_LL),也就是驅動層鍵盤的Hook,第二個參數是0xB21118,這個位址是處理鍵盤按鍵的函式(Callback Function),接下來才會進一步分析此函式的運作行為,第四個參數是0,代表是桌面上的所有程式都會被監控。

二、Callback Function分析

我們先來了解一下此函式的參數,第一個參數(nCode)是觸發的事件是屬於哪種行為,鍵盤是HC_ACTION(0x0),第二個參數(wParam)是紀錄鍵盤是屬於按下(WM_KEYDOWN)還是彈起(WM_KEYUP),第三個參數(lParam)是存取鍵盤相關的結構資訊(KBDLLHOOKSTRUCT),其中vkCode是按鍵的資訊。

[ebp-10C]是存放lParam的位址,並移動到eax,所以[eax]裡面就是vkCode(按下的按鍵資訊),接下來通常它會一系列的判斷是否有按下Shift或Enter等等的特殊按鍵,不過有時候會在輸出結果(可能利用WriteFile寫入到檔案)下中斷點,直接分析它的輸出結果。

利用GetForegroundWindow和GetWindowTextA來獲取當前按下按鍵的視窗名稱,這樣就能進一步知道它是從哪隻程式按下此按鍵。

三、輸出結果

從輸出結果判斷它會記錄當前按下的按鍵時間、當前視窗名稱和按鍵資訊,如果有使用Enter或其他特殊按鍵會特別標記它([ENTER])。

更多技術文章

https://xtutlab.blogspot.com

https://www.facebook.com/Xtutlab-%E6%95%99%E5%AD%B8%E5%AF%A6%E9%A9%97%E5%AE%A4-345668095840741/

--

--

Xtutlab
Xtutlab

Written by Xtutlab

大家好,我是Shin,曾任職於行政院國家資通安全會報技術服務中心(NCCST),參與106金盾獎決賽出題以及在HoneyCon 2015、2016擔任Workshop講師,熱愛駭客技術、程式設計以及電腦科學,並且會不定期發表駭客技術教學文章,希望大家會喜歡!

No responses yet