IAT Hook的原理
2013-03-13 17:06
288 查看
(PE文件不熟悉,dll注入了,用IAT拦截了,可是具体原理还是不熟悉,收藏资料以备来日复习……
转载自:http://www.cnblogs.com/71dao/archive/2008/12/23/1360807.html)
IAT即Import Address Table 是PE(可以理解为EXE)的输入地址表,我们知道一个程序运行时可以要调用多个模块,或都说要调用许多API函数,但这些函数不一定都在EXE本身中,例如你调用Messagebox来显示一个对话框时,你只需要调用它,你并没有编写Messagebox的函数的实现过程,Messagebox的函数的实现过程实际上是在user32.dll这个库文件中,当这个程序运行时会在user32.dll中找到Messagebox并调用它。
那么具体的调入过程是怎样的呢?下面来谈谈其中的重要环节即:IMAGE_IMPORT_BY_NAME,那么IMAGE_IMPORT_BY_NAME的结构到底是什么样子的呢:?下面是引入表图
首先不要被IMAGE_THUNK_DATA这个名字弄糊涂: 它仅是指向 IMAGE_IMPORT_BY_NAME 结构的RVA。OriginalFirstThunk 和 FirstThunk 所指向的这两个数组大小取决于PE文件从DLL中引入函数的数目。比如,如果PE文件从kernel32.dll中引入10个函数,那么IMAGE_IMPORT_DESCRIPTOR 结构的 Name1域包含指向字符串"kernel32.dll"的RVA,同时每个IMAGE_THUNK_DATA 数组有10个元素。为什么我们需要两个完全相同的数组? 为了回答该问题,我们需要了解当PE文件被装载到内存时,PE装载器将查找IMAGE_THUNK_DATA 和 IMAGE_IMPORT_BY_NAME 这些结构数组,以此决定引入函数的地址。然后用引入函数真实地址来替代由FirstThunk指向的 IMAGE_THUNK_DATA 数组里的元素值。因此当PE文件准备执行时,上图已转换成:
我们现在要做的是把后面的地址改成我们自己的函数地址,例如当EXE调用Messagebox时让它转入我们的函数,我们处理完后再转入真正的函数地址。
因此API HOOK和其它HOOK存在本质的区别,可以理解为API劫持
转载自:http://www.cnblogs.com/71dao/archive/2008/12/23/1360807.html)
IAT即Import Address Table 是PE(可以理解为EXE)的输入地址表,我们知道一个程序运行时可以要调用多个模块,或都说要调用许多API函数,但这些函数不一定都在EXE本身中,例如你调用Messagebox来显示一个对话框时,你只需要调用它,你并没有编写Messagebox的函数的实现过程,Messagebox的函数的实现过程实际上是在user32.dll这个库文件中,当这个程序运行时会在user32.dll中找到Messagebox并调用它。
那么具体的调入过程是怎样的呢?下面来谈谈其中的重要环节即:IMAGE_IMPORT_BY_NAME,那么IMAGE_IMPORT_BY_NAME的结构到底是什么样子的呢:?下面是引入表图
OriginalFirstThunk | IMAGE_IMPORT_BY_NAME | FirstThunk | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| | | | |||||||||||||||||||||||||||||||||
|
|
|
|
|
OriginalFirstThunk | IMAGE_IMPORT_BY_NAME | FirstThunk | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| | | | |||||||||||||||||||||||||||||||||
|
|
|
|
因此API HOOK和其它HOOK存在本质的区别,可以理解为API劫持
相关文章推荐
- 进程保护原理Hook函数Openprocess
- Android插件化原理解析——Hook机制之Binder Hook
- COM Hook原理
- inline hook的原理及实现
- Hook :HOOK API 原理深入剖析2 - Inline(hot-patching)
- HOOK -- IAT HOOK 本进程MessageBox
- 从PE文件入手绕过IAT HOOK(ZT)
- API hook 原理与Windows hook 应用
- ring3下的IAT HOOK
- Android插件化原理解析——Hook机制之动态代理
- CodeIgniter源码阅读(6)Hook.php 扩展框架的实现原理
- Dalvik虚拟机原理及Xposed hook原理
- 利用IAT hook实现windows通用密码后门
- Android 插件化原理解析——Hook机制之AMS&PMS
- [转]C/C++ HOOK API(原理深入剖析之-LoadLibraryA)
- Hook :HOOK API 原理深入剖析3 - Inline(监视任意函数)
- Android Hook框架Xposed原理与源代码分析
- 利用HOOK拦截封包原理
- 界面组合SDK中Hook机制实现原理
- rootkit之[七]IAT Hook -- HybridHook之终极打造