第4講虛擬內(nèi)存應(yīng)用例子_第1頁(yè)
第4講虛擬內(nèi)存應(yīng)用例子_第2頁(yè)
第4講虛擬內(nèi)存應(yīng)用例子_第3頁(yè)
第4講虛擬內(nèi)存應(yīng)用例子_第4頁(yè)
第4講虛擬內(nèi)存應(yīng)用例子_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、如何獲取如何獲取PasswordPassword?蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)1 1蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)2 2WindowsWindows進(jìn)程虛擬內(nèi)存空間進(jìn)程虛擬內(nèi)存空間進(jìn)程虛擬內(nèi)存進(jìn)程虛擬內(nèi)存空間空間(32位位)u空間大小為空間大小為4GB(232) n用戶用戶區(qū)區(qū):2GBn頁(yè)交換區(qū),可對(duì)換到外存頁(yè)交換區(qū),可對(duì)換到外存n系統(tǒng)區(qū)系統(tǒng)區(qū)(2GB)n在核心態(tài)可訪問(wèn)的存儲(chǔ)在核心態(tài)可訪問(wèn)的存儲(chǔ)區(qū)區(qū)u頁(yè)面大小為頁(yè)面大小為4KB(212)蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)3 3進(jìn)程空間的分區(qū)進(jìn)程空

2、間的分區(qū)用戶區(qū)內(nèi)的空閑區(qū)用戶區(qū)內(nèi)的空閑區(qū)(free, unallocated) 空閑區(qū) 空閑區(qū) 空閑區(qū)蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)4 4和虛擬內(nèi)存操作相關(guān)的函數(shù)和虛擬內(nèi)存操作相關(guān)的函數(shù) 獲取獲取OSOS系統(tǒng)信息系統(tǒng)信息 頁(yè)面大小,分配粒度頁(yè)面大小,分配粒度 uGetSystemInfo( ) ( ) 分配和釋放虛擬內(nèi)存分配和釋放虛擬內(nèi)存uVirtualAlloc( )( )和和VirtualFree( ) ( ) 獲取內(nèi)存狀態(tài)獲取內(nèi)存狀態(tài)【虛擬內(nèi)存虛擬內(nèi)存】 uGlobalMemoryStatus( ) ( ) 確定虛擬地址空間的狀態(tài)確定虛擬地址空間的狀態(tài)u

3、VirtualQuery( )( )或或VirtualQueryEx( ) ( ) 改變頁(yè)面的保護(hù)屬性改變頁(yè)面的保護(hù)屬性u(píng)VirtualProtect( )( )和和VirtualProtectEx( ) ( ) 虛擬內(nèi)存的讀寫虛擬內(nèi)存的讀寫 uReadProcessMemory( ) ( ) 和和WriteProcessMemory( ) ( ) 蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)5 5在應(yīng)用程序中分配虛擬內(nèi)存在應(yīng)用程序中分配虛擬內(nèi)存LPVOID VirtualAlloc( LPVOID lpAddress, DWORD dwSize, DWORD flAllo

4、cationType, DWORD flProtect ); 蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)6 6在應(yīng)用程序中釋放虛擬內(nèi)存在應(yīng)用程序中釋放虛擬內(nèi)存BOOL VirtualFree( LPVOID lpAddress, DWORD dwSize, DWORD dwFreeType );蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)7 7改變頁(yè)面的保護(hù)屬性改變頁(yè)面的保護(hù)屬性 BOOL VirtualProtect( PVOID pvAddress, DWORD dwSize, DWORD flNewProtect, PDWORD pflOldPr

5、otect ); BOOL VirtualProtectEx( HANDLE hProcess, PVOID pvAddress, DWORD dwSize, DWORD flNewProtect, PDWORD pflOldProtect );蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)8 8虛擬內(nèi)存的讀虛擬內(nèi)存的讀BOOL ReadProcessMemory( HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead ); 蘇曙光蘇曙

