什么是hook技术

9527

什么是hook技术
前言
安卓的hook技术是Android开发过程中会存在两种模式。
Android 系统在开发中会存在两种模式,一个是Linux 的Native 模式,而另一个则是建立在虚拟机上的Java 模式。所以,我们在讨论Hook 的时候,可想而知在Android 平台上的Hook 分为两种。一种是Java 层级的Hook ,另一种则是Native 层级的Hook。两种模式下,我们通常能够通过使用JNI 机制来进行调用。但我们知道,在Java 中我们能够使用native 关键字对C/C++代码进行调用,但是在C/C++中却很难调用Java 中的代码。所以,我们能够在Java 层级完成的事基本也不会在Native 层去完成
什么是hook技术
Hook 技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把系统的程序拉出来变成我们自己执行代码片段。

要实现钩子函数,有两个步骤:
  1. 利用系统内部提供的接口,通过实现该接口,然后注入进系统(特定场景下使用)
  2.动态代理(使用所有场景)
image.png

  • Hook 的这个本领,使它能够将自身的代码“融入”被勾住( Hook )的程序的进程中,成为目标进程的一个部分。
  • 在Android 系统中使用了沙箱机制,普通用户程序的进程空间都是独立的,程序的运行彼此间都不受干扰。
  • 根据Hook 对象与Hook 后处理的事件方式不同, Hook 还分为不同的种类,如消息Hook 、APIHook 等。

Hook 原理

Hook技术其本质就是劫持函数调用 ;无论对安全软件还是恶意软件都是十分关键的一项技术。但是由于处于Linux 用户态,每个进程都有自己独立的进程空间,所以必须先注入到所要Hook 的进程空间,修改其内存中的进程代码,替换其过程表的符号地址。在Android 中一般是通过ptrace函数附加进程,然后向远程进程注人so 库,从而达到监控以及远程进程关键函数挂钩。

Hook流程

Hook 的原理就是改变目标函数的指向,原理看起来并不复杂,但是实现起来却不是那么的简单。
这里我们将问题细分为两个

  • 如何注入代码?

    • 需要注入的代码我们存放在哪里?
    • 如何注入代码?
  • 如何注人动态链接库?

    • 我们不能只在自己的进程载入动态链接库,如何使进程附着上目标进程?
    • 如何让目标进程调用我们的动态链接库函数?

参考文档 :https://www.kancloud.cn/alex\_wsc/android/506821
https://www.jianshu.com/p/338...

阅读 638
1 声望
0 粉丝
0 条评论
你知道吗?

1 声望
0 粉丝
宣传栏