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函数来完成,所以,我 ...
随机推荐
- PHP 类中的常量
类中的常量与静态成员类似他们只属于类而不属于类的任何实例,访问形式与访问静态成员一样. 例如: <?php class MyConst{ const RED="Red"; c ...
- 如何消除word中的回车符号
打开文字编辑页面,在菜单栏上选择工具-选项-视图-格式标志中的“段落标志”复选框前面的“√”去掉即可. 附件:
- 带’*’号字符串的匹配
目标: 判断源字符串中是否含有指定子串,子串可能会有*号通配符. 初步测试没问题.记录下来.后面要是有问题再来纠正. #include <string> using namespace s ...
- cf202-div 1-B - Apple Tree:搜索,数论,树的遍历
http://codeforces.com/contest/348/problem/B B. Apple Tree time limit per test 2 seconds memory l ...
- hand第四次考核
使用Spring与Mybatis技术实现下要求: (2分)1,Spring的配置文件名称为ApplicationContext.xml (2分)2,在ApplicationContext.xml中配置 ...
- Java 实现Md5算法
package other; import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/* * ...
- (转)关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi
首先是几个基本概念:1.屏幕尺寸Screen size即显示屏幕的实际大小,按照屏幕的对角线进行测量.为简单起见,Android把所有的屏幕大小分为四种尺寸:小,普通,大,超大(分别对应:small, ...
- ZigBee心电传输(三)
这段时间因为另外一个项目需要,我搞Zed板去了.现在接着上一步的工作吧,继续把心电做完.这里想要测试一下把心电波形数据传输出来,然后用协调器接收,并从串口显示出来.之后再用ZigBee转蓝牙,从而可以 ...
- 戴明PDCA方法
戴明PDCA方法:即Plan(计划).Do(执行).Check(检查)和Action(处理)的缩写. P(plan)计划: 包括方针和目标的确定以及活动计划的制定; D(do)执行: 执行就是具体运作 ...
- [ES6] Module export
Default export: Default export is easy way to export a function to outside module. //flash-message.j ...