6、光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)9 9虛擬內(nèi)存的寫虛擬內(nèi)存的寫B(tài)OOL WriteProcessMemory( HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesWritten );如何獲取如何獲取PasswordPassword?蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)1010 要“讀取”某個(gè)控件的內(nèi)容(例如編輯框編輯框)通常都是向其發(fā)送 WM_GETTEXT消息。u如果該編輯框編輯框?qū)儆谶h(yuǎn)程進(jìn)程(并具有 ES_P

7、ASSWORD式樣,上面方法失效。u 問(wèn)題:如何在遠(yuǎn)程進(jìn)程的地址空間執(zhí)行SendMessage( hPwdEdit, WM_GETTEXT, nMaxChars, psBuffer );蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)1111通常有三種方法來(lái)解決這個(gè)問(wèn)題u1.將用戶代碼放入某個(gè) DLL,然后通過(guò) Windows 鉤子映射該DLL到遠(yuǎn)程進(jìn)程;u2.將用戶代碼放入某個(gè) DLL,通過(guò) CreateRemoteThread 和 LoadLibrary 技術(shù)映射該DLL到遠(yuǎn)程進(jìn)程;u3.如果不寫單獨(dú)的 DLL,可將用戶代碼拷貝到遠(yuǎn)程進(jìn)程(通過(guò) WriteProcessMe

8、mory)并用 CreateRemoteThread 啟動(dòng)它的執(zhí)行。蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)1212方法二:方法二: 方法二:將用戶代碼放入 DLL,通過(guò) CreateRemoteThread 和 LoadLibrary 技術(shù)映射該DLL到遠(yuǎn)程進(jìn)程; 進(jìn)程通過(guò) LoadLibrary API 動(dòng)態(tài)加載DLL。 問(wèn)題:如何強(qiáng)制一個(gè)遠(yuǎn)程進(jìn)程調(diào)用這個(gè)函數(shù)呢?u答案:CreateRemoteThread創(chuàng)建遠(yuǎn)程線程執(zhí)行該函數(shù)。蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)1313CreateThreadCreateThread函數(shù)函數(shù) HAND

9、LE CreateThread (LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_ROUTINE ThreadFunction, LPVOID lpParameter, /線程函數(shù)的參數(shù)線程函數(shù)的參數(shù)DWORD dwCreationFlags, LPDWORD lpThreadId ); 線程函數(shù)的原型線程函數(shù)的原型DWORD ThreadFunction ( LPVOID lpParameter /參數(shù)參數(shù) ) 創(chuàng)建遠(yuǎn)程創(chuàng)建遠(yuǎn)程線程線程 :CreateRemoteThreadu在遠(yuǎn)程進(jìn)程地址空間創(chuàng)建一

10、個(gè)線程在遠(yuǎn)程進(jìn)程地址空間創(chuàng)建一個(gè)線程 HANDLE CreateRemoteThread( HANDLE hProcess, / 目標(biāo)進(jìn)程目標(biāo)進(jìn)程 LPSECURITY_ATTRIBUTES lpThreadAttributes, / 安全屬性安全屬性 DWORD dwStackSize, / 堆棧大小堆棧大小 LPTHREAD_START_ROUTINE ThreadFunc , / 線程函數(shù)線程函數(shù) LPVOID lpParameter, / 線程參數(shù)線程參數(shù) DWORD dwCreationFlags, / 創(chuàng)建標(biāo)志創(chuàng)建標(biāo)志 LPDWORD lpThreadId / 線程線程ID); 把

11、LoadLibrary/FreeLibrary作為 CreateRemoteThread函數(shù)的線程例程。u問(wèn)題1:LoadLibrary/FreeLibrary的函數(shù)指針?nLoadLibrary和 FreeLibray兩個(gè)函數(shù)都在 kernel32.dll 中。且每個(gè)進(jìn)程都加載kernel32.dll, 且LoadLibrary和 FreeLibray兩個(gè)函數(shù)加載地址相同。因此,只要獲取該地址然后傳遞到CreateRemoteThread就可以。u問(wèn)題2:如果ThreadFunc 的參數(shù)lpParameter被解釋為指針針,則它必須指向遠(yuǎn)程進(jìn)程內(nèi)的數(shù)據(jù)遠(yuǎn)程進(jìn)程內(nèi)的數(shù)據(jù)。如何實(shí)現(xiàn)?n通過(guò)Wri

12、teProcessMemory在遠(yuǎn)程進(jìn)程虛擬內(nèi)存虛擬內(nèi)存中寫入DLL模塊名(LoadLibrary需要的DLL名)即可。蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)1616 實(shí)際要注入的代碼(例如SendMessage代碼被放在DllMain 的DLL_PROCESS_ATTACH事件中)現(xiàn)在已經(jīng)被執(zhí)行。蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)1717從目標(biāo)進(jìn)程中將DLL 卸載蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)1818進(jìn)程間通信問(wèn)題:uDLL獲取了包含密碼的編輯框的文本,它必須將它發(fā)送回原程序,以便能正確顯示出來(lái)。方法:

