#include <windows.h>
#include <stdio.h>
BOOL sethook(HMODULE hMod);
BOOL unhook(HMODULE hMod);
typedef int(WINAPI *PFNMESSAGEBOX)(HWND,LPCSTR,LPCSTR,UINT uType);
PROC g_orgProc=(PROC)MessageBoxA;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
sethook(::GetModuleHandle(NULL));
::MessageBoxA(NULL,"原函数","02",0);
unhook(::GetModuleHandle(NULL));
::MessageBoxA(NULL,"原函数","02",0);
return TRUE;
}
int WINAPI MyMessageBoxA(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType)
{
//return((PFNMESSAGEBOX)g_orgProc)(hWnd,"新函数","02",uType);
return Beep(500,500);
}
BOOL sethook(HMODULE hMod)
{
IMAGE_DOS_HEADER *pDosHeader=(IMAGE_DOS_HEADER*)hMod;
IMAGE_OPTIONAL_HEADER *pOptHeader=(IMAGE_OPTIONAL_HEADER *)((BYTE *)hMod+pDosHeader->e_lfanew+24);
IMAGE_IMPORT_DESCRIPTOR *pImportDesc=(IMAGE_IMPORT_DESCRIPTOR *)((BYTE *)hMod+pOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
while (pImportDesc->FirstThunk)
{
char * pszDllName =(char *)((BYTE *)hMod+pImportDesc->Name);
if (lstrcmpiA(pszDllName,"user32.dll")==0)
{
break;
}
pImportDesc++;
}
if (pImportDesc->FirstThunk)
{
IMAGE_THUNK_DATA *pThunk=(IMAGE_THUNK_DATA *)((BYTE *)hMod+pImportDesc->FirstThunk);
while(pThunk->u1.Function)
{
DWORD * lpAddr=(DWORD *)&(pThunk->u1.Function);
if (*lpAddr==(DWORD)g_orgProc)
{
DWORD * lpNewProc=(DWORD *)MyMessageBoxA;
::WriteProcessMemory(GetCurrentProcess(),lpAddr,&lpNewProc,sizeof(DWORD),NULL);
return TRUE;
}
pThunk++;
}
}
return FALSE;
}
BOOL unhook(HMODULE hMod)
{
IMAGE_DOS_HEADER *pDosHeader=(IMAGE_DOS_HEADER*)hMod;
IMAGE_OPTIONAL_HEADER *pOptHeader=(IMAGE_OPTIONAL_HEADER *)((BYTE *)hMod+pDosHeader->e_lfanew+24);
IMAGE_IMPORT_DESCRIPTOR *pImportDesc=(IMAGE_IMPORT_DESCRIPTOR *)((BYTE *)hMod+pOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
while (pImportDesc->FirstThunk)
{
char * pszDllName =(char *)((BYTE *)hMod+pImportDesc->Name);
if (lstrcmpiA(pszDllName,"user32.dll")==0)
{
break;
}
pImportDesc++;
}
if (pImportDesc->FirstThunk)
{
IMAGE_THUNK_DATA *pThunk=(IMAGE_THUNK_DATA *)((BYTE *)hMod+pImportDesc->FirstThunk);
while(pThunk->u1.Function)
{
DWORD * lpAddr=(DWORD *)&(pThunk->u1.Function);
if (*lpAddr!=(DWORD)g_orgProc)
{
::WriteProcessMemory(GetCurrentProcess(),lpAddr,&g_orgProc,sizeof(DWORD),NULL);
return TRUE;
}
pThunk++;
}
}
return FALSE;
}
HOOK-IAT.rar_IAT_iat hook_pe iat_pe 入口点hook_入口点
版权申诉
69 浏览量
2022-09-24
07:33:01
上传
评论
收藏 116KB RAR 举报
局外狗
- 粉丝: 64
- 资源: 1万+
最新资源
- 基于matlab实现串口发送接收数据 可配置端口,波特率等 发送可选择ASCII方式或HEX方式
- matlab基于BP神经网络手写字母识别(单一).zip代码9
- 基于matlab实现编写的串口调试工具,数据接收部分采用中断方式,保证了实时的数据显示
- 基于matlab实现39节点电力系统合闸角调控过程中的机组和负荷的灵敏度计算.rar
- HBase数据库性能调优
- 原生微信小程序源码 - -首字母排序选择
- 基于QT+C++开发的保卫萝卜塔防游戏+源码(毕业设计&课程设计&项目开发)
- newapp.apk
- 项目申报管理系统论文Java项目
- 8数码、α-β搜索的博弈树算法编写一字棋游戏、Fisher线性分类器、感知器算法、SVM 分类器、卷积神经网络 CNN 框架
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