亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

Inline Hook(ring3)的簡單C++實現方法

2020-01-26 15:25:32
字體:
來源:轉載
供稿:網友

C++的Inline Hook代碼,采用了備份dll的方法,因此在自定義的函數中可以直接調用在內存中備份的dll代碼,而不需要把函數頭部改來改去。用SetWindowsHookEx程序的穩定性應該會增加許多。

需要注意的是,例子中沒有把原函數的頭部幾個字節改回去是因為,程序很簡單,僅僅測試了效果后便可以退出,沒有其他的功能。實際應用中,還要在你注入的dll模塊卸載時,把原函數的頭幾個字節改回去,以免影響到程序繼續運行的穩定性。(因為注入的程序不是自己的,我們當然不可能知道它到底在何時、有多少個我們所Hook的函數的調用)。

具體實現代碼如下:

#include <ntifs.h>#include <windef.h> #include <stdio.h>#pragma comment(lib, "psapi.lib")//BYTE Org_Code[7];// 備份dll法, 因此就可以不需要BYTE New_Code[7];HMODULE hDllHandle = NULL; // 被 Hook 的 DLL 句柄HANDLE hProcess = NULL; // 進程句柄LPVOID _MessageBoxA = NULL; // MessageBoxA() 原地址DWORD _ShowMessage = NULL; // 自定義函數地址void InlineHook();//void UnInlineHook(); // 備份dll法, 因此就可以不需要void BackupDll();// 自定義函數int WINAPI ShowMessage(HWND, LPTSTR, LPTSTR, UINT);void main(){  hProcess = ::GetCurrentProcess();  hDllHandle = ::LoadLibrary("user32.dll");  if (hDllHandle == NULL)    return;  _MessageBoxA = (LPVOID)::GetProcAddress(hDllHandle, "MessageBoxA");  if (_MessageBoxA == NULL)    return;  BackupDll();  InlineHook();  char szText[256];  char szTitle[256];  memset(szText, 0x0, sizeof(szText));  memset(szTitle, 0x0, sizeof(szTitle));  // 下列循環接收來自于用戶輸入的字符, 并使用 MessageBoxA()  //來顯示, 嘗試下, 看看發生了什么. :)  while (TRUE)  {    printf("Message Text: ");    scanf("%s", szText);    printf("Message Title: ");    scanf("%s", szTitle);    MessageBoxA(NULL, szText, szTitle, 0);    printf("/n");  }  return;}void InlineHook(){  DWORD _JmpAddr = (DWORD)ShowMessage;  // 構造新頭部代碼  New_Code[0] = 0xB8;            //  memcpy(&New_Code[1], &_JmpAddr, 4);    // mov eax, _JmpAddr  New_Code[5] = 0xFF;            //  New_Code[6] = 0xE0;            // jmp eax  DWORD dwOldProtect = 0;  // 去內存保護  ::VirtualProtect(_MessageBoxA, 7, PAGE_EXECUTE_READWRITE, &dwOldProtect);  // 把新代碼寫入 MessageBoxA() 的頭部, 這也是Inline Hook  //的核心所在.  ::WriteProcessMemory(    hProcess,    _MessageBoxA,    New_Code,    sizeof(New_Code),    NULL  );  // 寫內存保護  ::VirtualProtect(_MessageBoxA, 7, dwOldProtect, &dwOldProtect);  return;}/*void UnInlineHook() // 備份dll法, 因此就可以不需要{  return;}*/int WINAPI ShowMessage(HWND hWnd, LPTSTR lpText, LPTSTR lpTitle, UINT uType){  typedef int WINAPI SHOWMSG(HWND hWnd, LPTSTR lpText, LPTSTR lpTitle, UINT uType);  SHOWMSG *pShowMsg = (SHOWMSG*)_ShowMessage;  // 廢棄原先傳入的參數, 自己定義對話框文本  char buf[1024];  ::wsprintf(buf, "The Text:"%s" was hacked by miku_fl", lpText);  return pShowMsg(hWnd, buf, lpTitle, MB_ICONINFORMATION | MB_TOPMOST);}void BackupDll(){  MODULEINFO  Mdl_Info;  LPVOID    lpNewDLL  =  NULL;  // 獲取模塊信息  ::GetModuleInformation(hProcess, hDllHandle, &Mdl_Info, sizeof(Mdl_Info));  // 分配內存空間, 用于備份 dll (這樣一來就不需要恢復原頭部代碼, 調用  //完之后再重新寫自定義的頭部代碼).  lpNewDLL = ::VirtualAllocEx(    hProcess,    NULL,    Mdl_Info.SizeOfImage,    MEM_COMMIT,    PAGE_EXECUTE_READWRITE  );  if (lpNewDLL == NULL)    return;  // 在分配的內存中寫入 dll 文件的內容  ::WriteProcessMemory(hProcess, lpNewDLL, Mdl_Info.lpBaseOfDll, Mdl_Info.SizeOfImage, NULL);  // 計算自定義函數的地址.  // 公式: 自定義地址 = 原API函數地址 - 模塊基址 + 分配內存的基址  _ShowMessage = (DWORD)_MessageBoxA - (DWORD)Mdl_Info.lpBaseOfDll + (DWORD)lpNewDLL;  return;}

