91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HOOK -- IAT HOOK 本進程MessageBox

發布時間:2020-06-06 13:07:22 來源:網絡 閱讀:1325 作者:天晴V587 欄目:安全技術

結合網上資料、使用IAT HOOK截獲MessageBox函數、、、

步驟如下

1..寫一個自己的MessageBox函數注意調用約定為__stdcall、、

2..定義一MessageBox函數指針如下

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

3..遍歷本進程的導入表尋找MessageBox的地址、、

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


#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函數    ****************************/

       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  不是以序號導入

             {

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

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

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

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

                   {

                     //獲取以pFirstThunk開始的內存的信息并將其保存到MEMORY_BASIC_INFORMATION結構中

                     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開始的內存的的保護屬性為PAGE_READWRITE并將原保護屬性保存到&dwOLD中

                     DWORD dwOLD;

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

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

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

                      //結果正確的話就是當本程序調用messagebox的時候程序轉去執行咱的HookMBox函數

                     //并且在咱的HookMBox函數中咱還調用了真正的messagebox函數、、

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

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

                     //恢復之前更改的內存的保護屬性為人家自己的、、            

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

                    break;

             }

             }

             pOriginalThunk++;

             pFirstThunk++;

      }

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

      return 0;

}

int main()

{

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

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

}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

库尔勒市| 读书| 高尔夫| 桂阳县| 铜梁县| 盐池县| 陕西省| 武宣县| 霸州市| 松潘县| 哈尔滨市| 那坡县| 泽州县| 微山县| 丹凤县| 临漳县| 政和县| 临颍县| 呈贡县| 甘孜| 麦盖提县| 铁岭市| 介休市| 涿州市| 澳门| 罗田县| 邹平县| 林州市| 喀喇沁旗| 安西县| 武城县| 苏尼特左旗| 纳雍县| 沾化县| 黄平县| 陈巴尔虎旗| 雅安市| 汉沽区| 上饶县| 黄石市| 犍为县|