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

正文內容

apihook完全手冊-展示頁

2025-07-04 06:00本頁面
  

【正文】 its old protect statusbProtectResult =::VirtualProtect(,PAGE_READONLY,amp。pfnReplacementFuncAddr, sizeof( PROC * ), amp。dwOldProtect )。 if( ::VirtualQuery( ppfnEntry, amp。DWORD dwOldProtect = 0。SIZE_T sBytesWritten。}修改的時候,需要改變該塊內存的保護為可讀寫,需要通過VirtualQuery獲得內存的信息,然后通過VirtualProtectEx修改為可讀寫。(pThunk)。s functionsPIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA) ( (PBYTE)hModule + pidFirstThunk )。}找到相應的DLL之后,遍歷其IAT表,根據地址pfnCurrentFuncAddr找到相應的表項,修改之// get caller39。}pid++。// find the corresponding itemwhile( pidName ){// pidName contains the RVA addr of the module name stringPSTR pszModName = (PSTR) ( (PBYTE)hModule + pidName )。這個函數(shù)返回一個IMAGE_IMPORT_DESCRIPTOR的指針,指向輸入描述符數(shù)據。PIMAGE_IMPORT_DESCRIPTOR pid = (PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData(hModule,TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,amp。這樣,進程在調用API的時候就會調用我們所提供的新的API的地址。這是經過編譯器優(yōu)化過的調用方法,通常速度要比原來的CALL+JMP快一些。如果加以優(yōu)化,那么調用代碼是下面這樣:XXXXXXXX CALL DWORD PTR [XXXXXXXX]其中[XXXXXXXX]指向IAT(Import Address Table)即輸入地址表中的表項。Call語句則調用下面的語句:0040101A JMP DWORD PTR [00402000]上面的代碼稱為樁代碼(Stub code),jmp語句中的目標地址[00402000]才是API函數(shù)的地址。由于操作系統(tǒng)的API也是在DLL之中實現(xiàn)的,因此應用程序調用API也要通過動態(tài)連接。程序通過這些信息找到相應的DLL,從而調用這些外部函數(shù)。它們的代碼位于DLL之中,程序通過引用其DLL來訪問這些函數(shù)。輸入表(Import Table)是來放置輸入函數(shù)(Imported functions)的一個表。當PE文件被裝入內存中的時候,Windows把PE文件裝入到某個特定的位置,稱為映像基址(Image Base)。PE文件中的數(shù)據位置使用RVA(Relative Virtual Address)來表示。數(shù)據目錄和其他描述文件屬性的數(shù)據和在一起稱為PE文件頭。所有的這些IMAGE_SECTION_HEADER結構組成一個節(jié)表(Section Table),這個表被放在所有節(jié)數(shù)據的前面。2. 修改PE文件的IAT (Import Address Table),使之指向自己的代碼,這樣EXE/DLL在調用系統(tǒng)API的時候便會調用你自己的函數(shù)2 PE文件結構和輸入函數(shù)Windows9x、Windows NT、Windows 2000/XP/2003等操作系統(tǒng)中所使用的可執(zhí)行文件格式是純32位PE(Portable Executable)文件格式,大致如下:文件中數(shù)據被分為不同的節(jié)(Section)。 Hook API常用的方法有:1. 找到API函數(shù)在內存中的地址,改寫函數(shù)頭幾個字節(jié)為JMP指令跳轉到自己的代碼,執(zhí)行完畢再執(zhí)行API開頭幾個字節(jié)的內容再跳回原地址。4. 如果你只是要掛接某個特定進程的并且情況允許你自己來創(chuàng)建此進程,你可以調用CreateProcess(…, CREATE_SUSPENDED)創(chuàng)建子進程并暫停運行,然后修改入口代碼使之調用LoadLibrary加載自己的DLL。3. 使用CreateRemoteThread函數(shù)在目標進程中創(chuàng)建遠程線程這種方法可以在任意的目標進程中創(chuàng)建一個遠程線程,遠程線程中可以執(zhí)行任意代碼,這樣便可以做到把我們的代碼Inject到目標進程中。類似的,只有用到GUI的進程才會被掛接。但是如果你的API Hook程序需要監(jiān)視系統(tǒng)中所有進程的話,這種方法的限制將是非常致命的。這種方法的主要問題在于。User32在這個時候讀取注冊表項中的值,調用LoadLibrary加載各個DLL。API Hook是什么我就不多說了,直接進入正題。API Hook技術主要有下面的技術難點:1. 如何將自己的的代碼Inject到其他進程2. 如何Hook到API 代碼的Injection常用的方法有:1. 使用注冊表HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs這種方法可以指定多個DLL,用空格隔開。顯然使用這種方法要求設置注冊表之后立刻重起系統(tǒng),不過一般情況下這不是大問題。所以如果你的API Hook程序不打算監(jiān)視CUI程序的話,那么可能問題并不太大。2. 調用SetWindowsHookEx(WH_GETMESSAGE, …, 0)可以使用SetWindowsHookEx(WH_GETMESSAGE, …, 0) 設置全局的消息鉤子,雖然可能你的程序并不用到消息鉤子,但是鉤子的一個副作用是會將對應的DLL加載到所有的GUI線程之中。雖然有這種限制,這種方法仍然是最常用的掛接進程的方法。這種方法具有最大的靈活性,但是難度也最高:a) 遠程線程代碼必須可以自重定位b) 要能夠監(jiān)視進程的啟動和結束,這樣才可以掛接到所有進程這兩個問題都是可以解決的,在本文中我將重點講述如何創(chuàng)建遠程線程和解決這兩個問題。該方法在不同CPU之間顯然是無法移植的。這種方法對CPU有較大的依賴性,而且在多線程環(huán)境下可能出問題,當改寫函數(shù)代碼的時候有可能此函數(shù)正在被執(zhí)行,這樣做可能導致程序出錯。代碼(.code)、初始化的數(shù)據(.idata),未初化的數(shù)據(.bss)等被按照屬性被分類放到不同的節(jié)中,每個節(jié)的屬性和位置等信息用一個IMAGE_
點擊復制文檔內容
法律信息相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1