修改IAT实现本进程API HOOK

修改IAT实现本进程API HOOK
  1. //修改IAT实现本进程API HOOK  
  2. //coded by xicao  
  3. //QQ:327062448  
  4. //E-MAIL:[email protected]  
  5. #include <windows.h>  
  6. #include <imagehlp.h>//ImageDirectoryEntryToData  
  7. #pragma comment(lib,"imagehlp.lib")  
  8. /************************************************************/  
  9. char *szModName = NULL ;  
  10. char *szHacked = "不好意思hook到了!" ;  
  11. DWORD dwHookFun ;  
  12. DWORD dwHookApiAddr;  
  13. PIMAGE_IMPORT_DESCRIPTOR pImportDesc ;  
  14. PIMAGE_THUNK_DATA32 pThunk;  
  15. ULONG uSize ;  
  16. /************************************************************/  
  17. void MYhook()  
  18. {  
  19.  __asm  
  20.  {  
  21.   mov  esp,ebp  
  22.   push szHacked  
  23.   pop  DWORD PTR [ebp+12]  
  24.   pop  ebp  
  25.   jmp dwHookApiAddr  
  26.  }  
  27. }  
  28. int main()  
  29. {  
  30.  HMODULE hInstance =GetModuleHandle(NULL);  
  31.     dwHookFun = (DWORD)MYhook;  
  32.     dwHookApiAddr = (DWORD)GetProcAddress(LoadLibrary("USER32.dll"), "MessageBoxA") ;  
  33.    //通过函数)ImageDirectoryEntryToData获得IAT  
  34.    pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData(hInstance,  
  35.                  TRUE,  
  36.                  IMAGE_DIRECTORY_ENTRY_IMPORT,  
  37.                  &uSize) ;  
  38.    //找到要HOOK的函数所在的模块  
  39.    while(pImportDesc->Name)  
  40.    {  
  41.     szModName = (char *)((PBYTE)hInstance+pImportDesc->Name) ;  
  42.     if (strcmp(szModName,"USER32.dll")==0)  
  43.      break ;   
  44.     pImportDesc++ ;  
  45.    }  
  46.    //原始的THUNK信息指针  
  47.    pThunk= (PIMAGE_THUNK_DATA32)((PBYTE)hInstance+pImportDesc->FirstThunk) ;  
  48.    for(;pThunk->u1.Function;pThunk++)  
  49.    {  
  50.     if (pThunk->u1.Function== dwHookApiAddr)  
  51.     {  
  52.      VirtualProtect(&pThunk->u1.Function, 4096,PAGE_READWRITE,0);  
  53.      pThunk->u1.Function = (PDWORD)dwHookFun;  
  54.      break ;  
  55.     }  
  56.    }  
  57.    //要hook下面这个API  
  58.    MessageBoxA(0,"这是正常的!","xicao",0);  
  59.    return 0 ;  
  60. }  
Logo
作者:Gezidan
出处:http://www.rixu.net    
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

你可能感兴趣的:(修改IAT实现本进程API HOOK)