一个完整的hook,如果hook程序是以dll形式生成的,是分两步:1.完成dll本身的设计和生成,2.完成dll注入程序的设计和生成
本文完成第一步。
第二步在http://blog.csdn.net/arvon2012/article/details/7767437有详细讲解。
最近在64位win7上hook文件复制,拖拽和剪切的hook(这个要通过hook IFileOperating接口实现)。所以学习了API hook。这里是对自己的学习做个简单的总结,希望和hook新手们共同探讨和进步~~~
最后有全部源码下载地址(无毒无害)
inline hook API的原理:
最简单的说,hook api就是找到api所在的位置,然后在这个位置里做些文章。这样,当系统调用这个API的时候,它不知不脚的就运行了我们篡改过的代码,达到我们不可告人的目的~~~网上介绍用detour库进行APIhook,detour库是微软开发的专用的api hook库,内部hook原理和inline hook是一样的,但是因为添加了一些处理调用冲突的代码,所以会比直接手工inline hook稳定些。
而上面说的“做文章”,具体是干什么呢?还是根据例子说的清楚。
下面是一个helloworld级别的hook api,目标:(弹出对话框函数:MessageBoxW)
第一步:找到要hook的api!
我们想hook住这个MessageBoxW,就要知道系统调用它的时候,它在哪里。有些童鞋懂应该上MSDN查,然后大声吼出:在windows.h!!
擦!少年~你弱爆了(其实我在描述当时自学的自己,不是说你的,亲~)。
要知道windows系统在调用这些函数的时候,他们调用的当然是编译好的可执行函数(动态链接库--dll文件),当然不是调用源代码。MSDN这个函数的头文件下面就写着: