EAT/IAT Hook
标 题: EAT/IAT Hook
作 者: Y4ng
时 间: 2013-08-21
链 接: http://www.cnblogs.com/Y4ng/p/EAT_IAT_HOOK.html
#include <windows.h>
#include <shlwapi.h>
#include <wchar.h>
DWORD MyZwGetContextThread(HANDLE Thread,LPCONTEXT lpContext)
{
memset(lpContext,,sizeof(CONTEXT));
return ;
}
DWORD MyZwSetContextThread(HANDLE Thread,LPCONTEXT lpContext)
{
memset(lpContext,,sizeof(CONTEXT));
return ;
}
/**********************************************************
IAT Hook :挂钩目标输入表中的函数地址
参数:
char *szDLLName 函数所在的DLL
char *szName 函数名字
void *Addr 新函数地址
***********************************************************/
DWORD IATHook(char *szDLLName,char *szName,void *Addr)
{
DWORD Protect;
HMODULE hMod=LoadLibrary(szDLLName);
DWORD RealAddr=(DWORD)GetProcAddress(hMod,szName);
hMod=GetModuleHandle(NULL);
IMAGE_DOS_HEADER * DosHeader =(PIMAGE_DOS_HEADER)hMod;
IMAGE_OPTIONAL_HEADER * Opthdr =(PIMAGE_OPTIONAL_HEADER)((DWORD)hMod+DosHeader->e_lfanew+);
IMAGE_IMPORT_DESCRIPTOR *pImport =(IMAGE_IMPORT_DESCRIPTOR*)((BYTE*)DosHeader+Opthdr->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
if(pImport==NULL)
{
return FALSE;
}
IMAGE_THUNK_DATA32 *Pthunk=(IMAGE_THUNK_DATA32*)((DWORD)hMod+pImport->FirstThunk);
while(Pthunk->u1.Function)
{
if(RealAddr==Pthunk->u1.Function)
{
VirtualProtect(&Pthunk->u1.Function,0x1000,PAGE_READWRITE,&Protect);
Pthunk->u1.Function=(DWORD)Addr;
break;
}
Pthunk++;
}
return TRUE;
}
/**********************************************************
EAT Hook :挂钩目标输出表中的函数地址
***********************************************************/
BOOL EATHook(char *szDLLName,char *szFunName,DWORD NewFun)
{
DWORD addr=;
DWORD index=;
HMODULE hMod=LoadLibrary(szDLLName);
DWORD Protect;
IMAGE_DOS_HEADER * DosHeader =(PIMAGE_DOS_HEADER)hMod;
IMAGE_OPTIONAL_HEADER * Opthdr =(PIMAGE_OPTIONAL_HEADER)((DWORD)hMod+DosHeader->e_lfanew+);
PIMAGE_EXPORT_DIRECTORY Export =(PIMAGE_EXPORT_DIRECTORY)((BYTE*)DosHeader+ Opthdr->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
PULONG pAddressOfFunctions =(ULONG*)((BYTE*)hMod+Export->AddressOfFunctions);
PULONG pAddressOfNames =(ULONG*)((BYTE*)hMod+Export->AddressOfNames);
PUSHORT pAddressOfNameOrdinals=(USHORT*)((BYTE*)hMod+Export->AddressOfNameOrdinals);
for (int i=;i <Export->NumberOfNames; i++)
{
index=pAddressOfNameOrdinals[i];
char *pFuncName = (char*)( (BYTE*)hMod + pAddressOfNames[i]);
if (_stricmp( (char*)pFuncName,szFunName) == )
{
addr=pAddressOfFunctions[index];
break;
}
}
VirtualProtect(&pAddressOfFunctions[index],0x1000,PAGE_READWRITE,&Protect);
pAddressOfFunctions[index] =(DWORD)NewFun - (DWORD)hMod;
return TRUE;
}
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hModule);
IATHook("kernel32.dll","ExitProcess",MyZwGetContextThread);
//GetProcAddress(LoadLibrary("ntdll.dll"),"NtSetInformationFile"); /** Test EAT HOOK **/
//ExitThread(0); /** Test IAT HOOK**/
}
return TRUE;
}
转自邓韬
EAT/IAT Hook的更多相关文章
- IAT Hook 原理分析与代码编写
Ring 3层的 IAT HOOK 和 EAT HOOK 其原理是通过替换IAT表中函数的原始地址从而实现Hook的,与普通的 InlineHook 不太一样 IAT Hook 需要充分理解PE文件的 ...
- ring3下的IAT HOOK
标 题: [原创]ring3下的IAT HOOK作 者: hostzhen时 间: 2013-03-28,11:30:53链 接: http://bbs.pediy.com/showthread.ph ...
- IAT Hook
@author: dlive 0X01 IAT Hook的优缺点 优点:工作原理与实现都比较简单 缺点:如果想钩取的API不在目标进程的IAT中,那么就无法使用该技术进行钩取操作.即如果要钩取的API ...
- hook技术分类
1.HOOK SERVICE TABLE:HOOK SSDT 这种方法对于拦截 NATIVE API 来说用的比较多. SSDT hook,一句话——Windows把需要调用的内核API地址全都存在了 ...
- hook 9大类
HOOK技术主要分为两大类,一是内核层HOOK,一是用户层HOOK. 用户层HOOK也就是在ring3环境下hook kenerl32.dll.User3.dll.Gui32.dll.Advapi.d ...
- Hook基本知识
一.什么是HOOK(钩子) Windows系统,建立在事件驱动机制上,就是整个系统都是通过消息传递实现的.hook(钩子)是一种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往目标 ...
- C++浅析——虚表和虚表Hook
为了探究虚表的今生前世,先来一段测试代码 虚函数类: class CTest { public: int m_nData; virtual void PrintData() { printf(&quo ...
- hook研究结果备忘
hook研究结果: 最近一周时间仔细研究了一下hook,也许不能称之为研究吧.顶多是让别人的思想拿过来抄袭一遍而已,写点结果也算对得起自己的这几天的苦心了. 1,首先从同事旁边听到了hook,然后看的 ...
- XP下的进程静音技术(遍历进程,遍历输入模块,遍历输入函数,找到函数并HOOK) good
很多浏览器有这种功能,实现原理都是一样.发声源基本都来自Flash,比如Flash游戏啦,视频播放器啦等等 而Flash的发声都是通过winmm.dll::waveOutWrite函数来完成,所以,我 ...
随机推荐
- Cracking the coding interview--Q2.1
原文: Write code to remove duplicates from an unsorted linked list.FOLLOW UPHow would you solve this p ...
- 得到RTP包中的timestamp
NTP------网络时间协议 PTP------精确时间协议 PTS,DTS的关系: http://www.cnblogs.com/qingquan/archive/2011/07/27/21189 ...
- typedef与define的区别
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错.例如:#define PI 3.1415 ...
- Hadoop2.4.1 64-Bit QJM HA and YARN HA + Zookeeper-3.4.6 + Hbase-0.98.8-hadoop2-bin HA Install
Hadoop2.4.1 64-Bit QJM HA and YARN HA Install + Zookeeper-3.4.6 + Hbase-0.98.8-hadoop2-bin HA(Hadoop ...
- mybatis错误Invalid bound statement (not found) 的解决办法
<!-- IDEA需要添加一下内容,否则无法找到mapper --> <build> <resources> <resource> <direct ...
- animate.min.css 动画样式移动端存在的问题
使用animate.min.css可以使用很多动画效果,包括3D效果,现在也可以应用于HTML5手机移动端,使用切换效果的时候会导致页面出现卡顿现象,可以使用css3 transform 方法硬件加速 ...
- Zend Framework学习日记(1)--环境搭建篇(转)
Zend Framework学习日记(1)--环境搭建篇 (1)开发工具 Zend Framework框架:http://framework.zend.com/download/latest 包含2个 ...
- 只响应ccTouchBegan的问题
在Touch事件中,ccTouchBegan有一个返回值,而这一个返回值则决定了是否会继续响应ccTouchMoved,ccTouchEnded. 如果没有返回true的话,则直接会结束此Touch事 ...
- HID Boot device.
整理这篇文章的目的: 客户会有用到遥控器部分(遥控器操作flow:当按下某个键时,MCU会透过UR送command给TP,TP吃到后再透过微软标准的keyboard上报) 要求:在BIOS设定阶段,遥 ...
- (转)ip地址,手机ip查询
页面地址:http://www.ip138.com/ 外链地址(实际主页面里面有)http://www.ip138.com/iplink.htm 外链地址里面的内容: <FORM METHOD= ...