freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

木馬程序設(shè)計(jì)及植入技術(shù)本科生畢業(yè)論文-資料下載頁

2025-06-20 00:19本頁面
  

【正文】 案文件(Archive)或從檔案文件讀出對(duì)象。成員函數(shù)GetRuntimeClass()可以獲取到一個(gè)指向CruntimeClass類對(duì)象的指針,通過該指針可以得到對(duì)象的運(yùn)行時(shí)類信息。CObject類在診斷調(diào)試支持方面提供了成員函數(shù)AssertValid()和Dump(),前者可對(duì)對(duì)象內(nèi)存狀態(tài)的有效性進(jìn)行檢查,后者負(fù)責(zé)將對(duì)象的內(nèi)容轉(zhuǎn)儲(chǔ)到一個(gè)CdumpContext對(duì)象中,并可以提供診斷服務(wù)及一些有用的調(diào)試信息?! ≡贛FC中,CWnd類提供了所有窗口類的基本功能,是一個(gè)非常重要的類,大約三分之一的MFC類都是以此為基類。該類主要對(duì)創(chuàng)建、操縱窗口類的API函數(shù)進(jìn)行了封裝,而且通過消息映射機(jī)制隱藏了SDK編程中使用相當(dāng)不便的窗口處理函數(shù),是消息的分發(fā)處理更加方便。  CWnd類最重要的一個(gè)封裝是對(duì)API函數(shù)CreateWindow()的封裝,該函數(shù)被封裝為CWnd類成員函數(shù)Create()??瓷先ソ?jīng)過封裝的窗口創(chuàng)建函數(shù)要比原API函數(shù)復(fù)雜許多,但這并不說明MFC的封裝將導(dǎo)致編程的效率低下,恰恰相反,由于CWnd在絕大多數(shù)場(chǎng)合中是以基類的形式出現(xiàn)的,因此可在派生類中添加代碼完成對(duì)CWnd::Create()的調(diào)用而比較方便的實(shí)現(xiàn)對(duì)派生類窗口的創(chuàng)建。 MFC 應(yīng)用程序框架  MFC應(yīng)用程序框架可以看作是MFC基本類庫的一個(gè)超集(Superset),類庫是眾多可在任何程序中使用的類的集合,而應(yīng)用程序框架則定義了程序自身的結(jié)構(gòu)?! ∮捎谑褂昧薓FC應(yīng)用程序框架的程序在本質(zhì)上仍是Windows 應(yīng)用程序,因此必然需要在程序中存在作為Windows 應(yīng)用程序入口的WinMain()函數(shù)。在前面的示例代碼中之所以沒有看到WinMain()函數(shù)是由于該函數(shù)已經(jīng)通過封裝的手木馬程序設(shè)計(jì)與植入技術(shù) 第二章 木馬程序的總體設(shè)計(jì)及關(guān)鍵技術(shù)分析 18 段隱藏到應(yīng)用程序框架中了。除WinMain()外,CWinApp類成員函數(shù)Run()也是隱含執(zhí)行的,這個(gè)函數(shù)也是非常重要的,它負(fù)責(zé)把消息放進(jìn)應(yīng)用程序窗口的消息循環(huán)中,由WinMain()函數(shù)完成對(duì)Run()的調(diào)用 。當(dāng)WinMain()函數(shù)尋找到應(yīng)用程序?qū)ο蠛髮⒘⒓凑{(diào)用CWinApp類的虛函數(shù)InitInstance()。由于CWinApp基類是不知道究竟需要何種主框架窗口的,因此在使用時(shí)必須在CWinApp的派生類中對(duì)InitInstance()函數(shù)進(jìn)行重載。InitInstance()函數(shù)是在應(yīng)用程序已經(jīng)開始運(yùn)行但窗口尚未創(chuàng)建時(shí)被調(diào)用的,若非由InitInstance()創(chuàng)建了窗口,應(yīng)用程序是無法擁有窗口的,這也就意味著缺少了InitInstance()函數(shù)的應(yīng)用程序?qū)o法接收、處理消息,對(duì)Windows程序而言這也就失去了存在的意義。由此可見,從CWinApp類中進(jìn)行派生,并且對(duì)InitInstance()函數(shù)進(jìn)行重載是編寫MFC應(yīng)用程序框架程序的必要條件。  除應(yīng)用程序類外,從CFrameWnd派生的Frame類還對(duì)應(yīng)用程序的主框架窗口做了描述。在構(gòu)造函數(shù)中調(diào)用基類的CFrameWnd成員函數(shù)Create(),由Windows 負(fù)責(zé)創(chuàng)建出實(shí)際的窗口結(jié)構(gòu),并由應(yīng)用程序框架將其鏈接到C++對(duì)象。  MFC的CWinApp和CFrameWnd等基類是最主要的類,它們能夠?qū)崿F(xiàn)大多數(shù)的功能。在編程時(shí),只需在派生類中編寫少量功能代碼,C++允許以這樣的方式借用基類中的大量代碼而無須復(fù)制代碼。應(yīng)用程序框架負(fù)責(zé)提供程序的結(jié)構(gòu)框架,開發(fā)人員在此基礎(chǔ)上為其添加相應(yīng)的實(shí)現(xiàn)代碼,從而可以非常方便地完成一個(gè)完整的應(yīng)用程序。應(yīng)用程序框架不僅定義了應(yīng)用程序的結(jié)構(gòu)安排,實(shí)際上還包含了更多的C++基類。 動(dòng)態(tài)鏈接庫技術(shù)本文的郵件發(fā)送和鍵盤記錄模塊功能的實(shí)現(xiàn)分別封裝在兩個(gè)動(dòng)態(tài)鏈接庫中,因?yàn)閯?dòng)態(tài)連接庫有其獨(dú)特的優(yōu)勢(shì)。下面簡單介紹一下動(dòng)態(tài)鏈接庫。程序的實(shí)現(xiàn)形式上主要分為可執(zhí)行程序和動(dòng)態(tài)連接庫。前者獨(dú)立運(yùn)行,在本文中,前者構(gòu)成了木馬的主體部分。,這兩個(gè)動(dòng)態(tài)連接庫就是為了實(shí)現(xiàn)郵件發(fā)送和鍵盤記錄兩個(gè)分別比較獨(dú)立的功能。可以把動(dòng)態(tài)鏈接庫理解為一個(gè)函數(shù)庫。他包含了全局?jǐn)?shù)據(jù)、編譯過的函數(shù)和資源。動(dòng)態(tài)鏈接庫不能像普通的可執(zhí)行文件那樣直接運(yùn)行,而是用來為其他的exe文件或dll文件提供共享函數(shù)庫。DLL經(jīng)過編譯后,被裝入到一個(gè)預(yù)定的基地址中,如果沒有與其他DLL 沖突,文件就被映射到進(jìn)程中相同的虛地址上。與靜態(tài)庫不同的是,他不能直接鏈接到可執(zhí)行文件中,而且在程序運(yùn)行時(shí)才加載。 使用DLL 提供了一種共享數(shù)據(jù)和代碼的方便途徑,由于多個(gè)應(yīng)用程序可以共木馬程序設(shè)計(jì)與植入技術(shù) 第二章 木馬程序的總體設(shè)計(jì)及關(guān)鍵技術(shù)分析 19 享同一個(gè)DLL 中的函數(shù),因此使用 DLL可以顯著的節(jié)省磁盤空間。尤其對(duì)于Windows應(yīng)用程序,有很多操作都是標(biāo)準(zhǔn)化的,如果使用傳統(tǒng)的靜態(tài)鏈接方式,每一個(gè)需要完成這些操作的應(yīng)用程序都必須在自己的執(zhí)行文件中包括相同的代碼,這不但使應(yīng)用程序必須加載的時(shí)間變得更長,也浪費(fèi)了磁盤空間。多個(gè)應(yīng)用程序還可以同時(shí)共享DLL 在內(nèi)存中的同一份拷貝,這就有效地節(jié)省了應(yīng)用程序所占用的內(nèi)存資源,避免了頻繁的內(nèi)存交換,從而提高了應(yīng)用程序的執(zhí)行效率。由于DLL是獨(dú)立于可執(zhí)行文件的,因此,如果需要向DLL中增加新的函數(shù)或是增強(qiáng)現(xiàn)有函數(shù)的功能,只要原有函數(shù)的參數(shù)和返回值等屬性不變,那么所有使用該DLL的應(yīng)用程序都不需要重新編譯。 DLL除了包括函數(shù)的執(zhí)行代碼以外,還可以包括諸如圖標(biāo)、位圖、字符串和對(duì)話框之類的資源,因此可以把應(yīng)用程序所使用的資源獨(dú)立出來做成DLL。對(duì)于一些常用的資源,把他們做到DLL中后,就可以為多個(gè)應(yīng)用程序所共享。木馬程序設(shè)計(jì)與植入技術(shù) 第三章 木馬程序的實(shí)現(xiàn) 20 第三章 木馬程序的實(shí)現(xiàn)木馬程序包括三個(gè)大部分:第一部分為木馬主體部分,第二部分為鍵盤記錄部分,第三部分為郵件發(fā)送部分。 木馬的主體部分利用Vc++ AppWizard建立一個(gè)基于對(duì)話的名為testwk1 工程,該工程是木馬的主體部分。,來實(shí)現(xiàn)郵件發(fā)送功能,鍵盤記錄的功能。 是采用隱式鏈接的方式,隱式連接是可執(zhí)行程序同DLL間最常用的的DLL 鏈接類型。為了使用 DLL中提供的各種輸出函數(shù),必須將 DLL的頭文件添加到應(yīng)用程序工程,并在引用了此DLL 模塊的函數(shù),變量,數(shù)據(jù)結(jié)構(gòu)或符合所有源文件中包含對(duì)此頭文件的引用,否則輸入的DLL的符合將被認(rèn)為是沒有定義而使編譯器報(bào)告錯(cuò)誤信息。 文件。所以將包含了 也添加到testwk1工程中,并在鏈接時(shí)傳遞給鏈接程序,使得鏈接程序能夠知道是否存在可執(zhí)行模塊輸出的符號(hào)以及時(shí)哪一個(gè)DLL模塊輸出了此符號(hào)。鏈接程序在鏈接產(chǎn)生可執(zhí)行程序時(shí),將在生成的模塊中嵌入一個(gè)列有每一個(gè)被調(diào)用DLL模塊信息和待輸入列表。完成前述工作后,在工程對(duì)輸入函數(shù)的調(diào)用可以對(duì)想對(duì)進(jìn)程內(nèi)函數(shù)的調(diào)用一樣來使用。其具體操作如下: 添加到testwk1工程目錄下,并且在工程,設(shè)置,Project Settings, 。隱式鏈接較簡單, 文件。這種鏈接方式是在程序運(yùn)行過程中,由其空間中的線程決定是否調(diào)用DLL中的輸出函數(shù)。線程通過LoadLibrary() 將DLL顯式加載到線程的地址空間,在獲得DLL中包含的函數(shù)的虛擬內(nèi)存地址后,通過該內(nèi)存地址對(duì)輸出函數(shù)進(jìn)行調(diào)用。這種鏈接方式不同于隱式鏈接方式,全部的處理過程都是在程序運(yùn)行期間完成的。具體操作如圖31所示。 木馬程序設(shè)計(jì)與植入技術(shù) 第三章 木馬程序的實(shí)現(xiàn) 21 自身復(fù)制模塊木馬第一次進(jìn)入目標(biāo)計(jì)算機(jī),必需要找一個(gè)地方把自己隱藏起來。那么木馬隱藏在那比較安全?系統(tǒng)目錄是存放系統(tǒng)文件的地方,這里面的文件極多,而且都非常重要,即使對(duì)系統(tǒng)非常熟悉的人也不敢任意刪除系統(tǒng)目錄下的文件。所以這是木馬藏身的最好地方。首先通過API函數(shù)GetModuleFileName獲得本進(jìn)程的絕對(duì)路徑,再通過函數(shù)GetSystemDirectory獲得系統(tǒng)目錄,在同過Copefile函數(shù)將本文件考到系統(tǒng)目錄下。 所示 //獲得進(jìn)程的絕對(duì)路徑char sPath[100]。::GetModuleFileName(NULL,sPath,100。//獲得系統(tǒng)目錄 char TempPath[MAX_PATH]。 GetSystemDirectory(TempPath,MAX_PATH)。 strcat(TempPath,str)。 end=CopyFile(svExeFile,TempPath,FALSE)。圖 32 復(fù)制自身到系統(tǒng)目錄 自啟動(dòng)模塊木馬每次在用戶每次啟動(dòng)系統(tǒng)后, 自動(dòng)加載運(yùn)行。Windows的自啟動(dòng)方式有許多方式,除了一些常見的啟動(dòng)方式之外,還有一些非常隱蔽的可用來啟動(dòng)文件的圖 31 動(dòng)態(tài)裝載 static HINSTANCE hinstDLL。//定義回調(diào)函數(shù)的地址typedef void (CALLBACK *inshook)()。 inshook instkbhook。//裝載DLL模塊if(hinstDLL=LoadLibrary((LPCTSTR))){//獲取函數(shù)指針instkbhook=(inshook)GetProcAddress(hinstDLL, installhook)。 //調(diào)用DLL中的installhook()函數(shù)安裝鉤子instkbhook()。} 木馬程序設(shè)計(jì)與植入技術(shù) 第三章 木馬程序的實(shí)現(xiàn) 22 方式。木馬要做的是如何在每次用戶啟動(dòng)時(shí)自動(dòng)裝載服務(wù)端。Windows 支持多種本進(jìn)程文件地址,通過RegOpenKey函數(shù)打開注冊(cè)表,通過在Software\Microsoft\Windows\CurrentVersion\Run注冊(cè),實(shí)現(xiàn)程序的自啟動(dòng)。: ::GetModuleFileName(NULL,sPath,100)。m_strreg=_T(Software\\Microsoft\\Windows\\CurrentVersion\\Run)。RegOpenKey(HKEY_LOCAL_MACHINE,m_strreg,amp。hregkey)。DWORD type_1=REG_SZ。::RegSetValueEx(hregkey,testwk1,0,REG_SZ,(BYTE*)sPath,100)圖 33 復(fù)制自身到系統(tǒng)目錄 隱藏模塊由于木馬程序是一種惡意程序,它必須在被攻擊者沒有察覺的情況下悄悄啟動(dòng)運(yùn)行,否則會(huì)立即被用戶察覺而將其關(guān)閉,也就失去了作用,所以它不是像其它程序一樣公開顯示在任務(wù)欄和任務(wù)列表中, 而是想方設(shè)法加以隱藏。隱藏模塊主要表現(xiàn)在四個(gè)方面:任務(wù)欄隱藏、任務(wù)管理器隱藏、進(jìn)程隱藏和端口隱藏。其中任務(wù)欄隱藏和任務(wù)管理器隱藏相對(duì)比較容易。可以在編譯環(huán)境下修改相關(guān)屬性來實(shí)現(xiàn)。進(jìn)程隱藏是其難點(diǎn)。在WIN9X中,只需要將進(jìn)程注冊(cè)為系統(tǒng)服務(wù)就能夠從進(jìn)程查看器中隱形,可是這一切在WINNT中卻完全不同, 無論木馬從端口、啟動(dòng)文件上如何巧妙地隱藏自己,始終都不能欺騙WINNT的任務(wù)管理器。在WINDOWS系統(tǒng)下,可執(zhí)行文件主要是Exe和Com文件,這兩種文件在運(yùn)行時(shí)都有一個(gè)共同點(diǎn),會(huì)生成一個(gè)獨(dú)立的進(jìn)程。程序在任務(wù)欄的隱藏比較簡單, 首先要保證程序主界面的隱藏, 這可以通過修改應(yīng)用程序類的初始化實(shí)例函數(shù)Initlnstance () 的ShowWindow () 語句來實(shí)現(xiàn), 即將SWSHOW 參數(shù)改為SWHIDE. 主界面隱藏的同時(shí), 任務(wù)欄雖然也會(huì)消失。關(guān)鍵代碼。木馬程序設(shè)計(jì)與植入技術(shù) 第三章 木馬程序的實(shí)現(xiàn) 23 2.在任務(wù)列表中的隱藏任務(wù)列表(按下Ctrl+ A lt+ Del 鍵時(shí)彈出的對(duì)話框) 顯示了當(dāng)前系統(tǒng)正在運(yùn)行的一些應(yīng)用程序, 有經(jīng)驗(yàn)的用戶可以通過觀察任務(wù)列表而發(fā)現(xiàn)一些值得懷疑的應(yīng)用程序而在此將其關(guān)閉。 所以要設(shè)法實(shí)現(xiàn)了自身在任務(wù)列表中的隱藏 , 使被發(fā)現(xiàn)的機(jī)會(huì)大大降低。在W in9x中, 一般每個(gè)應(yīng)用程序都要通過一個(gè)A P I (應(yīng)用程序接口) 函數(shù) RegisterServiceProcess()向系統(tǒng)申請(qǐng)注冊(cè)成為一個(gè)服務(wù)進(jìn)程, 并且通過這個(gè)函數(shù)結(jié)束該服務(wù)進(jìn)程的運(yùn)行。如果一個(gè)進(jìn)程注冊(cè)為一個(gè)服務(wù)進(jìn)程, 那么通過Ctrl+ A lt+ Del 就可以在任務(wù)列表里看見該進(jìn)程的標(biāo)題。 而如果一個(gè)進(jìn)程運(yùn)行了但沒有向系統(tǒng)申請(qǐng)注冊(cè)成為服務(wù)進(jìn)程, 那么它就不會(huì)在任務(wù)列表里顯示.利用這個(gè)原理, 使自身在運(yùn)行時(shí)能在任務(wù)列表中實(shí)現(xiàn)隱藏. 該函數(shù)存放于系統(tǒng)內(nèi)核Kernel32. dll 中, 具體聲明下: DWORDRegisterServiceProcess(DWORD dw ProcessId,DWORD dw Type);其第一個(gè)參數(shù)指定當(dāng)前進(jìn)程的進(jìn)程標(biāo)識(shí),。第二個(gè)參數(shù)指出是注冊(cè)還是注銷當(dāng)前進(jìn)程, 將其設(shè)為1,使得進(jìn)程注冊(cè)為服務(wù)進(jìn)程,這樣就不會(huì)在任務(wù)列表中顯示。在程序啟動(dòng)初始化時(shí), 首先從Kernel32. dll 動(dòng)態(tài)連接庫中將RegisterServiceProcess() 函數(shù)加載到內(nèi)存, 然后再通過設(shè)置該函數(shù)的第一個(gè)參數(shù)和第二個(gè)參數(shù)就
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1