自接触计算机技术以来,就听到和了解了API Hook的相关知识,但是总是浅尝辄止,深感惭愧。今日痛定思痛,决意走技术流派,努力学习,不求问答于诸侯,但求能养家糊口,聊以自慰。It is never to late to learn.
API拦截技术,顾名思义,其实就是拦截对某API的调用,拦截后改变程序流程,执行自己的代码,最后回归原调用函数的过程。
现有手段大致有:
一、覆盖代码拦截API
1、内存中定位API地址
2、将该API函数入口处的数个字节保存
3、使用跳转指令覆盖API函数入口,指向目标代码段(自己编写的API)
限制条件:代替函数签名与原函数相同:参数相同、返回值相同、调用约定相同
4、恢复原来的API入口数据,返回原函数执行
二、通过修改模块的导入段来拦截API
一个可执行模块,可加载数个DLL,模块的导入表一般包含DLL基地址、相关API相对于基地址的偏移等。当模块调用一个导入函数的时候,线程会先从模块的导入表中得到相应导入函数的地址,然后再跳转执行。
因此,拦截API,我们需要修改模块导入段之函数地址。
使用ReplaceIATEntryInOneMod()即可完成以上功能。
本文深入介绍了API拦截技术的原理及实现方法,包括直接在内存中覆盖代码进行拦截和通过修改模块导入段两种主要方式,并提供了具体实施步骤。
2213

被折叠的 条评论
为什么被折叠?



