Advertisement

C++ EAT/Hook

阅读量:

EAT与IAT存在诸多相似之处,我认为熟悉IAT的人一定不少。最初我打算使用C#进行编写,不过发现其与C# 遍历DLL导出函数所采用的手段极为相近,仅在内存映射方式上存在差异。

Heh,首先需要将DLL文件加载至内存地址空间中,否则无法实现函数的替换操作。当然,EAT也存在一定的局限性,它要求在软件调用GetProcAddress函数之前完成对DLL内部函数的替换。因此,通常会对GetProcAddress函数进行Hook处理,否则只能修改其返回结果,这种限制是否让人感到些许无奈?

EAT的完整名称为“Export address table”,其本质是基于PE文件格式和DLL相关特性的技术实现。首先通过LoadLibraryA函数将一个有效的DLL加载至内存中。PE文件的第一个字节对应的是MS-DOS信息头,即IMAGE_DOS_HEADER结构。

IMAGE_NT_HEADER = (pDosHearder + pDosHearder->e_lfanew);

// IMAGE_NT_HEADER::OptionalHeader

pOptionalHeader = (pDosHearder + pDosHearder->e_lfanew + 24);

以上代码适用于x86架构下的OptionalHeader结构定位。此处并不打算再次进行复杂转换,直接跳转会更加

全部评论 (0)

还没有任何评论哟~