API Hook基本原理和实现

hook是什么?

windows系统下的编程,消息message的传递是贯穿其始终的。这个消息我们可以简单理解为一个有特定意义的整数,正如我们看过的老故事片中的“长江长江,我是黄河”一个含义。windows中定义的消息给初学者的印象似乎是“不计其数”的,常见的一部分消息在winuser.h头文件中定义。hook与消息有着非常密切的联系,它的中文含义是“钩子”,这样理解起来我们不难得出“hook是消息处理中的一个环节,用于监控消息在系统中的传递,并在这些消息到达最终的消息处理过程前,处 理某些特定的消息”。这也是hook分为不同种类的原因。

hook的这个本领,使它能够将自身的代码“融入”被hook住的程序的进程中,成为目标进程的一个部分。我们也知道,在windows2000以后的系统中,普通用户程序的进程空间都是独立的,程序的运行彼此间都不受干扰。这就使我们希望通过一个程序改变其他程序的某些行为的想法不能直接实现,但是hook的出现给我们开拓了解决此类问题的道路。

api hook是什么?

在windows系统下编程,应该会接触到api函数的使用,常用的api函数大概有2000个左右。今天随着控件,stl等高效编程技术的出现,api的使用概率在普通的用户程序上就变得越来越小了。当诸如控件这些现成的手段不能实现的功能时,我们还需要借助api。最初有些人对某些api函数的功能不太满意,就产生了如何修改这些api,使之更好的服务于程序的想法,这样api hook就自然而然的出现了。我们可以通过api hook,改变一个系统api的原有功能。基本的方法就是通过hook“接触”到需要修改的api函数入口点,改变它的地址指向新的自定义的函数。api hook并不属于msdn上介绍的13类hook中的任何一种。所以说,api hook并不是什么特别不同的hook,它也需要通过基本的hook提高自己的权限,跨越不同进程间访问的限制,达到修改api函数地址的目的。对于自身进程空间下使用到的api函数地址的修改,是不需要用到api hook技术就可以实现的。

时间: 2024-10-26 03:12:59

API Hook基本原理和实现的相关文章

Android插件化原理解析——Hook机制之动态代理

转发必注明出处:Hook机制之动态代理 使用代理机制进行API Hook进而达到方法增强是框架的常用手段,比如J2EE框架Spring通过动态代理优雅地实现了AOP编程,极大地提升了Web开发效率:同样,插件框架也广泛使用了代理机制来增强系统API从而达到插件化的目的.本文将带你了解基于动态代理的Hook机制. 阅读本文之前,可以先clone一份 understand-plugin-framework,参考此项目的dynamic-proxy-hook模块.另外,插件框架原理解析系列文章见索引.

《Android安全技术揭秘与防范》—第8章8.节什么是Hook技术

第8章 动态注入技术 Android安全技术揭秘与防范 我们在讨论动态注入技术的时候,APIHook的技术由来已久,在操作系统未能提供所需功能的情况下,利用APIHook的手段来实现某种必需的功能也算是一种不得已的办法.在Windows平台下开发电子词典的光标取词功能,这项功能就是利用Hook API的技术把系统的字符串输出函数替换成了电子词典中的函数,从而能得到屏幕上任何位置的字符串.无论是16位的Windows95,还是32位的Windws NT,都有办法向整个系统或特定的目标进程中"注入&

api-HOOK API CreateServiceW

问题描述 HOOK API CreateServiceW 求大神帮我HOOK CreateServiceW VC实现 解决方案 如果只是Hook WinAPI的话可以 看看detour 解决方案二: http://download.csdn.net/detail/ttzyanswer/330996 这里有完整的例子哦. 解决方案三: 看<Windows核心编程>吧,里面有很多种API hook方法(不愿意买就百度上下一个pdf版的,一样看)

《Android安全技术揭秘与防范》—第8章8.4节Hook原生应用程序

8.4 Hook原生应用程序之前我们演示过了如何在Java层Hook系统的API方法,但是我们都知道很多安全级别较高的操作我们都不会在Java层来完成,而且Java层很多的API都是通过JNI的方式在Native层完成的,所以对Java层的API方法Hook意义不是很大.本节我们就具体来说说在Android中如何使用CydiaSubstrate框架完成Native层的Hook操作. 8.4.1 CydiaSubstrate框架针对Native层Hook的支持对于CydiaSubstrate框架来

名企招聘信息

360 一.Windows软件开发工程师 工作地点:北京.珠海 招聘人数:若干 职位类型:技术类 工作职责: Windows客户端产品的研发及维护: 改进增强现有产品的功能与性能: 相关新技术.新产品的调研. 职位要求: 计算机相关专业大学本科及以上学历: 擅长C/C++,熟悉ATL/WTL/STL/MFC,熟练使用Visual Studio开发环境: 熟悉Windows Platform SDK开发技术(Windows Message.COM.Thread.Process.IPC等): 熟悉W

c++-急求 C++ 网吧开机登陆验证的代码或调WinAPI的思路,谢谢各位大神!!!

问题描述 急求 C++ 网吧开机登陆验证的代码或调WinAPI的思路,谢谢各位大神!!! 要求电脑开机或待机时,屏幕显示用户输入账号和密码验证的界面(注:类似网吧管理系统,谢谢各位大神帮忙) 解决方案 http://blog.csdn.net/zhihu008/article/details/8488000 解决方案二: http://download.csdn.net/detail/beau_lily/9410436 这个是我上传的资源 不知道能不能满足你的需求 C#写的你想要显示账号和密码验

系统-像百度,360杀毒软件那样的无法被结束的进程是如何做到的,如何关闭?

问题描述 像百度,360杀毒软件那样的无法被结束的进程是如何做到的,如何关闭? 今天因为百度杀毒的一个bddownloader.exe的进程把tomcat的端口占用了,然后被我查出来,想要关闭这个进程却不能关闭,就想要了解这一块的问题.求大神help 解决方案 直接卸载,换一个吧!不然的话, 解决方案二: API hook防止被结束 驱动保护

如何使用vb6.0来实现中文实名搜索

中文 说白了就是找个中间层,,让他翻译成vb能够认识的玩艺,,不说废话,,开始咯 中文实名无非是用ie 的iurlsearchhook,但是3721可不是这么玩得,,他是使用api hook拦截 ie commbox的消息,,,你根本就快不过他,,嘿嘿,,3721阴险把,,虽然我们不能实现全局钩子,,在vb中也只能使用sub class 子类技术咯,,这个东西我们不完,,我们玩另外一种 我们首先要实现IObjectWithSite ,IUnknown这两个接口,, 我们需要创建一个odl文件,,

CIH V1.5版本病毒源码

; ****************************************************************************; * The Virus Program Information *; ****************************************************************************; * *; * Designer : CIH Source : TTIT of TATUNG in Taiwan *