希望本文所述程序實例能對大家有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲黄色在线观看| 国产一区欧美二区三区| 成人黄色免费网站在线观看| 亚洲最大av在线| 97热在线精品视频在线观看| 国产精品第二页| 欧洲s码亚洲m码精品一区| 中文字幕av一区二区三区谷原希美| 57pao成人永久免费视频| 国内精品久久久久久中文字幕| 国产欧美一区二区三区久久人妖| 国产做受69高潮| 久久久久久18| 亚洲欧美日韩天堂一区二区| 亚洲欧美成人一区二区在线电影| 国产日韩中文在线| 亚洲自拍欧美另类| 久久精品国产一区二区三区| 亚洲色图第一页| 美女性感视频久久久| 欧美乱大交xxxxx| 国产精品福利观看| 国产在线观看91精品一区| 日韩在线观看免费全| 国产精品精品国产| 欧美激情亚洲激情| 91精品国产亚洲| 亚洲美女av电影| 日韩av在线资源| 91成人福利在线| 色婷婷亚洲mv天堂mv在影片| 亚洲国产精品va在线| 91成人免费观看网站| 午夜精品久久久久久久男人的天堂| 国产精品一区二区三区免费视频| 亚洲国产成人久久| 日韩美女主播视频| 国产专区精品视频| 欧美性猛交xxxx久久久| 一区二区三区高清国产| 精品久久久久久亚洲精品| 亚洲国产小视频在线观看| 久久久久女教师免费一区| 92裸体在线视频网站| 亚洲视频欧美视频| 国产z一区二区三区| 精品视频9999| 日本老师69xxx| 最近2019年好看中文字幕视频| 日韩av片免费在线观看| 亚洲精品免费一区二区三区| 91久久嫩草影院一区二区| 久久九九热免费视频| 亚洲xxxx视频| 亚洲国产天堂久久综合| 亚洲视频在线看| 国内精品美女av在线播放| 日韩精品在线视频| 欧洲美女7788成人免费视频| 国产成人免费av| 国产精品久久精品| 欧美性猛交xxxx富婆弯腰| 日韩精品免费在线观看| 国产91精品在线播放| 在线精品视频视频中文字幕| 亚洲黄色片网站| 欧美成人免费小视频| 国产综合在线视频| 亚洲肉体裸体xxxx137| 亚洲综合在线中文字幕| 亚洲字幕一区二区| 欧美精品日韩三级| 欧美电影免费观看电视剧大全| 日韩在线播放一区| 91精品久久久久久综合乱菊| 欧美在线日韩在线| 日本久久亚洲电影| 久久综合伊人77777蜜臀| 91av视频在线| 国语自产精品视频在线看抢先版图片| 影音先锋欧美在线资源| 欧美性猛交xxxx乱大交3| 欧美激情中文网| 久久九九国产精品怡红院| 亚洲人a成www在线影院| 欧美刺激性大交免费视频| 欧美体内谢she精2性欧美| 欧美成年人在线观看| 在线观看91久久久久久| 亚洲第一精品夜夜躁人人爽| 日本精品视频在线| 国产精品老女人精品视频| 欧美亚洲第一页| 国产精品色悠悠| 久久久亚洲国产天美传媒修理工| 日韩a**中文字幕| 亚洲成人999| 久久99精品久久久久久青青91| 亚洲精品国产拍免费91在线| 97视频在线观看亚洲| 欧美精品激情在线| 亚洲最大成人网色| 久久精品国产久精国产一老狼| 久久99精品国产99久久6尤物| 中日韩美女免费视频网站在线观看| 国产香蕉一区二区三区在线视频| 亚洲第一综合天堂另类专| 欧美激情国产高清| 国产精品扒开腿做爽爽爽的视频| 欧美做受高潮1| 久久久久久一区二区三区| 精品无码久久久久久国产| 国模吧一区二区三区| 欧美福利视频在线观看| 国产精品视频内| 九九综合九九综合| 欧美一区二区三区精品电影| www.亚洲男人天堂| 国产拍精品一二三| 欧美日韩在线视频一区二区| 超碰97人人做人人爱少妇| 欧美亚洲激情视频| 国产一区二区三区在线| 狠狠做深爱婷婷久久综合一区| 人妖精品videosex性欧美| 成人久久18免费网站图片| 91成品人片a无限观看| 欧美色欧美亚洲高清在线视频| 性视频1819p久久| 日韩中文理论片| 国产最新精品视频| 热re91久久精品国99热蜜臀| 日韩经典中文字幕| 日韩大胆人体377p| 欧美成人精品xxx| 国内精品小视频在线观看| 91av福利视频| 国产精品久久久久久久久免费| 国产日韩在线观看av| 亚洲国产精品一区二区久| 国产精品黄色影片导航在线观看| 中文字幕日韩免费视频| 欧美专区日韩视频| 51色欧美片视频在线观看| 色中色综合影院手机版在线观看| 久久久久久国产| 欧美性xxxx极品高清hd直播| 亚洲一区二区三| 日韩欧美第一页| 狠狠色狠狠色综合日日小说| 成人福利视频网| 日韩在线一区二区三区免费视频| 一区二区三区视频免费在线观看| 国产精品99久久99久久久二8| 亚洲国产97在线精品一区| 最近2019年手机中文字幕| 国产精品欧美日韩久久| 欧美性一区二区三区| 97久久精品人人澡人人爽缅北| 国产精品美女在线观看| 欧美麻豆久久久久久中文| 欧美视频专区一二在线观看| 国产视频精品一区二区三区| 欧美老少配视频|