Posted on 2010-07-02 15:18
S.l.e!ep.¢% 閱讀(597)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
RootKit
??? 1:當(dāng)編輯框獲得焦點(diǎn)時(shí),定時(shí)隨機(jī)發(fā)送鍵盤(pán)消息,當(dāng)需要獲取輸入的真實(shí)密碼時(shí),發(fā)送WM_GETTEXT消息.由于隨機(jī)發(fā)送的鍵盤(pán)消息是我們自己發(fā)送的,所以我們可以將其與用戶輸入的鍵盤(pán)消息分開(kāi).
?? ?2:在Windows下加載一個(gè)模塊時(shí)使用的API是LoadLibrary函數(shù),這個(gè)函數(shù)內(nèi)部又會(huì)調(diào)用LoadLibraryEx函數(shù),windows底層是UINCODE的,所以應(yīng)該調(diào)用的是LoadLibraryExW。如果我們寫(xiě)的正常程序,如果調(diào)用了LoadLibrary那摩LoadLibraryExW函數(shù)的返回地址應(yīng)該位于Kernel32.dll中,或者我們就是直接調(diào)用了LoadLibraryExW那摩返回地址應(yīng)該位于我們的程序中。但是如果是被裝了鉤子后,當(dāng)你按下一個(gè)健后,系統(tǒng)會(huì)下按鍵焦點(diǎn)程序的地址空間中加載黑客寫(xiě)的鍵盤(pán)記錄模塊,調(diào)用的是LoadLibraryExW,那摩這個(gè)函數(shù)的返回地址就不是以上的兩種情況了,經(jīng)我是實(shí)驗(yàn)是位于user32.dll中。根據(jù)這一點(diǎn)我們就可以判斷一個(gè)模塊是否為非法加載模塊了.
?? ?具體的實(shí)現(xiàn)要用到APIHook技術(shù)。可以HOOKIAT也可以InLineHook.如果是InLineHokk,在自己寫(xiě)的HOOk函數(shù)中首先獲取[ESP]的值,這個(gè)就是返回值了。隨后,就拿這個(gè)返回值去比較就可以了。
?? ?3:Windows下的鉤子邏輯上是一個(gè)鏈狀的,一個(gè)系統(tǒng)中可以安裝很多的鉤子,這些鉤子會(huì)形成一個(gè)鉤子鏈,先裝的鉤子在最前頭,前面的鉤子通過(guò)調(diào)用CallNextHookEx函數(shù)將信息傳給后面的鉤子,如不不調(diào)用這個(gè)函數(shù)那摩鏈子就斷了,后面的鉤子永遠(yuǎn)互惠獲取信息。我們不往下傳遞信息,我們自己處理,讓下面的鉤子瞪著眼著急去吧。
?? ?具體做法為:我們?cè)谖覀兊某绦蛑醒b上局部鉤子,在局部鉤子的回調(diào)函數(shù)中我們截獲按鍵消息,我們自己存起來(lái),然后再給密碼框發(fā)個(gè)假消息,比如按下了A健,我們用我們的局部鉤子截獲了A健消息,我們保存起來(lái),然后我們給密碼框發(fā)個(gè)假消息,就說(shuō)我們接受到了個(gè)B健,然后不調(diào)用那個(gè)CallNextHookEx函數(shù),而是直接返回1,這樣下面的鉤子函數(shù)就不調(diào)用了.