欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

HOOK--IATHOOK本進(jìn)程MessageBox

結(jié)合網(wǎng)上資料、使用IAT HOOK截獲MessageBox函數(shù)、、、

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、衛(wèi)濱網(wǎng)站維護(hù)、網(wǎng)站推廣。

步驟如下

1..寫一個(gè)自己的MessageBox函數(shù)注意調(diào)用約定為__stdcall、、

2..定義一MessageBox函數(shù)指針如下

    typedef int (__stdcall *pOldMBox)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption,UINT uType);

3..遍歷本進(jìn)程的導(dǎo)入表尋找MessageBox的地址、、

4..修改MessageBox所在THUNK的地址為自己寫的函數(shù)地址、、代碼如下:

#include <windows.h>

HANDLE pBegin = GetModuleHandle(NULL);

PBYTE  pBegin2 = (PBYTE)pBegin;

PIMAGE_DOS_HEADER DOS = PIMAGE_DOS_HEADER(pBegin2);

PIMAGE_NT_HEADERS NT = PIMAGE_NT_HEADERS(pBegin2+DOS->e_lfanew);

PIMAGE_OPTIONAL_HEADER OPTION = &(NT->OptionalHeader);

PIMAGE_IMPORT_DESCRIPTOR IMPORT = PIMAGE_IMPORT_DESCRIPTOR(OPTION->DataDirectory[1].VirtualAddress + pBegin2);

typedef int (__stdcall *pOldMBox)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption,UINT uType);

pOldMBox pMBox = NULL;

int __stdcall HookMBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption,UINT uType)

{

      if (NULL == pMBox)

      {

             return MessageBox(hWnd,lpText,lpCaption,uType);

      }

   else

      {

            return pMBox(NULL,"哈哈! IAT  HOOK到了","HOOK",MB_OK);

      }

}

int ReAPI(const char* DllName, const char* FunName)

{

/**************************   找相同的DLL   ****************************/

      while (IMPORT->Name)

      {

             char* OurDllName = (char*)(IMPORT->Name + pBegin2);

             if (0 == strcmpi(DllName , OurDllName))

             {

                    break;

             }

    IMPORT++;

      }

/****************************************************************************/

/*************************   找相同的API函數(shù)    ****************************/

       PIMAGE_IMPORT_BY_NAME  pImportByName = NULL;

      PIMAGE_THUNK_DATA   pOriginalThunk = NULL;

      PIMAGE_THUNK_DATA   pFirstThunk = NULL;

      pOriginalThunk = (PIMAGE_THUNK_DATA)(IMPORT->OriginalFirstThunk + pBegin2);

      pFirstThunk = (PIMAGE_THUNK_DATA)(IMPORT->FirstThunk + pBegin2);

      while (pOriginalThunk->u1.Function) //記住是Function

      {

             DWORD u1 = pOriginalThunk->u1.Ordinal;  //記住是Ordinal

             if ((u1 & IMAGE_ORDINAL_FLAG) != IMAGE_ORDINAL_FLAG)  //說明MSB不是1  不是以序號(hào)導(dǎo)入

             {

                    pImportByName = (PIMAGE_IMPORT_BY_NAME)((DWORD)pOriginalThunk->u1.AddressOfData + pBegin2);

                    char* OurFunName = (char*)(pImportByName->Name); //下邊的計(jì)算也可以

                    //char* OurFunName2 = (char*)((DWORD)pOriginalThunk->u1.AddressOfData + pBegin2 + 2);

                   if (0 == strcmpi(FunName,OurFunName))

                   {

                     //獲取以pFirstThunk開始的內(nèi)存的信息并將其保存到MEMORY_BASIC_INFORMATION結(jié)構(gòu)中

                     MEMORY_BASIC_INFORMATION mbi_thunk;

                     VirtualQuery(pFirstThunk, &mbi_thunk, sizeof(MEMORY_BASIC_INFORMATION));

                     //VirtualProtect(mbi_thunk.BaseAddress,mbi_thunk.RegionSize, PAGE_READWRITE, &mbi_thunk.Protect);

                     //修改以pFirstThunk開始的內(nèi)存的的保護(hù)屬性為PAGE_READWRITE并將原保護(hù)屬性保存到&dwOLD中

                     DWORD dwOLD;

                      VirtualProtect(pFirstThunk,sizeof(DWORD),PAGE_READWRITE,&dwOLD);

                      //更改真正MessageBoxA的地址為自己寫的HookMBox函數(shù)的地址、、

                     //將真正的地址付給先前定義的函數(shù)指針

                      //結(jié)果正確的話就是當(dāng)本程序調(diào)用messagebox的時(shí)候程序轉(zhuǎn)去執(zhí)行咱的HookMBox函數(shù)

                     //并且在咱的HookMBox函數(shù)中咱還調(diào)用了真正的messagebox函數(shù)、、

                     pMBox =(pOldMBox)(pFirstThunk->u1.Function);

                     pFirstThunk->u1.Function = (PDWORD)HookMBox;

                     //恢復(fù)之前更改的內(nèi)存的保護(hù)屬性為人家自己的、、            

                    VirtualProtect(pFirstThunk,sizeof(DWORD),dwOLD,0);

                    break;

             }

             }

             pOriginalThunk++;

             pFirstThunk++;

      }

      /****************************************************************************/

      return 0;

}

int main()

{

 ReAPI("User32.dll","MessageBoxA");

 MessageBox(NULL,"沒有HOOK到","HOOK",MB_OK);

}

標(biāo)題名稱:HOOK--IATHOOK本進(jìn)程MessageBox
標(biāo)題URL:http://chinadenli.net/article14/gioige.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、ChatGPT、面包屑導(dǎo)航做網(wǎng)站、動(dòng)態(tài)網(wǎng)站、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化