随笔 - 224  文章 - 41  trackbacks - 0
<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

享受编程

常用链接

留言簿(11)

随笔分类(159)

随笔档案(224)

文章分类(2)

文章档案(4)

经典c++博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜

原文地址:http://blog.csdn.net/leeeryan/archive/2010/06/08/5656364.aspx

// APIHOOKImageDirectoryEntryToData.cpp : Defines the entry point for the console application.
//

#include 
"stdafx.h"
#include 
<windows.h>
#include 
<imagehlp.h>//ImageDirectoryEntryToData
#pragma comment(lib,"imagehlp.lib")

char *szModName = NULL ;
char *szHacked = "不好意思hook到了!" ;  
DWORD dwHookFun ;  
PROC dwHookApiAddr;  
PIMAGE_IMPORT_DESCRIPTOR pImportDesc ;  
PIMAGE_THUNK_DATA32 pThunk;  
ULONG uSize ;  
/************************************************************/  
void MYhook()  
{  
    __asm  
    
{  
        mov  esp,ebp  
            push szHacked  
            pop  DWORD PTR [ebp
+12]  
            pop  ebp  
            jmp dwHookApiAddr  
    }
 
}


int main(int argc, char* argv[])
{
    HMODULE hInstance 
=GetModuleHandle(NULL);  
    dwHookFun 
= (DWORD)MYhook;  
    dwHookApiAddr 
= GetProcAddress(LoadLibrary("USER32.dll"), "MessageBoxA") ;  
    
//通过函数)ImageDirectoryEntryToData获得IAT  
    
    pImportDesc 
= (PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData(hInstance,  
        TRUE,  
        IMAGE_DIRECTORY_ENTRY_IMPORT,  
        
&uSize) ;  
    
//找到要HOOK的函数所在的模块  
    
    
while(pImportDesc->Name)  
    
{  
        szModName 
= (char *)((PBYTE)hInstance+pImportDesc->Name) ;  
        
if (strcmp(szModName,"USER32.dll")==0)  
            
break ;   
        pImportDesc
++ ;  
    }
  
    
//原始的THUNK信息指针  
    pThunk= (PIMAGE_THUNK_DATA32)((PBYTE)hInstance+pImportDesc->FirstThunk) ;
    
for(;pThunk->u1.Function;pThunk++)  
    
{  
        PROC
* ppfn = (PROC*&pThunk->u1.Function;
        
if (*ppfn == dwHookApiAddr)  
        
{  
            VirtualProtect(
&pThunk->u1.Function, 4096,PAGE_READWRITE,0);  
            pThunk
->u1.Function = (PDWORD)dwHookFun;  
            
break ;  
        }
  
    }
  

    
//要hook下面这个API  
   MessageBoxA(0,"这是正常的!","xicao",0); 

    
return 0;
}

posted on 2010-10-14 15:42 漂漂 阅读(771) 评论(0)  编辑 收藏 引用 所属分类: 深入vc++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理