HOOK技术是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
/iknow-pic.cdn.bcebos.com/6f061d950a7b0208cd8255a36fd9f2d3572cc82d"target="_blank"title="点击查看大图"class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/6f061d950a7b0208cd8255a36fd9f2d3572cc82d?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="https://iknow-pic.cdn.bcebos.com/6f061d950a7b0208cd8255a36fd9f2d3572cc82d"/>
扩展资料:
Hook原理
Hook技术无论对安全软件还是恶意软件都是十分关键的一项技术,其本质就是劫持函数调用。但是由于处于Linux用户态,每个进程都有自己独立的进程空间,所以必须先注入到所要Hook的进程空间,修改其内存中的进程代码,替换其过程表的符号地址。在Android中一般是通过ptrace函数附加进程,然后向远程进程注入so库,从而达到监控以及远程进程关键函数挂钩。
Hook技术的难点,并不在于Hook技术,初学者借助于资料“照葫芦画瓢”能够很容易就掌握Hook的基本使用方法。如何找到函数的入口点、替换函数,这就涉及了理解函数的连接与加载机制。
从Android的开发来说,Android系统本身就提供给了我们两种开发模式,基于AndroidSDK的Java语言开发,基于AndroidNDK的NativeC/C++语言开发。所以,我们在讨论Hook的时候就必须在两个层面上来讨论。
对于Native层来说Hook的难点其实是在理解ELF文件与学习ELF文件上,特别是对ELF文件不太了解的读者来说;对于Java层来说,Hook就需要了解虚拟机的特性与Java上反射的使用。
我的个人理解:钩子函数其实就是函数指针,系统或软件定义好一些钩子,而你来把这些钩子挂接起来!说白了就是有些动作系统需要针对不同的情况做不同的处理,此时就需要定义一个钩子。具体的 *** 作由用户挂上的钩子函数实现.
比如:
#include "stdio.h"
void (*g_say_func)(void)
void regist_say( void (*pfunc)(void ) )
{
g_say_func = pfunc
}
void humen_say()
{
printf("hello world!!!\n")
}
void dog_say()
{
printf("wo wo !!!\n")
}
void cat_say()
{
printf("miao miao!!!")
}
void say_hello()
{
g_say_func()
}
void main()
{
regist_say(dog_say)//注册钩子函数
say_hello()
}
以上纯粹是个人理解!
处理的时间是2到3分钟。钩子(Hook)处理的时间是2到3分钟,是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)