13、u文件映射uWM_COPYDATAu剪貼板u#pragma data_seg 共享數(shù)據(jù)段u蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)1919總結(jié):實(shí)現(xiàn)步驟總結(jié):實(shí)現(xiàn)步驟 1.獲取遠(yuǎn)程進(jìn)程(OpenProcess)的 HANDLE; 2.為遠(yuǎn)程進(jìn)程中的 DLL名分配內(nèi)存(VirtualAllocEx); 3.將 DLL全路徑名寫入分配的內(nèi)存:WriteProcessMemory; 4. CreateRemoteThread 和 LoadLibrary 將DLL映射到遠(yuǎn)程進(jìn)程;u在DLL的 DLL_PROCESS_ATTACH事件中獲取密碼 5.等待線程終止(WaitForS

14、ingleObject),即直到 LoadLibrary 調(diào)用返回; 用合適的方法接收和處理獲取的密碼 6.獲取遠(yuǎn)程線程的退出代碼(GetExitCodeThread)并釋放分配的虛擬地址(VirtualFreeEx); 7.用 CreateRemoteThread和FreeLibrary從遠(yuǎn)程進(jìn)程卸載 DLL。 8. 關(guān)閉所有句柄。蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)2020新增一個(gè)大作業(yè)新增一個(gè)大作業(yè)編寫一個(gè)程序,能夠獲取普通的第三方進(jìn)程中某編寫一個(gè)程序,能夠獲取普通的第三方進(jìn)程中某個(gè)窗口上的文本編輯框(尤其是密碼框)的內(nèi)容。個(gè)窗口上的文本編輯框(尤其是密碼框)

15、的內(nèi)容。蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)2121蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)2222例子例子功能:功能:u在在指定進(jìn)程指定進(jìn)程中加載中加載用戶用戶DLL,要進(jìn)行,要進(jìn)行虛擬內(nèi)存讀寫虛擬內(nèi)存讀寫n在進(jìn)程中創(chuàng)建一個(gè)在進(jìn)程中創(chuàng)建一個(gè)遠(yuǎn)程線程遠(yuǎn)程線程(負(fù)責(zé)加載用戶負(fù)責(zé)加載用戶DLL)。n遠(yuǎn)程線程遠(yuǎn)程線程:在第三方空間運(yùn)行,需要在第三方空間運(yùn)行,需要參數(shù)參數(shù),VMn線程函數(shù):線程函數(shù):LoadLibrary( “用戶編寫的用戶編寫的DLL模塊模塊” )相關(guān)函數(shù)相關(guān)函數(shù)uOpenProcess:打開目標(biāo)進(jìn)程;:打開目標(biāo)進(jìn)程;uVirtua

16、lAllocEx/VirtualFreeEx:分配:分配/釋放內(nèi)存;釋放內(nèi)存;uWriteProcessMemory:寫虛擬內(nèi)存;:寫虛擬內(nèi)存;uLoadLibrary( ) ;裝載裝載DLL模塊模塊uCreateRemoteThread 創(chuàng)建遠(yuǎn)程線程。創(chuàng)建遠(yuǎn)程線程。蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)2323OpenProcess OpenProcess /打開目標(biāo)進(jìn)程打開目標(biāo)進(jìn)程 HANDLE hProcess = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRI

17、TE, FALSE, dwProcessID ); 第一個(gè)參數(shù)指定操作權(quán)限:第一個(gè)參數(shù)指定操作權(quán)限:uROCESS_CREATE_THREAD:在該進(jìn)程中創(chuàng)建新線程:在該進(jìn)程中創(chuàng)建新線程nCreateRemoteThreaduPROCESS_VM_OPERATION:分配:分配/釋放內(nèi)存釋放內(nèi)存nVirtualAllocEx/VirtualFreeExuPROCESS_VM_WRITE:向進(jìn)程地址空間寫:向進(jìn)程地址空間寫nWriteProcessMemory蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)2424主窗口主窗口蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華

18、中科技大學(xué)2525蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)2626主窗口主窗口蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)2727蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)2828主窗口主窗口蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)2929UserMonitor.dllUserMonitor.dll蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)3030蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .華中科技大學(xué)華中科技大學(xué)3131主窗口主窗口查找感興趣的目標(biāo)進(jìn)程szTarget準(zhǔn)備加載 Monitor.dll準(zhǔn)備卸載 Monitor.dll蘇曙光蘇曙光. .軟件學(xué)院軟件學(xué)院. .

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論