議木馬自啟動應用

時間:2022-08-20 05:34:00

導語:議木馬自啟動應用一文來源于網友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

議木馬自啟動應用

摘要:木馬一種具有遠程控制功能的程序。文件關聯(lián)是木馬實現(xiàn)自啟動的方法之一,這種方式的實現(xiàn)有三個關鍵技術。在詳細分析這三個關鍵技術后,用VC++編程實現(xiàn)木馬的自啟動從而深刻地揭示該方法的原理。

關鍵詞:文件關聯(lián);木馬;自啟動

1木馬啟動的方式

木馬是一種能實現(xiàn)遠程控制的黑客程序,具有竊取密碼,屏幕控制,文件傳輸?shù)任:1]。從廣義上來講,木馬是一種病毒,但不具有自我復制的特點,因此,木馬要使用各種方法讓程序在計算機上運行而又不被用戶發(fā)現(xiàn)。木馬首次被執(zhí)行后可能被用戶關閉或木馬程序隨著計算機的重啟或關閉,因此木馬還需要解決自啟動的問題,以達到長期控制被害機器的目的。木馬常用的啟動方法有以下幾種:

1.1通過注冊表

Windows操作系統(tǒng)的注冊表提供了一個注冊表項,它的具體路徑是:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run。通過該表項可以實現(xiàn)程序的自啟動,一些重要的程序也是通過該表項來實現(xiàn)自啟動的,例如輸入法程序,防火墻程序等。而該表項也為木馬的啟動提供了可乘之機,一些木馬就是利用該表項來實現(xiàn)自啟動,例如冰河。

1.2通過服務

Windows的很多后臺服務是通過系統(tǒng)“服務”程序來啟動的,例如www服務,telnet服務等。一些木馬程序也會注冊成后臺服務從而隨著計算機的啟動而運行。例如某些版本的灰鴿子就是使用這個方法。一些論文[2]詳細討論了這種方法的實現(xiàn)。

1.3通過文件關聯(lián)

文件關聯(lián)是指木馬與某一種類型的文件或程序關聯(lián)在一起,當打開文件或程序被運行時,木馬也悄悄隨著運行。木馬一般選擇與常用的文件建立關聯(lián),否則即使建立了關聯(lián),木馬也可能由于文件沒有被打開而不能自啟動。冰河除了使用注冊表的方法外,也使用了關聯(lián)的方法,它通常關聯(lián)文本文件,當然也可能關聯(lián)其它類型的文件。而廣外女生則關聯(lián)了EXE文件和COM文件,因此,任何一個EXE文件運行都啟動了木馬程序。一些論文[5]討論了另類的文件關聯(lián)的方法。

2文件關聯(lián)的關鍵技術

用文件關聯(lián)的方法實現(xiàn)木馬自啟動有三個關鍵技術,一是如何與文件或程序建立關聯(lián);二是調用正常的程序;三是如何獲得用戶需要打開的文件名或程序名。本文以關聯(lián)文本文件為例進行討論,并在VC++下編程實現(xiàn)。

2.1建立文件關聯(lián)

一個文件可以用某個程序打開,也可以用另外一個程序打開,但有一個默認的打開程序。默認的打開程序其實是由注冊表來決定的。在Windows的注冊表HKEY_CLASSES_ROOT表項中,包括很多類型的文件的相關信息,例如文件的圖標,文件打開程序等。如果想修改文件的默認打開程序,修改這個注冊表項就可以了。因此,當我們要與文本文件建立關聯(lián),通過程序修改注冊表項

HKEY_CLASSES_ROOT\txtfile中的shell\open\command鍵的鍵值為木馬程序就可以了。正常情況下,該鍵值的內容為notepad.exe%1,其中%1表示txt文件名。

2.2調用正常的程序

通過修改注冊表,木馬能夠隨著用戶雙擊文件而悄悄運行了,但如果默認的正常程序沒有運行,便會引起用戶的懷疑,所以木馬還需要解決運行正常程序的問題。對于文本文件,默認的打開程序是記事本程序,因此木馬還需要調用記事本程序,也就是notepad程序。

