资源简介
有错误有错误有错误有错误有错误有错误有错误有错误
代码片段和文件信息
#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 面元法
相关资源
- 常用Win32 API函数简介
- Hook API 工具 + 源代码
- opc NET API
- QGraphicsPixmapItem与QGraphicsScene的编程 图
- Advapi32.lib
- Kingsoft.Office.Interop.Ksoapi.dll
- 用net-snmp的api实现trap接收,windows+li
- PB串口通讯API源代码
- 上海市矢量地图(MapInfo格式)
- 拦截键盘系统消息钩子
- 帝国cms之微信小程序api
- JY.fne蒋勇API支持库2.0
- 基于VS2010的全局低级键盘钩子Hook de
- 调用bing搜索api 本地网站实现搜索功能
- api-ms-win-*.dll 64位
- GWT开发者手册_v2 中文帮助文档 API
-
openla
yers-API中文版 - zeal 软件+API文档(200个)
- servlet-api源码包
- api-ms-win-core-heap-l2-1-0.dll 64位
- jnative api文档
- Delphi开发npapi插件demo
-
Windows .NET fr
amework API 帮助文档6 - api-ms-win-core-heap-l2-1-0.dll
- 正则表达式api全中文版
- lwip官方文档英文 lwip移植优化必备
- Win32 API实现系统托盘
- SyntecRemoteAPI_v1_1.0.12.zip
- SyntecRemoteAPI_v2_1.0.12.zip
-
Rapidxm
l读取并修改xm l文件
评论
共有 条评论