整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          木馬程序開發(fā)技術(shù):病毒源代碼詳解

          近年來,黑客技術(shù)不斷成熟起來,對(duì)網(wǎng)絡(luò)安全造成了極大的威脅,黑客的主要攻擊手段之一,就是使用木馬技術(shù),滲透到對(duì)方的主機(jī)系統(tǒng)里,從而實(shí)現(xiàn)對(duì)遠(yuǎn)程操作目標(biāo)主機(jī)。 其破壞力之大,是絕不容忽視的,黑客到底是如何制造了這種種具有破壞力的木馬程序呢,下面我對(duì)木馬進(jìn)行源代碼級(jí)的詳細(xì)的分析,讓我們對(duì)木馬的開發(fā)技術(shù)做一次徹底的透視,從了解木馬技術(shù)開始,更加安全的管理好自己的計(jì)算機(jī)。

          1、木馬程序的分類

          木馬程序技術(shù)發(fā)展至今,已經(jīng)經(jīng)歷了4代,第一代,即是簡單的密碼竊取,發(fā)送等,沒有什么特別之處。第二代木馬,在技術(shù)上有了很大的進(jìn)步,冰河可以說為是國內(nèi)木馬的典型代表之一。第三代木馬在數(shù)據(jù)傳遞技術(shù)上,又做了不小的改進(jìn),出現(xiàn)了ICMP等類型的木馬,利用畸形報(bào)文傳遞數(shù)據(jù),增加了查殺的難度。第四代木馬在進(jìn)程隱藏方面,做了大的改動(dòng),采用了內(nèi)核插入式的嵌入方式,利用遠(yuǎn)程插入線程技術(shù),嵌入DLL線程。或者掛接PSAPI,實(shí)現(xiàn)木馬程序的隱藏,甚至在Windows NT/2000下,都達(dá)到了良好的隱藏效果。相信,第五代木馬很快也會(huì)被編制出來。關(guān)于更詳細(xì)的說明,可以參考ShotGun的文章《揭開木馬的神秘面紗》。

          2.木馬程序的隱藏技術(shù)

          木馬程序的服務(wù)器端,為了避免被發(fā)現(xiàn),多數(shù)都要進(jìn)行隱藏處理,下面讓我們來看看木馬是如何實(shí)現(xiàn)隱藏的。

          說到隱藏,首先得先了解三個(gè)相關(guān)的概念:進(jìn)程,線程和服務(wù)。我簡單的解釋一下。

          進(jìn)程:一個(gè)正常的Windows應(yīng)用程序,在運(yùn)行之后,都會(huì)在系統(tǒng)之中產(chǎn)生一個(gè)進(jìn)程,同時(shí),每個(gè)進(jìn)程,分別對(duì)應(yīng)了一個(gè)不同的PID( ID, 進(jìn)程標(biāo)識(shí)符)這個(gè)進(jìn)程會(huì)被系統(tǒng)分配一個(gè)虛擬的內(nèi)存空間地址段,一切相關(guān)的程序操作,都會(huì)在這個(gè)虛擬的空間中進(jìn)行。

          線程:一個(gè)進(jìn)程,可以存在一個(gè)或多個(gè)線程,線程之間同步執(zhí)行多種操作,一般地,線程之間是相互獨(dú)立的,當(dāng)一個(gè)線程發(fā)生錯(cuò)誤的時(shí)候,并不一定會(huì)導(dǎo)致整個(gè)進(jìn)程的崩潰。

          服務(wù):一個(gè)進(jìn)程當(dāng)以服務(wù)的方式工作的時(shí)候,它將會(huì)在后臺(tái)工作,不會(huì)出現(xiàn)在任務(wù)列表中,但是,在Windows NT/2000下,你仍然可以通過服務(wù)管理器檢查任何的服務(wù)程序是否被啟動(dòng)運(yùn)行。

          想要隱藏木馬的服務(wù)器端,可以偽隱藏,也可以是真隱藏。偽隱藏,就是指程序的進(jìn)程仍然存在,只不過是讓他消失在進(jìn)程列表里。真隱藏則是讓程序徹底的消失,不以一個(gè)進(jìn)程或者服務(wù)的方式工作。

          偽隱藏的方法,是比較容易實(shí)現(xiàn)的,只要把木馬服務(wù)器端的程序注冊(cè)為一個(gè)服務(wù)就可以了,這樣,程序就會(huì)從任務(wù)列表中消失了,因?yàn)橄到y(tǒng)不認(rèn)為他是一個(gè)進(jìn)程,當(dāng)按下Ctrl+Alt+Delete的時(shí)候,也就看不到這個(gè)程序。但是,這種方法只適用于的系統(tǒng),對(duì)于Windows NT,Windows 2000等,通過服務(wù)管理器,一樣會(huì)發(fā)現(xiàn)你在系統(tǒng)中注冊(cè)過的服務(wù)。難道偽隱藏的方法就真的不能用在Windows NT/2000下了嗎?當(dāng)然還有辦法,那就是API的攔截技術(shù),通過建立一個(gè)后臺(tái)的系統(tǒng)鉤子,攔截PSAPI的等相關(guān)的函數(shù)來實(shí)現(xiàn)對(duì)進(jìn)程和服務(wù)的遍歷調(diào)用的控制,當(dāng)檢測(cè)到進(jìn)程ID(PID)為木馬程序的服務(wù)器端進(jìn)程的時(shí)候直接跳過,這樣就實(shí)現(xiàn)了進(jìn)程的隱藏,金山詞霸等軟件,就是使用了類似的方法,攔截了,函數(shù),來截獲屏幕輸出,實(shí)現(xiàn)即時(shí)翻譯的。同樣,這種方法也可以用在進(jìn)程隱藏上。

          當(dāng)進(jìn)程為真隱藏的時(shí)候,那么這個(gè)木馬的服務(wù)器部分程序運(yùn)行之后,就不應(yīng)該具備一般進(jìn)程,也不應(yīng)該具備服務(wù)的,也就是說,完全的溶進(jìn)了系統(tǒng)的內(nèi)核。也許你會(huì)覺得奇怪,剛剛不是說一個(gè)應(yīng)用程序運(yùn)行之后,一定會(huì)產(chǎn)生一個(gè)進(jìn)程嗎?的確,所以我們可以不把他做成一個(gè)應(yīng)用程序,而把他做為一個(gè)線程,一個(gè)其他應(yīng)用程序的線程,把自身注入其他應(yīng)用程序的地址空間。而這個(gè)應(yīng)用程序?qū)τ谙到y(tǒng)來說,是一個(gè)絕對(duì)安全的程序,這樣,就達(dá)到了徹底隱藏的效果,這樣的結(jié)果,導(dǎo)致了查殺黑客程序難度的增加。

          出于安全考慮,我只給出一種通過注冊(cè)服務(wù)程序,實(shí)現(xiàn)進(jìn)程偽隱藏的方法,對(duì)于更復(fù)雜,高級(jí)的隱藏方法,比如遠(yuǎn)程線程插入其他進(jìn)程的方法,請(qǐng)參閱ShotGun的文章《NT系統(tǒng)下木馬進(jìn)程的隱藏與檢測(cè)》。

          WINAPI WinMain(, , LPSTR, int)

          try

          DWORD = ();//取得Windows的版本號(hào)

          if ( >= ) // Windows 9x隱藏任務(wù)列表

          int ( *rsp)(DWORD,DWORD);

          dll=(".DLL");//裝入.DLL

          rsp=(int( *)(DWORD,DWORD))(dll,"ss");//找到ss的入口

          rsp(NULL,1);//注冊(cè)服務(wù)

          (dll);//釋放DLL模塊

          catch ( &)//處理異常事件

          //處理異常事件

          return 0;

          3、程序的自加載運(yùn)行技術(shù)

          讓程序自運(yùn)行的方法比較多,除了最常見的方法:加載程序到啟動(dòng)組,寫程序啟動(dòng)路徑到注冊(cè)表的///Windows//Run的方法外,還有很多其他的辦法,據(jù)yagami講,還有幾十種方法之多,比如可以修改Boot.ini,或者通過注冊(cè)表里的輸入法鍵值直接掛接啟動(dòng),通過修改.exe啟動(dòng)參數(shù)等等的方法,真的可以說是防不勝防,下面展示一段通過修改///Windows//Run鍵值來實(shí)現(xiàn)自啟動(dòng)的程序:

          自裝載部分:

          HKEY hkey;

          =(sys)+("+PName/">//")+PName

          long k;

          k=KEY;

          (,

          "http:////WINDOWS////RUN//",

          0L,

          NULL,

          ILE,|,

          NULL,

          &hkey,&k);

          (hkey,

          "",

          0,

          REG_SZ,

          .c_str(),

          .Length());

          (hkey);

          if (int((Handle,

          "open",

          .c_str(),

          NULL,

          NULL,

          SW_HIDE))>32)

          =true;

          Close();

          else

          HKEY hkey;

          long k;

          k=KEY;

          long a=(,

          "http:////WINDOWS////RUN",

          0,

          NULL,

          ILE,

          ,NULL,

          &hkey,&k);

          (hkey,

          "",

          0,

          REG_SZ,

          .c_str(),

          .Length());

          int num=0;

          char str[20];

          DWORD lth=20;

          DWORD type;

          char strv[255];

          DWORD vl=254;

          DWORD Suc;

          do{

          Suc=(,

          (DWORD)num,str,

          NULL,

          &type,

          strv,&vl);

          if (strcmp(str,"BGroup")==0)

          ((strv));

          (,"BGroup");

          break;

          }while(Suc== );

          (hkey);

          自裝載程序的卸載代碼:

          int num;

          char str2[20];

          進(jìn)程隱藏器_隱藏特定類型文件_進(jìn)程隱藏對(duì)特定程序顯示工具

          DWORD lth=20;

          DWORD type;

          char strv[255];

          DWORD vl=254;

          DWORD Suc;

          do{

          Suc=(,

          (DWORD)num,

          str,

          NULL,

          &type,

          strv,

          &vl);

          if (strcmp(str,"BGroup")==0)

          ((strv));

          (,"BGroup");

          break;

          }while(Suc== )

          HKEY hkey;

          long k;

          k=KEY;

          (,

          "http:////WINDOWS////RUN",

          0,

          NULL,

          ILE,

          ,NULL,

          &hkey,

          &k);

          do{

          Suc=(hkey,(DWORD)num,str,if (strcmp(str,"")==0)

          ((strv));

          (,"");

          break;

          }while(Suc== )

          (hkey);

          其中自裝載部分使用C++ Builder可以這樣寫,會(huì)比較簡化:

          & regKey = *new ();

          regKey.RootKey=;

          regKey.OpenKey("http:////Windows////Run",true);

          if(!regKey.(" Server"))

          regKey.(" Server",

          "D://Program Files//Borland////BIN//.exe");

          regKey.();

          delete ?Key;

          4、木馬程序的建立連接的隱藏

          木馬程序的數(shù)據(jù)傳遞方法有很多種,其中最常見的要屬TCP,UDP傳輸數(shù)據(jù)的方法了,通常是利用Winsock與目標(biāo)機(jī)的指定端口建立起連接,使用send和recv等API進(jìn)行數(shù)據(jù)的傳遞,但是由于這種方法的隱蔽性比較差,往往容易被一些工具軟件查看到,最簡單的,比如在命令行狀態(tài)下使用netstat命令,就可以查看到當(dāng)前的活動(dòng)TCP,UDP連接。

          C:/ and /bigball>netstat -n

          Active

          Proto Local Address Foreign Address State

          TCP 192.0.0.9:1032 64.4.13.48:1863

          TCP 192.0.0.9:1112 61.141.212.95:80

          TCP 192.0.0.9:1135 202.130.239.223:80

          TCP 192.0.0.9:1142 202.130.239.223:80

          TCP 192.0.0.9:1162 192.0.0.8:139

          TCP 192.0.0.9:1169 202.130.239.159:80

          TCP 192.0.0.9:1170 202.130.239.133:80

          C:/ and /bigball>netstat -a

          Active

          Proto Local Address Foreign Address State

          TCP Liumy:echo Liumy:0

          TCP Liumy:discard Liumy:0

          TCP Liumy:daytime Liumy:0

          TCP Liumy:qotd Liumy:0

          TCP Liumy:chargen Liumy:0

          TCP Liumy:epmap Liumy:0

          TCP Liumy:-ds Liumy:0

          TCP Liumy:1025 Liumy:0

          TCP Liumy:1026 Liumy:0

          TCP Liumy:1031 Liumy:0

          TCP Liumy:1032 Liumy:0

          TCP Liumy:1112 Liumy:0

          TCP Liumy:1135 Liumy:0

          TCP Liumy:1142 Liumy:0

          TCP Liumy:1801 Liumy:0

          TCP Liumy:3372 Liumy:0

          TCP Liumy:3389 Liumy:0

          TCP Liumy:netbios-ssn Liumy:0

          TCP Liumy:1028 Liumy:0

          TCP Liumy:1032 :1863 ESTAB

          TCP Liumy:1112 :http ESTABLI

          TCP Liumy:1135 202.130.239.223:http

          TCP Liumy:1142 202.130.239.223:http

          TCP Liumy:1162 W3I:netbios-ssn

          TCP Liumy:1170 202.130.239.133:http

          TCP Liumy:2103 Liumy:0

          TCP Liumy:2105 Liumy:0

          TCP Liumy:2107 Liumy:0

          UDP Liumy:echo *:*

          UDP Liumy:discard *:*

          UDP Liumy:daytime *:*

          UDP Liumy:qotd *:*

          隱藏特定類型文件_進(jìn)程隱藏對(duì)特定程序顯示工具_(dá)進(jìn)程隱藏器

          UDP Liumy:chargen *:*

          UDP Liumy:epmap *:*

          UDP Liumy:snmp *:*

          UDP Liumy:-ds *:*

          UDP Liumy:1027 *:*

          UDP Liumy:1029 *:*

          UDP Liumy:3527 *:*

          UDP Liumy:4000 *:*

          UDP Liumy:4001 *:*

          UDP Liumy:1033 *:*

          UDP Liumy:1148 *:*

          UDP Liumy:netbios-ns *:*

          UDP Liumy:netbios-dgm *:*

          UDP Liumy:isakmp *:*

          但是,黑客還是用種種手段躲避了這種偵察,就我所知的方法大概有兩種,一種是合并端口法,也就是說,使用特殊的手段,在一個(gè)端口上同時(shí)綁定兩個(gè)TCP或者UDP連接,這聽起來不可思議,但事實(shí)上確實(shí)如此,而且已經(jīng)出現(xiàn)了使用類似方法的程序,通過把自己的木馬端口綁定于特定的服務(wù)端口之上,(比如80端口的HTTP,誰懷疑他會(huì)是木馬程序呢?)從而達(dá)到隱藏端口的目地。另外一種辦法,是使用ICMP( Control Message )協(xié)議進(jìn)行數(shù)據(jù)的發(fā)送,原理是修改ICMP頭的構(gòu)造,加入木馬的控制字段,這樣的木馬,具備很多新的特點(diǎn),不占用端口的特點(diǎn),使用戶難以發(fā)覺,同時(shí),使用ICMP可以穿透一些防火墻,從而增加了防范的難度。之所以具有這種特點(diǎn),是因?yàn)镮CMP不同于TCP,UDP,ICMP工作于網(wǎng)絡(luò)的應(yīng)用層不使用TCP協(xié)議。關(guān)于網(wǎng)絡(luò)層次的結(jié)構(gòu),下面給出圖示:

          進(jìn)程隱藏對(duì)特定程序顯示工具_(dá)隱藏特定類型文件_進(jìn)程隱藏器

          網(wǎng)絡(luò)層次結(jié)構(gòu)圖

          5、發(fā)送數(shù)據(jù)的組織方法

          關(guān)于數(shù)據(jù)的組織方法,可以說是數(shù)學(xué)上的問題。關(guān)鍵在于傳遞數(shù)據(jù)的可靠性,壓縮性,以及高效行。木馬程序,為了避免被發(fā)現(xiàn),必須很好的控制數(shù)據(jù)傳輸量,一個(gè)編制較好的木馬,往往有自己的一套傳輸協(xié)議,那么程序上,到底是如何組織實(shí)現(xiàn)的呢?下面,我舉例包裝一些協(xié)議:

          typedef struct{ //定義消息結(jié)構(gòu)

          //char ip[20];

          char Type; //消息種類

          char [20]; //密碼

          int CNum; //消息操作號(hào)

          //int Length; //消息長度

          }Msg;

          #define MsgLen sizeof(Msg)

          //-------------------------------------------

          //對(duì)話框數(shù)據(jù)包定義:.h

          //-------------------------------------------

          //定義如下消息類型:

          #define 4//連接事件

          #define 5//發(fā)送完成事件

          //消息結(jié)構(gòu)

          typedef struct{

          char Name[20];//對(duì)話框標(biāo)題

          char Msg[256];//對(duì)話框消息內(nèi)容

          };

          #define sizeof()//消息單元長度

          //------------------------------------------

          //聊天數(shù)據(jù)包定義:.h

          //------------------------------------------

          //定義如下消息類型:

          #define 0//連接事件

          #define 1//接入事件

          #define 2//結(jié)束事件

          #define 16//確認(rèn)對(duì)話內(nèi)容收到

          //消息結(jié)構(gòu)

          typedef struct{

          char [20];//Client自定義的名稱

          char Msg[256];//發(fā)送的消息

          };

          #define sizeof()//消息單元長度

          //------------------------------------------

          //重啟數(shù)據(jù)包定義:.h

          //------------------------------------------

          //定義如下消息類型:

          #define 15//重啟事件

          //------------------------------------------

          //目錄結(jié)構(gòu)請(qǐng)求數(shù)據(jù)包定義:.h

          //------------------------------------------

          //定義如下消息類型:

          #define 17

          #define 18

          typedef struct{

          char Dir[4096];//你要的目錄名

          };

          #define sizeof()

          // TCP的Msg

          typedef struct{ //定義消息結(jié)構(gòu)

          char SType; //消息種類

          char [20]; //密碼

          //int SNum; //消息操作號(hào)

          char *AllMsg;

          }SMsg;

          #define SMsgLen sizeof(SMsg)

          #define 19

          #define 21

          #define 22

          #define 23

          #define 24

          #define 25//tcp接收消息,udp請(qǐng)求消息

          #define 26

          //-------------------------

          //鼠標(biāo)指針隱藏和顯示控制

          //-------------------------

          #define 27//設(shè)置消息

          #define 28//成功消息

          typedef struct{

          bool ;

          };

          #define en sizeof()

          黑客知識(shí)系列之木馬程序隱身的技術(shù)

          最基本的隱藏:不可見窗體+隱藏文件

          木馬程序無論如何神秘,但歸根究底,仍是Win32平臺(tái)下的一種程序。Windows下常見的程序有兩種:

          1.Win32應(yīng)用程序(Win32 ),比如QQ、Office等都屬于此行列。

          2.Win32控制臺(tái)程序(Win32 Console),比如硬盤引導(dǎo)修復(fù)程序FixMBR。

          其中,Win32應(yīng)用程序通常會(huì)有應(yīng)用程序界面,比如系統(tǒng)中自帶的“計(jì)算器”就有提供各種數(shù)字按鈕的應(yīng)用程序界面。木馬雖然屬于Win32應(yīng)用程序,但其一般不包含窗體或隱藏了窗體(但也有某些特殊情況,如木馬使用者與被害者聊天的窗口),并且將木馬文件屬性設(shè)置為“隱藏”,這就是最基本的隱藏手段,稍有經(jīng)驗(yàn)的用戶只需打開“任務(wù)管理器”,并且將“文件夾選項(xiàng)”中的“顯示所有文件”勾選即可輕松找出木馬,于是便出現(xiàn)了下面要介紹的“進(jìn)程隱藏”技術(shù)。

          第一代進(jìn)程隱藏技術(shù):Windows 98的后門

          在Windows 98中,微軟提供了一種能將進(jìn)程注冊(cè)為服務(wù)進(jìn)程的方法。盡管微軟沒有公開提供這種方法的技術(shù)實(shí)現(xiàn)細(xì)節(jié)(因?yàn)閃indows的后續(xù)版本中沒有提供這個(gè)機(jī)制),但仍有高手發(fā)現(xiàn)了這個(gè)秘密,這種技術(shù)稱為ss。只要利用此方法,任何程序的進(jìn)程都能將自己注冊(cè)為服務(wù)進(jìn)程,而服務(wù)進(jìn)程在Windows 98中的任務(wù)管理器中恰巧又是不顯示的,所以便被木馬程序鉆了空子。

          要對(duì)付這種隱藏的木馬還算簡單,只需使用其他第三方進(jìn)程管理工具即可找到其所在,并且采用此技術(shù)進(jìn)行隱藏的木馬在Windows 2000/XP(因?yàn)椴恢С诌@種隱藏方法)中就得現(xiàn)形!中止該進(jìn)程后將木馬文件刪除即可。可是接下來的第二代進(jìn)程隱藏技術(shù),就沒有這么簡單對(duì)付了。

          第二代進(jìn)程隱藏技術(shù):進(jìn)程插入

          在Windows中,每個(gè)進(jìn)程都有自己的私有內(nèi)存地址空間,當(dāng)使用指針(一種訪問內(nèi)存的機(jī)制)訪問內(nèi)存時(shí),一個(gè)進(jìn)程無法訪問另一個(gè)進(jìn)程的內(nèi)存地址空間,就好比在未經(jīng)鄰居同意的情況下,你無法進(jìn)入鄰居家吃飯一樣。比如QQ在內(nèi)存中存放了一張圖片的數(shù)據(jù),而MSN則無法通過直接讀取內(nèi)存的方式來獲得該圖片的數(shù)據(jù)。這樣做同時(shí)也保證了程序的穩(wěn)定性,如果你的進(jìn)程存在一個(gè)錯(cuò)誤,改寫了一個(gè)隨機(jī)地址上的內(nèi)存,這個(gè)錯(cuò)誤不會(huì)影響另一個(gè)進(jìn)程使用的內(nèi)存。

          你知道嗎——進(jìn)程(Process)是什么

          對(duì)應(yīng)用程序來說,進(jìn)程就像一個(gè)大容器。在應(yīng)用程序被運(yùn)行后,就相當(dāng)于將應(yīng)用程序裝進(jìn)容器里了,你可以往容器里加其他東西(如:應(yīng)用程序在運(yùn)行時(shí)所需的變量數(shù)據(jù)、需要引用的DLL文件等),當(dāng)應(yīng)用程序被運(yùn)行兩次時(shí),容器里的東西并不會(huì)被倒掉,系統(tǒng)會(huì)找一個(gè)新的進(jìn)程容器來容納它。

          一個(gè)進(jìn)程可以包含若干線程(Thread),線程可以幫助應(yīng)用程序同時(shí)做幾件事(比如一個(gè)線程向磁盤寫入文件,另一個(gè)則接收用戶的按鍵操作并及時(shí)做出反應(yīng),互相不干擾),在程序被運(yùn)行后中,系統(tǒng)首先要做的就是為該程序進(jìn)程建立一個(gè)默認(rèn)線程,然后程序可以根據(jù)需要自行添加或刪除相關(guān)的線程。

          1.進(jìn)程插入是什么

          進(jìn)程隱藏器_特定隱藏進(jìn)程工具程序顯示不全_進(jìn)程隱藏對(duì)特定程序顯示工具

          獨(dú)立的地址空間對(duì)于編程人員和用戶來說都是非常有利的。對(duì)于編程人員來說,系統(tǒng)更容易捕獲隨意的內(nèi)存讀取和寫入操作。對(duì)于用戶來說,操作系統(tǒng)將變得更加健壯,因?yàn)橐粋€(gè)應(yīng)用程序無法破壞另一個(gè)進(jìn)程或操作系統(tǒng)的運(yùn)行。當(dāng)然,操作系統(tǒng)的這個(gè)健壯特性是要付出代價(jià)的,因?yàn)橐帉懩軌蚺c其他進(jìn)程進(jìn)行通信,或者能夠?qū)ζ渌M(jìn)程進(jìn)行操作的應(yīng)用程序?qū)⒁щy得多。但仍有很多種方法可以打破進(jìn)程的界限,訪問另一個(gè)進(jìn)程的地址空間,那就是“進(jìn)程插入”(Process )。一旦木馬的DLL插入了另一個(gè)進(jìn)程的地址空間后,就可以對(duì)另一個(gè)進(jìn)程為所欲為,比如下文要介紹的盜QQ密碼。

          2.木馬是如何盜走QQ密碼的

          普通情況下,一個(gè)應(yīng)用程序所接收的鍵盤、鼠標(biāo)操作,別的應(yīng)用程序是無權(quán)“過問”的。可盜號(hào)木馬是怎么偷偷記錄下我的密碼的呢?木馬首先將1個(gè)DLL文件插入到QQ的進(jìn)程中并成為QQ進(jìn)程中的一個(gè)線程,這樣該木馬DLL就赫然成為了QQ的一部分!然后在用戶輸入密碼時(shí),因?yàn)榇藭r(shí)木馬DLL已經(jīng)進(jìn)入QQ進(jìn)程內(nèi)部,所以也就能夠接收到用戶傳遞給QQ的密碼鍵入了,真是“家賊難防”啊!

          3.如何插入進(jìn)程

          (1)使用注冊(cè)表插入DLL

          早期的進(jìn)程插入式木馬的伎倆,通過修改注冊(cè)表中的[///Windows NT//Windows/]來達(dá)到插入進(jìn)程的目的。缺點(diǎn)是不實(shí)時(shí),修改注冊(cè)表后需要重新啟動(dòng)才能完成進(jìn)程插入。

          (2)使用掛鉤(Hook)插入DLL

          比較高級(jí)和隱蔽的方式,通過系統(tǒng)的掛鉤機(jī)制(即“Hook”,類似于DOS時(shí)代的“中斷”)來插入進(jìn)程(一些盜QQ木馬、鍵盤記錄木馬以Hook方式插入到其他進(jìn)程中“偷雞摸狗”),需要調(diào)用函數(shù)(也是一個(gè)Win32 API函數(shù))。缺點(diǎn)是技術(shù)門檻較高,程序調(diào)試?yán)щy,這種木馬的制作者必須具有相當(dāng)?shù)腤in32編程水平。

          你知道嗎——什么是API

          Windows中提供各種功能實(shí)現(xiàn)的接口稱為Win32 API( ,即“應(yīng)用程序編程接口”),如一些程序需要對(duì)磁盤上的文件進(jìn)行讀寫,就要先通過對(duì)相應(yīng)的API(文件讀寫就要調(diào)用文件相關(guān)的API)發(fā)出調(diào)用請(qǐng)求,然后API根據(jù)程序在調(diào)用其函數(shù)時(shí)提供的參數(shù)(如讀寫文件就需要同時(shí)給出需要讀寫的文件的文件名及路徑)來完成請(qǐng)求實(shí)現(xiàn)的功能,最后將調(diào)用結(jié)果(如寫入文件成功,或讀取文件失敗等)返回給程序。

          (3)使用遠(yuǎn)程線程函數(shù)()插入DLL

          在Windows 2000及以上的系統(tǒng)中提供了這個(gè)“遠(yuǎn)程進(jìn)程”機(jī)制,可以通過一個(gè)系統(tǒng)API函數(shù)來向另一個(gè)進(jìn)程中創(chuàng)建線程(插入DLL)。缺點(diǎn)很明顯,僅支持Windows 2000及以上系統(tǒng),在國內(nèi)仍有相當(dāng)多用戶在使用Windows 98,所以采用這種進(jìn)程插入方式的木馬缺乏平臺(tái)通用性。

          木馬將自身作為DLL插入別的進(jìn)程空間后,用查看進(jìn)程的方式就無法找出木馬的蹤跡了,你能看到的僅僅是一些正常程序的進(jìn)程,但木馬卻已經(jīng)偷偷潛入其中了。解決的方法是使用支持“進(jìn)程模塊查看”的進(jìn)程管理工具(如“Windows優(yōu)化大師”提供的進(jìn)程查看),木馬的DLL模塊就會(huì)現(xiàn)形了。

          進(jìn)程隱藏對(duì)特定程序顯示工具_(dá)特定隱藏進(jìn)程工具程序顯示不全_進(jìn)程隱藏器

          不要相信自己的眼睛:恐怖的進(jìn)程“蒸發(fā)”

          嚴(yán)格地來講,這應(yīng)該算是第2.5代的進(jìn)程隱藏技術(shù)了,可是它卻比前幾種技術(shù)更為可怕得多。這種技術(shù)使得木馬不必將自己插入到其他進(jìn)程中,而可以直接消失!

          它通過Hook技術(shù)對(duì)系統(tǒng)中所有程序的進(jìn)程檢測(cè)相關(guān)API的調(diào)用進(jìn)行了監(jiān)控,“任務(wù)管理器”之所以能夠顯示出系統(tǒng)中所有的進(jìn)程,也是因?yàn)槠湔{(diào)用了等進(jìn)程相關(guān)的API函數(shù),進(jìn)程信息都包含在該函數(shù)的返回結(jié)果中,由發(fā)出調(diào)用請(qǐng)求的程序接收返回結(jié)果并進(jìn)行處理(如“任務(wù)管理器”在接收到結(jié)果后就在進(jìn)程列表中顯示出來)。

          而木馬由于事先對(duì)該API函數(shù)進(jìn)行了Hook,所以在“任務(wù)管理器”(或其他調(diào)用了列舉進(jìn)程函數(shù)的程序)調(diào)用函數(shù)時(shí)(此時(shí)的API函數(shù)充當(dāng)了“內(nèi)線”的角色),木馬便得到了通知,并且在函數(shù)將結(jié)果(列出所有進(jìn)程)返回給程序前,就已將自身的進(jìn)程信息從返回結(jié)果中抹去了。就好比你正在看電視節(jié)目,卻有人不知不覺中將電視接上了DVD,你在不知不覺中就被欺騙了。

          所以無論是“任務(wù)管理器”還是殺毒軟件,想對(duì)這種木馬的進(jìn)程進(jìn)行檢測(cè)都是徒勞的。這種木馬目前沒有非常有效的查殺手段,只有在其運(yùn)行前由殺毒軟件檢測(cè)到木馬文件并阻止其病毒體的運(yùn)行。當(dāng)時(shí)還有一種技術(shù)是由木馬程序?qū)⑵渥陨淼倪M(jìn)程信息從Windows系統(tǒng)用以記錄進(jìn)程信息的“進(jìn)程鏈表”中刪除,這樣進(jìn)程管理工具就無法從“進(jìn)程鏈表”中獲得木馬的進(jìn)程信息了。但由于缺乏平臺(tái)通用性而且在程序運(yùn)行時(shí)有一些問題,所以沒有被廣泛采用。

          你知道嗎——什么是Hook

          Hook是Windows中提供的一種用以替換DOS下“中斷”的一種系統(tǒng)機(jī)制,中文譯名為“掛鉤”或“鉤子”。在對(duì)特定的系統(tǒng)事件(包括上文中的特定API函數(shù)的調(diào)用事件)進(jìn)行Hook后,一旦發(fā)生已Hook的事件,對(duì)該事件進(jìn)行Hook的程序(如:木馬)就會(huì)收到系統(tǒng)的通知,這時(shí)程序就能在第一時(shí)間對(duì)該事件做出響應(yīng)(木馬程序便搶在函數(shù)返回前對(duì)結(jié)果進(jìn)行了修改)。

          毫無蹤跡:全方位立體隱藏

          利用剛才介紹的Hook隱藏進(jìn)程的手段,木馬可以輕而易舉地實(shí)現(xiàn)文件的隱藏,只需將Hook技術(shù)應(yīng)用在文件相關(guān)的API函數(shù)上即可,這樣無論是“資源管理器”還是殺毒軟件都無法找出木馬所在了。更令人吃驚的是,現(xiàn)在已經(jīng)有木馬(如:灰鴿子)利用該技術(shù)實(shí)現(xiàn)了文件和進(jìn)程的隱藏。要防止這種木馬最好的手段仍是利用殺毒軟件在其運(yùn)行前進(jìn)行攔截。

          跟殺毒軟件對(duì)著干:反殺毒軟件外殼

          木馬再狡猾,可是一旦被殺毒軟件定義了特征碼,在運(yùn)行前就被攔截了。要躲過殺毒軟件的追殺,很多木馬就被加了殼,相當(dāng)于給木馬穿了件衣服,這樣殺毒軟件就認(rèn)不出來了,但有部分殺毒軟件會(huì)嘗試對(duì)常用殼進(jìn)行脫殼,然后再查殺(小樣,別以為穿上件馬夾我就不認(rèn)識(shí)你了)。除了被動(dòng)的隱藏外,最近還發(fā)現(xiàn)了能夠主動(dòng)和殺毒軟件對(duì)著干的殼,木馬在加了這種殼之后,一旦運(yùn)行,則外殼先得到程序控制權(quán),由其通過各種手段對(duì)系統(tǒng)中安裝的殺毒軟件進(jìn)行破壞,最后在確認(rèn)安全(殺毒軟件的保護(hù)已被瓦解)后由殼釋放包裹在自己“體內(nèi)”的木馬體并執(zhí)行之。對(duì)付這種木馬的方法是使用具有脫殼能力的殺毒軟件對(duì)系統(tǒng)進(jìn)行保護(hù)。

          你知道嗎——什么是殼

          顧名思義,你可以很輕易地猜到,這是一種包在外面的東西。沒錯(cuò),殼能夠?qū)⑽募?比如EXE)包住,然后在文件被運(yùn)行時(shí),首先由殼獲得控制權(quán),然后釋放并運(yùn)行包裹著的文件體。很多殼能對(duì)自己包住的文件體進(jìn)行加密,這樣就可以防止殺毒軟件的查殺。比如原先殺毒軟件定義的該木馬的特征是“12345”,如果發(fā)現(xiàn)某文件中含有這個(gè)特征,就認(rèn)為該文件是木馬,而帶有加密功能的殼則會(huì)對(duì)文件體進(jìn)行加密(如:原先的特征是“12345”,加密后變成了“54321”,這樣殺毒軟件當(dāng)然不能靠文件特征進(jìn)行檢查了)。脫殼指的就是將文件外邊的殼去除,恢復(fù)文件沒有加殼前的狀態(tài)。


          主站蜘蛛池模板: 国产一区二区三区不卡AV| 亚洲综合av一区二区三区不卡| 夜夜爽一区二区三区精品| 97久久精品一区二区三区| 久久国产精品一区| 精品视频一区在线观看| 亚无码乱人伦一区二区| 日韩精品一区二区三区老鸦窝| 欧美日韩国产免费一区二区三区 | 国产伦精品一区二区| 性色AV 一区二区三区| 亚洲AV美女一区二区三区| 国产人妖视频一区二区| 无码视频一区二区三区在线观看 | 中文无码AV一区二区三区| 无人码一区二区三区视频| 亚洲AV无码一区二区三区系列| 免费视频精品一区二区三区| 亚洲一区精品视频在线| 国产精品亚洲一区二区在线观看 | 亚洲视频一区在线| 亚洲一区二区三区在线| 八戒久久精品一区二区三区| 亚洲av区一区二区三| 91视频一区二区| 乱中年女人伦av一区二区| 亚洲视频在线一区| 日本精品高清一区二区2021| 日韩制服国产精品一区| 少妇激情一区二区三区视频| 中文字幕精品一区二区三区视频| 精品香蕉一区二区三区| 日韩一区在线视频| 国产精品成人免费一区二区| 无码午夜人妻一区二区三区不卡视频| 成人免费观看一区二区| 国产一区二区三区高清在线观看| 免费一本色道久久一区| 91一区二区在线观看精品| 国模丽丽啪啪一区二区| 精品一区二区三区视频|