VC++動態(tài)鏈接庫編程之DLL木馬

VC++動態(tài)鏈接庫編程之DLL木馬

ID:41032508

大小:18.47 KB

頁數(shù):8頁

時間:2019-08-14

VC++動態(tài)鏈接庫編程之DLL木馬_第1頁
VC++動態(tài)鏈接庫編程之DLL木馬_第2頁
VC++動態(tài)鏈接庫編程之DLL木馬_第3頁
VC++動態(tài)鏈接庫編程之DLL木馬_第4頁
VC++動態(tài)鏈接庫編程之DLL木馬_第5頁
資源描述:

《VC++動態(tài)鏈接庫編程之DLL木馬》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫

1、VC++動態(tài)鏈接庫編程之DLL木馬?DLL在程序編制中可作出巨大貢獻,它提供了具共性代碼的復(fù)用能力。但是,正如一門高深的武學,若被掌握在正義之俠的手上,便可助其仗義江湖;但若被掌握在邪惡之徒的手上,則必然在江湖上掀起腥風血雨。DLL正是一種這樣的武學。DLL一旦染上了魔性,就不再是正常的DLL程序,而是DLL木馬,一種惡貫滿盈的病毒,令特洛伊一夜之間國破家亡。DLL木馬的原理DLL木馬的實現(xiàn)原理是編程者在DLL中包含木馬程序代碼,隨后在目標主機中選擇特定目標進程,以某種方式強行指定該進程調(diào)用包含木馬程序的DLL,最終達到侵襲目標系統(tǒng)的目的。正是DLL程序自身的特點決定了以這種形式加載木

2、馬不僅可行,而且具有良好的隱藏性:(1)DLL程序被映射到宿主進程的地址空間中,它能夠共享宿主進程的資源,并根據(jù)宿主進程在目標主機的級別非法訪問相應(yīng)的系統(tǒng)資源;(2)DLL程序沒有獨立的進程地址空間,從而可以避免在目標主機中留下"蛛絲馬跡",達到隱蔽自身的目的。DLL木馬實現(xiàn)了"真隱藏",我們在任務(wù)管理器中看不到木馬"進程",它完全溶進了系統(tǒng)的內(nèi)核。與"真隱藏"對應(yīng)的是"假隱藏","假隱藏"木馬把自己注冊成為一個服務(wù)。雖然在任務(wù)管理器中也看不到這個進程,但是"假隱藏"木馬本質(zhì)上還具備獨立的進程空間。"假隱藏"只適用于Windows9x的系統(tǒng),對于基于WINNT的操作系統(tǒng),通過服務(wù)管理器

3、,我們可以發(fā)現(xiàn)系統(tǒng)中注冊過的服務(wù)。DLL木馬注入其它進程的方法為遠程線程插入。遠程線程插入技術(shù)指的是通過在另一個進程中創(chuàng)建遠程線程的方法進入那個進程的內(nèi)存地址空間。將木馬程序以DLL的形式實現(xiàn)后,需要使用插入到目標進程中的遠程線程將該木馬DLL插入到目標進程的地址空間,即利用該線程通過調(diào)用WindowsAPILoadLibrary函數(shù)來加載木馬DLL,從而實現(xiàn)木馬對系統(tǒng)的侵害。DLL木馬注入程序這里涉及到一個非常重要的WindowsAPI――CreateRemoteThread。與之相比,我們所習慣使用的CreateThreadAPI函數(shù)只能在進程自身內(nèi)部產(chǎn)生一個新的線程,而且被創(chuàng)建的

4、新線程與主線程共享地址空間和其他資源。而CreateRemoteThread則不同,它可以在另外的進程中產(chǎn)生線程!CreateRemoteThread有如下特點:(1)CreateRemoteThread較CreateThread多一個參數(shù)hProcess,該參數(shù)用于指定要創(chuàng)建線程的遠程進程,其函數(shù)原型為:HANDLECreateRemoteThread(HANDLEhProcess,//遠程進程句柄LPSECURITY_ATTRIBUTESlpThreadAttributes,SIZE_TdwStackSize,LPTHREAD_START_ROUTINElpStartAddress

5、,LPVOIDlpParameter,DWORDdwCreationFlags,LPDWORDlpThreadId);(2)線程函數(shù)的代碼不能位于我們用來注入DLL木馬的進程所在的地址空間中。也就是說,我們不能想當然地自己寫一個函數(shù),并把這個函數(shù)作為遠程線程的入口函數(shù);(3)不能把本進程的指針作為CreateRemoteThread的參數(shù),因為本進程的內(nèi)存空間與遠程進程的不一樣。以下程序由作者Shotgun的DLL木馬注入程序簡化而得(單擊此處下載,在經(jīng)典書籍《Windows核心編程》中我們也可以看到類似的例子),它將d盤根目錄下的troydll.dll插入到ID為4000的進程中:#

6、include#include#includevoidCheckError(int,int,char*);//出錯處理函數(shù)PDWORDpdwThreadId;HANDLEhRemoteThread,hRemoteProcess;DWORDfdwCreate,dwStackSize,dwRemoteProcessId;PWSTRpszLibFileRemote=NULL;voidmain(intargc,char**argv){intiReturnCode;charlpDllFullPathName[MAX_PATH];WCHA

7、RpszLibFileName[MAX_PATH]={0};dwRemoteProcessId=4000;strcpy(lpDllFullPathName,"d:\troydll.dll");//將DLL文件全路徑的ANSI碼轉(zhuǎn)換成UNICODE碼iReturnCode=MultiByteToWideChar(CP_ACP,MB_ERR_INVALID_CHARS,lpDllFullPathName,strlen(lpDllFullPathN

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。