HOOK API的一个类

HOOK API的一个类(JMP法)- -

TagHOOK    API的一个类(JMP法)                                          

 

//---------------------------------------------------------------------------
// HookApi_JMP.h
//使用JMP法写的一个HOOK API的类
#include
#ifndef _HOOK_API_JMP_
#define _HOOK_API_JMP_
class CHookApi_Jmp  
{
 public: 
 HANDLE hProc; 
 void Unlock(void);
 void Lock(void); 
 BOOL Initialize(LPCTSTR ModuleName, LPCTSTR ApiName, FARPROC lpNewFunc);
 void SetHookOn(void); 
 void SetHookOff(void); 
 CHookApi_Jmp(void); 
 virtual ~CHookApi_Jmp();
 
 protected: 
 BYTE m_OldFunc[8]; 
 BYTE m_NewFunc[8]; 
 FARPROC m_lpHookFunc; 
 CRITICAL_SECTION m_cs;
};
#endif
//---------------------------------------------------------------------------
#pragma hdrstop
#include "HookApi_JMP.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
CHookApi_Jmp::CHookApi_Jmp(void)

 InitializeCriticalSection(&m_cs);
}
//---------------------------------------------------------------------------
CHookApi_Jmp::~CHookApi_Jmp()

 CloseHandle(hProc); 
 DeleteCriticalSection(&m_cs);
}
//---------------------------------------------------------------------------
void CHookApi_Jmp::SetHookOn(void)

 DWORD dwOldFlag;
 if(VirtualProtectEx(hProc,m_lpHookFunc,5,PAGE_READWRITE,&dwOldFlag))
 {  
  if(WriteProcessMemory(hProc,m_lpHookFunc,m_NewFunc,5,0))  
  {   
   if(VirtualProtectEx(hProc,m_lpHookFunc,5,dwOldFlag,&dwOldFlag))    
    return;  
  } 
 } 
 MessageBox(NULL,"SetHookOn","fail",MB_OK); 
 return;
}
//---------------------------------------------------------------------------
void CHookApi_Jmp::SetHookOff(void)

 DWORD dwOldFlag; 
 if(VirtualProtectEx(hProc,m_lpHookFunc,5,PAGE_READWRITE,&dwOldFlag)) 
 {  
  if(WriteProcessMemory(hProc,m_lpHookFunc,m_OldFunc,5,0))  
  {   
   if(VirtualProtectEx(hProc,m_lpHookFunc,5,dwOldFlag,&dwOldFlag))    
    return;  
  }
 }
 MessageBox(NULL,"SetHookOff","fail",MB_OK);
 return;
}
//---------------------------------------------------------------------------
BOOL CHookApi_Jmp::Initialize(LPCTSTR ModuleName, LPCTSTR ApiName, FARPROC lpNewFunc)
{
    m_lpHookFunc = GetProcAddress(GetModuleHandle(ModuleName),ApiName);
    hProc = GetCurrentProcess();
    DWORD dwOldFlag;
 if(VirtualProtectEx(hProc,m_lpHookFunc,5,PAGE_READWRITE,&dwOldFlag)) 
 {  
  if(ReadProcessMemory(hProc,m_lpHookFunc,m_OldFunc,5,0))  
  {   
   if(VirtualProtectEx(hProc,m_lpHookFunc,5,dwOldFlag,&dwOldFlag))   
   {    
    m_NewFunc[0]=0xe9;    
    DWORD*pNewFuncAddress;    
    pNewFuncAddress=(DWORD*)&m_NewFunc[1];    
    *pNewFuncAddress=(DWORD)lpNewFunc-(DWORD)m_lpHookFunc-5;    
    return TRUE;   
   }  
  }
 }
 return FALSE;
}
//---------------------------------------------------------------------------
void CHookApi_Jmp::Lock(void) //多线程下使用
{
 EnterCriticalSection(&m_cs);
}
//---------------------------------------------------------------------------
void CHookApi_Jmp::Unlock(void)

 LeaveCriticalSection(&m_cs);
}
//---------------------------------------------------------------------------
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值