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

正文內(nèi)容

apihook完全手冊(cè)-資料下載頁

2025-06-25 06:00本頁面
  

【正文】 S_NOTIFY_ROUTINE,其定義為:VOID(*PCREATE_PROCESS_NOTIFY_ROUTINE) (IN HANDLE ParentId,IN HANDLE ProcessId,IN BOOLEAN Create)。ParentId和ProcessId用來標(biāo)識(shí)進(jìn)程,Create則是用來表示該進(jìn)程是正在被創(chuàng)建還是正在被結(jié)束。這樣,每當(dāng)進(jìn)程被創(chuàng)建或者結(jié)束的時(shí)候,操作系統(tǒng)就會(huì)立刻調(diào)用NotifyRoutine這個(gè)回調(diào)函數(shù)并正確提供參數(shù)。,屬于Windows的內(nèi)核空間,因此必須編寫一個(gè)處于內(nèi)核模式的驅(qū)動(dòng)程序才可以。但是,至此問題并沒有完全解決。內(nèi)核模式的驅(qū)動(dòng)程序和用戶模式的主程序如何通訊呢?這里就需要用到IO請(qǐng)求包IRP(IO Request Packet)。這個(gè)IRP的定義為:typedef struct _CallbackInfo{HANDLE hParentId。HANDLE hProcessId。BOOLEAN bCreate。} CALLBACK_INFO, *PCALLBACK_INFO。其字段的意義就和PCREATE_PROCESS_NOTIFY_ROUTINE一樣,不再贅述。用戶模式的程序通過DeviceIoControl函數(shù)發(fā)送IO請(qǐng)求包到內(nèi)核模式的驅(qū)動(dòng)。內(nèi)核模式接收到此請(qǐng)求包,并填寫數(shù)據(jù)到用戶程序所提供的CALLBACK_INFO緩沖區(qū)里。這樣通過檢查CALLBACK_INFO的值就可以知道hProcessId所指定的進(jìn)程是正在被創(chuàng)建或者結(jié)束了。雖然有了數(shù)據(jù)交換的機(jī)制,這還是不夠。這樣只能告訴用戶程序究竟是哪一個(gè)進(jìn)程,是創(chuàng)建還是結(jié)束,但是無法通知用戶程序此事件的發(fā)生。通常,通知某個(gè)程序某個(gè)事件的發(fā)生一般的方法是使用事件(Event)。驅(qū)動(dòng)程序創(chuàng)建一個(gè)內(nèi)核事件(Kernel Event)。用戶程序打開這個(gè)事件用于同步。每當(dāng)事件發(fā)生的時(shí)候驅(qū)動(dòng)程序就首先把該事件設(shè)置為Signaled,然后再Nonsignaled。這樣用戶程序就可以接收到通知了。但是為什么需要首先設(shè)置為Signaled,然后再Nonsignaled?因?yàn)橛脩舫绦驔]有權(quán)限來設(shè)置其狀態(tài),因此只能由驅(qū)動(dòng)程序來設(shè)置,首先設(shè)置為Signaled,然后再Nonsignaled是唯一的辦法。有了這兩種方法,就可以掛接操作系統(tǒng)中的所有進(jìn)程了。首先,主線程調(diào)用CreateToolhelp32Snapshot函數(shù)創(chuàng)建系統(tǒng)內(nèi)所有進(jìn)程的快照,掛接這些進(jìn)程,然后啟動(dòng)驅(qū)動(dòng)程序,在主程序中啟動(dòng)一個(gè)新線程等待Event來監(jiān)視新的進(jìn)程的創(chuàng)建和舊進(jìn)程的結(jié)束。驅(qū)動(dòng)程序的代碼和監(jiān)聽的代碼可以在。5 其他問題 Unicode大部分Windows API均有兩個(gè)版本:Ansi和Unicode。如GetWindowText API實(shí)際上只是一個(gè)宏,實(shí)際上在不同編譯選項(xiàng)下對(duì)應(yīng)GetWindowTextA和GetWindowTextW。在NT系統(tǒng)下,GetWindowTextA只是做一個(gè)轉(zhuǎn)換,再調(diào)用GetWindowTextW,實(shí)際的實(shí)現(xiàn)在GetWindowTextW中。因此,掛接API必須要Hook兩個(gè)版本,實(shí)際在Hook的時(shí)候,我們也可以仿照Windows的做法,讓GetWindowTextA做一個(gè)簡單字符串轉(zhuǎn)換,然后直接調(diào)GetWindowTextW即可。可能有朋友要問了,為何不直接Hook GetWindowTextW呢?反正GetWindowTextA要調(diào)GetWindowTextW就不用Hook GetWindowTextA了嘛。不過實(shí)際上,因?yàn)镚etWindowTextA和GetWindowTextW在同一個(gè)DLL中,他們的調(diào)用很有可能并不是通過IAT來,而是直接調(diào)用的關(guān)系,所以GetWindowTextA會(huì)繞過我們的Hook機(jī)制而直接調(diào)到原始的GetWindowTextW,這不是我們希望看到的,所以兩個(gè)版本保險(xiǎn)起見都應(yīng)該Hook。 IPC由于Hook的API代碼位于某個(gè)DLL中,這個(gè)DLL處于不同的進(jìn)程,因此需要用到IPC機(jī)制在主程序和其他被Hook的進(jìn)程進(jìn)行通訊。不同進(jìn)程之間的通訊稱之為IPC(Interprocess Communication),大概的方法有下面幾種:1. Pipe。管道是比較常用的IPC機(jī)制,可以傳輸大量數(shù)據(jù),代碼寫起來也比較方便。管道也可以用于網(wǎng)絡(luò)間不同計(jì)算機(jī)通訊,但是有一定限制。2. Socket。雖然Socket一般用于網(wǎng)絡(luò),但是顯然也可以用于本機(jī),優(yōu)點(diǎn)是大家可能對(duì)Socket編程比較熟悉,此外可以很容易擴(kuò)展到網(wǎng)絡(luò)之間的通訊,基本沒有限制,因此也是很不錯(cuò)的選擇。3. Message。消息一般適用于比較簡單的通訊,如果要傳遞數(shù)據(jù)必須要使用WM_COPYDATA消息。優(yōu)點(diǎn)是比較簡單,但是性能可能無法保證。4. Shared Segment。也就是共享段。簡單來說,就是把EXE/DLL中的某個(gè)段標(biāo)記為共享,這樣多個(gè)EXE/DLL的實(shí)例之間會(huì)共享同一塊內(nèi)存,通過讀寫此塊內(nèi)存便可以互相傳遞數(shù)據(jù),但是同步比較困難。具體做法是:pragma bss_seg(shared_bss)int a。pragma bss_seg()pragma ment(linker, /Section:shared_bss,rws)這樣,變量a便放在了共享段之中。5. Memory Mapped File(內(nèi)存映射文件)。比較簡單,但是缺點(diǎn)和Shared Segment類似,無法同步。6. Event/Semaphore/Mutex。這些只能用于同步,無法傳遞數(shù)據(jù)。7. …還有很多可以根據(jù)自己的情況靈活選用。6 總結(jié)API Hook的通常做法如下:1. 通過全局消息鉤子或者驅(qū)動(dòng)程序監(jiān)視進(jìn)程啟動(dòng)/結(jié)束來掛接系統(tǒng)中所有進(jìn)程a. 如果不需要掛接CUI程序則選用全局消息鉤子b. 否則則選用驅(qū)動(dòng)程序2. 通過全局消息鉤子或者遠(yuǎn)程線程來注入代碼到目標(biāo)進(jìn)程中a. 全局消息鉤子無需考慮如何加載DLL的問題,系統(tǒng)會(huì)自動(dòng)加載b. 遠(yuǎn)程線程一般直接創(chuàng)建線程執(zhí)行LoadLibrary代碼加載DLL,當(dāng)然也可以執(zhí)行自己寫的匯編代碼3. 通過修改IAT (Import Address Table)中的API地址為自己的函數(shù)地址來Hook API。所使用的API是ImageDirectoryEntryToData.4. 自己編寫的API的代碼放在DLL中以解決重定位問題(如果用全局消息鉤子的話放在DLL是強(qiáng)制要求)7 相關(guān)參考文獻(xiàn)我當(dāng)初在寫程序和寫作本文的時(shí)候,參考了下面這些書籍和文章,有興趣的朋友可以參考一下看看:Windows核心編程,第22章Windows環(huán)境下32位匯編語言程序設(shè)計(jì),第13章,17章API Hooking Revealed, 地址:Detecting Windows NT/2K process execution, 地址
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1