// IATHook.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <imagehlp.h>
#pragma comment(lib, "imagehlp.lib")
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// The one and only application object
CWinApp theApp;
//using namespace std;
//////////////////////////////////////////////////////////////////////////////////////
char * szModName = NULL ;
char * szHacked = "不好意思hook到了!" ;
DWORD dwHookFun ;
DWORD dwHookApiAddr;
ULONG uSize ;
PIMAGE_IMPORT_DESCRIPTOR pImportDesc ;
PIMAGE_THUNK_DATA32 pThunk;
//////////////////////////////////////////////////////////////////////////////////////
void MYhook()
{
__asm
{
mov esp,ebp
push szHacked
pop DWORD PTR [ebp+12]
pop ebp
jmp dwHookApiAddr
}
}
//////////////////////////////////////////////////////////////////////////////////////
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: MFC initialization failed\n"));
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
}
HMODULE hInstance = GetModuleHandle(NULL);
dwHookFun = (DWORD)MYhook; // 获取需要替代函数的地址
dwHookApiAddr = (DWORD)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信息指针
int i=0;
pThunk= (PIMAGE_THUNK_DATA32)((PBYTE)hInstance + pImportDesc->FirstThunk) ;
for (; pThunk->u1.Function; pThunk++,i++)
{
if (pThunk->u1.Function== dwHookApiAddr)
{
VirtualProtect(&pThunk->u1.Function, 4096, PAGE_READWRITE, 0);
pThunk->u1.Function = (DWORD)dwHookFun;
break ;
}
}
printf("%d\n",i);
//要hook下面这个API
MessageBoxA(0, "这是正常的!", "xicao", 0);
return nRetCode;
}
IAT_Hook.rar_hook
版权申诉
77 浏览量
2022-09-24
06:48:53
上传
评论
收藏 9KB RAR 举报
刘良运
- 粉丝: 66
- 资源: 1万+
最新资源
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
- Linux线程同步机制深度解析与实用指南.zip
- PTA题库C语言解题策略与实战.rar
- SVPWM控制技术的simulink建模与仿真【包括simulink模型,参考文献,操作步骤】
- AI高清修复图片画质易语言易语言源码易语言填表
- 映射窗口.ec易语言易语言模块CPU占用0%游戏监控窗口监控
- 易语言 361窗口模块高效、便捷、自封装、自用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0