2.3獲得文件名

木馬調用記事本程序的同時,還要獲得用戶所需要打開的文件名(一般是用戶雙擊的文件名),同時把文件名傳遞給記事本程序,這樣用戶所看到的就是文本文件被正常打開了。

3編程思路及實現(xiàn)

在本文中,我們的木馬程序命名為server.exe,我們的目標是server程序首次執(zhí)行時(server程序的首次執(zhí)行可以通過欺騙用戶或捆綁文件等方法來實現(xiàn)),把server程序與txt文件建立關聯(lián),此后每當用戶雙擊一個txt文件時,server程序就悄悄地運行,同時txt文件能正常地顯示在記事本程序中。因為server程序是悄悄運行,所以用戶看到的僅僅是一個記事本程序把txt文件打開了。程序首先實現(xiàn)文件關聯(lián),主要通過修改注冊表實現(xiàn);程序獲得txt文件完整路徑及正確文件名;調用notepad程序,并把獲得的文件名傳遞給notepad程序。當然,server程序作為木馬還應包括其它功能,但這些功能不在本文討論之列。

3.1文件關聯(lián)的實現(xiàn)

與txt建立關聯(lián)的方法是,修改注冊表的HKEY_CLASSES_ROOT\txtfile\shell\open\command項,把它的鍵值修改為server.exe程序。這需要用到注冊表RegOpenKeyEx()函數(shù)以及RegSetValueEx()函數(shù)。這部分關鍵程序代碼如下:

//寫入注冊表,建立關系

HKEYhKey;

HKEYhKey1;

//找到注冊表項

LPCTSTRlpCommand="txtfile\\shell\\open\\command";

//打開注冊項Key

long

lRet1=RegOpenKeyEx(HKEY_CLASSES_ROOT,lpCommand,0,KEY_WRITE,&hKey1);

if(lRet1==ERROR_SUCCESS)

{//定義并獲得木馬程序名

charpFileName[100]={0};

DWORDdwRet=GetModuleFileName(NULL,pFileName,MAX_PATH);

chartt[200]={0};

strcpy(tt,pFileName);

strcat(tt,"%1");//%1表示txt文件本身

//添加一個子Key,并設置值

lRet1=RegSetValueEx(hKey1,NULL,0,REG_EXPAND_SZ,(BYTE*)tt,strlen(tt));

//關閉注冊表

RegCloseKey(hKey1);

3.2調用正常程序的實現(xiàn)

在server中調用notepad主要用ShellExceute()函數(shù),詳細的函數(shù)調用見“獲得文件名的實現(xiàn)”部分的代碼。

3.3獲得文件名的實現(xiàn)

由于已經建立關系,當用戶雙擊一個txt文件時,server.exe則會啟動,而txt文件名則需要用GetCommandLine()函數(shù)進行并且進行處理,這是GetCommandLine()函數(shù)所獲得的文件名包括一些空字符以及server程序路徑以及程序名等。

char*ptr=(char*)GetCommandLine();//獲得文件名,如果沒有雙擊txt文件名,則這個文件名是server程序名

intj,k;

j=0;

j=strlen(ptr);

k=strlen(pFileName);//server路徑及程序名長度

k=k+3;

if(j>k)//用戶雙擊txt文件

ShellExecute(0,NULL,"notepad.exe",ptr+k,NULL,1);//調用notepad并且把txt文件名傳遞給notepad程序。

4小結

木馬的自啟動方法對黑客實現(xiàn)控制被害機器是至關重要的一項功能。關聯(lián)文件的方法是木馬實現(xiàn)自啟動的常用方法之一。建立關聯(lián),調用正常程序以及獲取用戶打開文件名是這種方法的三個關鍵技術。本文討論木馬關聯(lián)txt文件的實現(xiàn)技術和方法,并在VC++中編程實現(xiàn)。木馬的自啟動還應考慮是否運行多個木馬程序的問題,也就是程序互斥的實現(xiàn),程序在這一方面并沒有解決和實現(xiàn)這個問題,如果解決了這個問題,則程序則更加完善。