最基本的隱藏不可見窗體+隱藏文件
木馬程序無論如何神秘但歸根究底仍是Win平台下的一種程序Windows下常見的程序有兩種
Win應用程序(WinApplication)比如QQOffice等都屬於此行列
Win控制台程序(WinConsole)比如硬盤引導修復程序FixMBR
其中Win應用程序通常會有應用程序界面比如系統中自帶的計算器就有提供各種數字按鈕的應用程序界面木馬雖然屬於Win應用程序但其一般不包含窗體或隱藏了窗體(但也有某些特殊情況如木馬使用者與被害者聊天的窗口)並且將木馬文件屬性設置為隱藏這就是最基本的隱藏手段稍有經驗的用戶只需打開任務管理器並且將文件夾選項中的顯示所有文件勾選即可輕松找出木馬於是便出現了下面要介紹的進程隱藏技術
第一代進程隱藏技術Windows的後門
在Windows中微軟提供了一種能將進程注冊為服務進程的方法盡管微軟沒有公開提供這種方法的技術實現細節(因為Windows的後續版本中沒有提供這個機制)但仍有高手發現了這個秘密這種技術稱為RegisterServiceProcess只要利用此方法任何程序的進程都能將自己注冊為服務進程而服務進程在Windows中的任務管理器中恰巧又是不顯示的所以便被木馬程序鑽了空子
要對付這種隱藏的木馬還算簡單只需使用其他第三方進程管理工具即可找到其所在並且采用此技術進行隱藏的木馬在Windows/XP(因為不支持這種隱藏方法)中就得現形!中止該進程後將木馬文件刪除即可可是接下來的第二代進程隱藏技術就沒有這麼簡單對付了
第二代進程隱藏技術進程插入
在Windows中每個進程都有自己的私有內存地址空間當使用指針(一種訪問內存的機制)訪問內存時一個進程無法訪問另一個進程的內存地址空間就好比在未經鄰居同意的情況下你無法進入鄰居家吃飯一樣比如QQ在內存中存放了一張圖片的數據而MSN則無法通過直接讀取內存的方式來獲得該圖片的數據這樣做同時也保證了程序的穩定性如果你的進程存在一個錯誤改寫了一個隨機地址上的內存這個錯誤不會影響另一個進程使用的內存
你知道嗎――進程(Process)是什麼
對應用程序來說進程就像一個大容器在應用程序被運行後就相當於將應用程序裝進容器裡了你可以往容器裡加其他東西(如應用程序在運行時所需的變量數據需要引用的DLL文件等)當應用程序被運行兩次時容器裡的東西並不會被倒掉系統會找一個新的進程容器來容納它
一個進程可以包含若干線程(Thread)線程可以幫助應用程序同時做幾件事(比如一個線程向磁盤寫入文件另一個則接收用戶的按鍵操作並及時做出反應互相不干擾)在程序被運行後中系統首先要做的就是為該程序進程建立一個默認線程然後程序可以根據需要自行添加或刪除相關的線程
進程插入是什麼
獨立的地址空間對於編程人員和用戶來說都是非常有利的對於編程人員來說系統更容易捕獲隨意的內存讀取和寫入操作對於用戶來說操作系統將變得更加健壯因為一個應用程序無法破壞另一個進程或操作系統的運行當然操作系統的這個健壯特性是要付出代價的因為要編寫能夠與其他進程進行通信或者能夠對其他進程進行操作的應用程序將要困難得多但仍有很多種方法可以打破進程的界限訪問另一個進程的地址空間那就是進程插入(ProcessInjection)一旦木馬的DLL插入了另一個進程的地址空間後就可以對另一個進程為所欲為比如下文要介紹的盜QQ密碼
木馬是如何盜走QQ密碼的
普通情況下一個應用程序所接收的鍵盤鼠標操作別的應用程序是無權過問的可盜號木馬是怎麼偷偷記錄下我的密碼的呢?木馬首先將個DLL文件插入到QQ的進程中並成為QQ進程中的一個線程這樣該木馬DLL就赫然成為了QQ的一部分!然後在用戶輸入密碼時因為此時木馬DLL已經進入QQ進程內部所以也就能夠接收到用戶傳遞給QQ的密碼鍵入了真是家賊難防啊!
如何插入進程
()使用注冊表插入DLL
早期的進程插入式木馬的伎倆通過修改注冊表中的[HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_DLLs]來達到插入進程的目的缺點是不實時修改注冊表後需要重新啟動才能完成進程插入
()使用掛鉤(Hook)插入DLL
比較高級和隱蔽的方式通過系統的掛鉤機制(即Hook類似於DOS時代的中斷)來插入進程(一些盜QQ木馬鍵盤記錄木馬以Hook方式插入到其他進程中偷雞摸狗)需要調用SetWindowsHookEx函數(也是一個WinAPI函數)缺點是技術門檻較高程序調試困難這種木馬的制作者必須具有相當的Win編程水平
你知道嗎――什麼是API
Windows中提供各種功能實現的接口稱為WinAPI(ApplicationProgrammingInterface即應用程序編程接口)如一些程序需要對磁盤上的文件進行讀寫就要先通過對相應的API(文件讀寫就要調用文件相關的API)發出調用請求然後API根據程序在調用其函數時提供的參數(如讀寫文件就需要同時給出需要讀寫的文件的文件名及路徑)來完成請求實現的功能最後將調用結果(如寫入文件成功或讀取文件失敗等)返回給程序
()使用遠程線程函數(CreateRemoteThread)插入DLL
在Windows及以上的系統中提供了這個遠程進程機制可以通過一個系統API函數來向另一個進程中創建線程(插入DLL)缺點很明顯僅支持Windows及以上系統在國內仍有相當多用戶在使用Windows所以采用這種進程插入方式的木馬缺乏平台通用性
木馬將自身作為DLL插入別的進程空間後用查看進程的方式就無法找出木馬的蹤跡了你能看到的僅僅是一些正常程序的進程但木馬卻已經偷偷潛入其中了解決的方法是使用支持進程模塊查看的進程管理工具(如Windows優化大師提供的進程查看)木馬的DLL模塊就會現形了
不要相信自己的眼睛恐怖的進程蒸發
嚴格地來講這應該算是第代的進程隱藏技術了可是它卻比前幾種技術更為可怕得多這種技術使得木馬不必將自己插入到其他進程中而可以直接消失!
它通過Hook技術對系統中所有程序的進程檢測相關API的調用進行了監控任務管理器之所以能夠顯示出系統中所有的進程也是因為其調用了EnumProcesses等進程相關的API函數進程信息都包含在該函數的返回結果中由發出調用請求的程序接收返回結果並進行處理(如任務管理器在接收到結果後就在進程列表中顯示出來)
From:http://tw.wingwit.com/Article/os/xtgl/201404/30351.html