黑客之門的魅力:感染與加載(圖)
“黑客之門”介紹
黑客之門采用的目前一些先進(jìn)的后門技術(shù),它只有一個Dll文件,通過感染系統(tǒng)文件啟動自身,被感染的系統(tǒng)文件大小和日期都不會改變;同時采用線程插入技術(shù),本身沒有進(jìn)程;本身不開端口,而是重用系統(tǒng)進(jìn)程開的任意一個端口,如80,135,139,445等,因此它的隱藏性非常好,而且穿透防火墻也是很容易的事。這個版本文件不大,只提供一些很有用的命令。目前還沒有發(fā)現(xiàn)如何工具能查到這個后門,象Fport,Llister,RKDetector等查工具都失效。
程序的自啟動
既然是一個后門,那么就要隨系統(tǒng)的啟動而啟動,根據(jù)黑客之門的介紹,它是通過感染系統(tǒng)程序文件來實現(xiàn)程序的自啟動的。既然是感染了系統(tǒng)文件(像病毒),那就看看感染前和感染后的系統(tǒng)文件的區(qū)別吧!為了測試感染前后的差別,我準(zhǔn)備了一個專門用來被感染的文件TestLoad.exe,它沒有什么功能,只是彈出一個對話框,這樣好等待測試,麻雀雖小,五臟俱全,省得動系統(tǒng)文件了。接著運行命令:
C:\>rundll32 hkdoordll,DllRegisterServer TestLoad.exe 2
使黑客之門感染TestLoad.exe,感染完畢后用EXE文件查看利器eXescope查看TestLoad.exe被感染前后的差別。
被感染之前eXescpoe顯示的TestLoad.exe的結(jié)構(gòu)如圖1所示:
感染之后的TestLoad.exe的結(jié)構(gòu)如圖2所示:
圖2
可以看出感染之后的TestLoad.exe的引入表多了一個Hkdoordll.dll引入庫。細(xì)心觀察感染之后的TestLoad.exe的引入表地址(Import Table Address ITA)已經(jīng)被改變,原來的ITA為0x000043FC,感染之后為0x0000477E。
為了進(jìn)一步看清除感染前后的文件的變化,這里使用LordPE.exe比較感染前后的TestLoad.exe的引入表函數(shù),比較結(jié)果如圖3所示:
圖3
小提示:使用LordPE.exe查看exe文件的引入表函數(shù)方法是:點擊PE Edito打開相應(yīng)的文件,接著點擊Directories,彈出對話框后點擊Import Table右邊的三個點,這樣就可以查看一個可執(zhí)行文件的引入表了。
可以看出,只是在引入表鏈表中添加了一個相應(yīng)的Hkdoordll.dll,這樣當(dāng)被感染的程序再次運行時,由系統(tǒng)的程序裝載器搜索Hkdoordll.dll,并將其引用到被感染程序的地址空間,后門就運行起來了。黑客之門的這種子啟動方式值得學(xué)習(xí),比較靈巧。
搞明白了黑客之門的啟動方式后,我們就可以手動清除它了,這里切不可將Hkdoordll.dll直接刪除,這樣可能直接導(dǎo)致系統(tǒng)崩潰。因為系統(tǒng)在加載被感染的程序(假如為Services.exe)時發(fā)現(xiàn)沒有找到Hkdoordll.dll,Services.exe將不能被裝載,如果被感染的是系統(tǒng)關(guān)鍵進(jìn)程的話,那么系統(tǒng)將不能正確的啟動。清除的時候我們可以去別的機器上(相同系統(tǒng)與補?。┱乙粋€Services.exe,將被感染的程序命名為Services2.exe,將Services.exe拷貝到System32文件夾下,重啟電腦,刪除Hkdoordll.dll就清除黑客之門了。
運行時感染
上面說的是黑客之門的自啟動方式,下面看看黑客之門是怎么感染正在運行的系統(tǒng)文件的,這一點讓我暈了很久,最后發(fā)現(xiàn)是用了一個很靈活的小技巧。
我們知道在Windows系統(tǒng)下,正在運行的程序文件一般是不能修改或者刪除的,正是由于這一點,才出現(xiàn)了各種程序運行時的自刪除大法,程序自刪除不是我們這次的重點。但是,細(xì)心的用戶可能已經(jīng)發(fā)現(xiàn),在Windows 2000或Wndows XP系統(tǒng)下,我們可以對正在運行的EXE文件進(jìn)行重命名或者移動。
再拿剛才的TestLoad.exe做測試,運行:
C:\>rundll32 hkdoordll,DllRegisterServer TestLoad.exe 2
可以發(fā)現(xiàn)TestLoad.exe所在的文件夾內(nèi)多出了一個文件TestLoad.exe.bak,咋一看還以為“黑客之門”做好事,自動幫你備份一下系統(tǒng)文件,其實這可是黑客之門的狐貍尾巴?。∈撬坏靡讯鵀橹?。不要關(guān)閉TestLoad.exe,然后試著刪除TestLoad.exe和TestLoad.exe.bak,是不是發(fā)現(xiàn)奇跡了?竟然把TestLoad.exe刪掉了,而TestLoad.exe.bak竟然不讓刪,是不是和我剛才說的話矛盾?非也!非也!剛好證明了剛才的話:黑客之門先把TestLoad.exe改名為TestLoad.exe.bak,然后生成一個被感染的TestLoad.exe,這樣,下次運行TestLoad.exe實際上是被替換過的程序,原來的程序則放在一邊。
用IDA Pro反匯編Hkdoordll.dll可以發(fā)現(xiàn)以下函數(shù)的調(diào)用:
文件重命名:
.data:1000C618 lea ecx, [esp+438h+FileName]
.data:1000C61F lea edx, [esp+438h+var_324]
.data:1000C626 push ecx
.data:1000C627 push edx
.data:1000C628 call rename
拷貝文件:
.data:1000C66F lea edx, [esp+440h+var_32C]
.data:1000C676 push 0 ; bFailIfExists
.data:1000C678 lea eax, [esp+444h+var_228]
.data:1000C67F push edx ; lpNewFileName
.data:1000C680 push eax ; lpExistingFileName
.data:1000C681 call CopyFileA
移動文件:
.data:1000C795 mov eax, [ebp+8]
.data:1000C798 test eax, eax
.data:1000C79A jnz short loc_1000C7FE
.data:1000C79C lea ecx, [esp+448h+var_334]
.data:1000C7A3 push 5 ; dwFlags
.data:1000C7A5 lea edx, [esp+44Ch+var_230]
.data:1000C7AC push ecx ; lpNewFileName
.data:1000C7AD push edx ; lpExistingFileName
.data:1000C7AE call MoveFileExA
上面的語句實際上可以理解為:
MoveFileEx(“TestLoad.exe”,”TestLoad.exe.bak”, MOVEFILE_DELAY_UNTIL_REBOOT| MOVEFILE_REPLACE_EXISTING);
小知識:MSDN中對MoveFileEx()函數(shù)的解釋為:
BOOL MoveFileEx(
LPCTSTR lpExistingFileName, // pointer to the name of the existing file
LPCTSTR lpNewFileName, // pointer to the new name for the file
DWORD dwFlags // flag that specifies how to move file
);
這樣進(jìn)程TestLoad.exe的文件映象實際上為TestLoad.exe.bak,接著Hkdoordll.dll生成被感染的TestLoad.exe,并且保存在原來的文件路徑上即可。
滅掉系統(tǒng)文件保護(hù)
一旦系統(tǒng)啟動了,Windows系統(tǒng)就開始加載已經(jīng)被感染的系統(tǒng)程序,但是由于“黑客之門”是通過感染系統(tǒng)程序?qū)崿F(xiàn)自啟動的,這下子又遇到了另外一個問題。
大家都知道,在Windows 2000和Windows XP中有系統(tǒng)文件保護(hù)功能,一旦被保護(hù)的系統(tǒng)文件被修改了,就會彈出需要插入系統(tǒng)安裝盤CD的對話框。這樣就導(dǎo)致了一個問題, TestLoad.exe只是一個普通的EXE文件,而不是受系統(tǒng)文件保護(hù)系統(tǒng)保護(hù)的系統(tǒng)進(jìn)程,那為什么黑客之門修改系統(tǒng)進(jìn)程時,操作系統(tǒng)的文件的文件保護(hù)系統(tǒng)不會提醒呢?
這一點,還是采用反匯編黑客之門的方法,觀察它是怎樣關(guān)閉系統(tǒng)文件保護(hù)功能的。
發(fā)現(xiàn)如下的代碼:
.data:1000BBB0 LoadSFCDLL proc near ; CODE XREF: sub_1000BC70+B7
.data:1000BBB0 push esi
.data:1000BBB1 xor esi, esi
.data:1000BBB3 call GetVersion ; Get current version number of Windows
.data:1000BBB3 ; and information about the operating system platform
.data:1000BBB9 cmp al, 5
.data:1000BBBB jnz short loc_1000BBDF
.data:1000BBBD xor ecx, ecx ;此時為Windows2000系統(tǒng)
.data:1000BBBF mov cl, ah
.data:1000BBC1 test cl, cl
.data:1000BBC3 jnz short loc_1000BBD2
.data:1000BBC5 push offset aSfc_dll ; lpLibFileName
.data:1000BBCA call LoadLibraryA ;此時為WindowsXP系統(tǒng)
.data:1000BBD0 pop esi
.data:1000BBD1 retn
.data:1000BBD2 loc_1000BBD2: ; CODE XREF: LoadSFCDLL+13 j
.data:1000BBD2 push offset aSfc_os_dll ; lpLibFileName
.data:1000BBD7 call LoadLibraryA
.data:1000BBDD pop esi
.data:1000BBDE retn
上面的代碼可以看出,Hkdoordll.dll根據(jù)操作系統(tǒng)的版本調(diào)用了Sfc.dll或者Sfc_os.dll,如果是Windows 2000(Windows NT 5.0)的話,裝載Sfc.dll;如果是Windows XP(Windows NT 5.1)的話,裝載Sfc_os.dll。再看下面的一段反匯編代碼:
相關(guān)文章
網(wǎng)吧破解:讓你在網(wǎng)吧上霸王網(wǎng)
網(wǎng)吧破解:讓你在網(wǎng)吧上霸王網(wǎng)...2007-01-01從搜索參數(shù)過濾不嚴(yán)到IDC虛擬主機的滲透
從搜索參數(shù)過濾不嚴(yán)到IDC虛擬主機的滲透...2007-01-01Advanced SQL Injection with MySQL
Advanced SQL Injection with MySQL...2007-01-01