资源简介
有错误有错误有错误有错误有错误有错误有错误有错误

代码片段和文件信息
#include “StdAfx.h“
#include “APIHook.h“
//////////////////////////////////////////////////////////////
// APIHook.cpp文件
#include “stdafx.h“
#include “APIHook.h“
#include “Tlhelp32.h“
#include // 为了调用ImageDirectoryEntryToData函数
#pragma comment(lib “ImageHlp“)
// CAPIHook对象链表的头指针
CAPIHook* CAPIHook::sm_pHeader = NULL;
CAPIHook::CAPIHook(LPSTR pszModName LPSTR pszFuncName PROC pfnHook BOOL bExcludeAPIHookMod)
{
// 保存这个Hook函数的信息
m_bExcludeAPIHookMod = bExcludeAPIHookMod;
m_pszModName = pszModName;
m_pszFuncName = pszFuncName;
m_pfnHook = pfnHook;
m_pfnOrig = ::GetProcAddress(::GetModuleHandle(pszModName) pszFuncName);
// 将此对象添加到链表中
m_pNext = sm_pHeader;
sm_pHeader = this;
// 在所有当前已加载的模块中HOOK这个函数
ReplaceIATEntryInAllMods(m_pszModName m_pfnOrig m_pfnHook bExcludeAPIHookMod);
}
CAPIHook::~CAPIHook()
{
// 取消对所有模块中函数的HOOK
ReplaceIATEntryInAllMods(m_pszModName m_pfnHook m_pfnOrig m_bExcludeAPIHookMod);
CAPIHook *p = sm_pHeader;
// 从链表中移除此对象
if(p == this)
{
sm_pHeader = p->m_pNext;
}
else
{
while(p != NULL)
{
if(p->m_pNext == this)
{
p->m_pNext = this->m_pNext;
break;
}
p = p->m_pNext;
}
}
}
void CAPIHook::ReplaceIATEntryInOneMod(LPSTR pszExportMod
PROC pfnCurrent PROC pfnNew HMODULE hModCaller)
{
// 取得模块的导入表(import descriptor)首地址。ImageDirectoryEntryToData函数可以直接返回导入表地址
ULONG ulSize;
PIMAGE_IMPORT_DEscriptOR pImportDesc = (PIMAGE_IMPORT_DEscriptOR)
::ImageDirectoryEntryToData(hModCaller TRUE
IMAGE_DIRECTORY_ENTRY_IMPORT &ulSize);
if(pImportDesc == NULL) // 这个模块没有导入节表
{
return;
}
// 查找包含pszExportMod模块中函数导入信息的导入表项
while(pImportDesc->Name != 0)
{
LPSTR pszMod = (LPSTR)((DWORD)hModCaller + pImportDesc->Name);
if(lstrcmpiA(pszMod pszExportMod) == 0) // 找到
break;
pImportDesc++;
}
if(pImportDesc->Name == 0) // hModCaller模块没有从pszExportMod模块导入任何函数
{
return;
}
// 取得调用者的导入地址表(import address table IAT)
PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA)(pImportDesc->FirstThunk + (DWORD)hModCaller);
// 查找我们要HOOK的函数,将它的地址用新函数的地址替换掉
while(pThunk->u1.Function)
{
// lpAddr指向的内存保存了函数的地址
PDWORD lpAddr = (PDWORD)&(pThunk->u1.Function);
if(*lpAddr == (DWORD)pfnCurrent)
{
::WriteProcessMemory(::GetCurrentProcess()
lpAddr &pfnNew sizeof(DWORD) NULL);
//::VirtualProtect(lpAddr sizeof(DW
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6992 2013-06-20 20:19 帖子中的代码\APIHook.cpp
文件 2111 2013-06-20 20:19 帖子中的代码\APIHook.h
文件 1883 2013-06-20 12:44 帖子中的代码\HookTerminateProcess.cpp
文件 5413 2013-06-20 12:50 帖子中的代码\lxh_hookapi_testDlg.cpp
目录 0 2013-06-20 20:47 帖子中的代码
----------- --------- ---------- ----- ----
16399 5
- 上一篇:多足机器人(多舵机)动作编排软件
- 下一篇:CFD 面元法
相关资源
- Web Api 通过文件流 文件到本地
- Spire API文档
- ectouch最新版JSAPI微信支付V3插
- Servlet API中文文档
- jstl-api-1.2和jstl-impl-1.2
- HOOK小工具(进程、窗口、全局)
- hidusage.h hidpi.h 等USB开发用头文件
- OpenGL文档,api大全,可直接查询函数
- nVidia 控制面板 API
- IpHlpApi.h&IpHlpApi.lib
- HOOK 记录和模拟 Keyboard Mouse
- 应用接口支持库1.1版eAPI
- 手机短信api接口(源代码)
- 通用注入工具无驱版(HOOK注入、远程
- 成都MAPINFO格式电子地图
- ATA(ATAPI)接口指令协议硬盘基础知识
- Diskhook(模拟硬盘序列号)
- WinAPI 函数库(大全)
- 串口操作类(justinio)
- 基于Filter-Hook Driver的个人防火墙
- 易语言京喜拼拼API协议模块
- Win32 API大全.chm
- RapidIO 2.2 Specification
- RapidIO_Rev_2.2_Specification
- 百度API车牌识别DEMO.rar
- 易语言API的用法之beep源码
- POI中文帮助文档附带api手册.zip
- 易语言API定时器源码
- AzkabanAPI接口文档汇总
- labview获取子窗口句柄FindwindowsEX(AP
评论
共有 条评论