视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
hook技术是什么意思
2023-05-07 11:07:43 责编:小OO
文档

目录
1. 什么是 Hook2. Hook的应用场景3. Hook的技术方式或框架4. Hook的一般步骤和技巧实战

1. 什么是 Hook

Hook 英文翻译过来就是「钩子」的意思,那我们在什么时候使用这个「钩子」呢?在 Android 操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。而「钩子」的意思,就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件。

Hook 的这个本领,使它能够将自身的代码「融入」被勾住(Hook)的程序的进程中,成为目标进程的一个部分。API Hook 技术是一种用于改变 API 执行结果的技术,能够将系统的 API 函数执行重定向。在 Android 系统中使用了沙箱机制,普通用户程序的进程空间都是的,程序的运行互不干扰。这就使我们希望通过一个程序改变其他程序的某些行为的想法不能直接实现,但是 Hook 的出现给我们开拓了解决此类问题的道路。当然,根据 Hook 对象与 Hook 后处理的事件方式不同,Hook 还分为不同的种类,比如消息 Hook、API Hook 等。

2. Hook的应用场景

Hook的应用非常广泛,不仅开发人员会用到,攻击者也会用到。

开发有:对程序的执行记录日志、防止应用重复启动等。

攻击有:使用hook拦截用户输入信息,获取键盘数据等。

3. Hook的技术方式或框架

inline hook方式:目标函数执行指令中插入Jump跳转指令实现重定向动态代理方式:思路应该是类似于设计模式中的代理模式,代理原本的函数的执行Method Swizzle方式:动态改变SEL(方法编号)与IMP(方法实现)的对应关系Cydia Substrate方式:适用于iOS和andriod,定义了一系列的函数和宏,底层调用了objc的runtime和fishHook来替代目标函数或者系统方法fishHook方式:是提供一种动态修改链接Mach-O文件的工具。此利用Mach-O文件加载原理,通过修改非懒加载和懒加载两个表的指针达到C函数的Hook的目的Xposed框架:目标函数为native,利用JNI hook重定向表中的函数指针Legend框架:Android 免 Root 环境下的一个 Apk Hook 框架,该框架代码设计简洁,通用性高,适合逆向工程时一些 Hook 场景。大部分的功能都放到了 Java 层,兼容性非常好。原理是直接构造出新旧方法对应的虚拟机数据结构,然后替换信息写到内存中即可

4. Hook的一般步骤和技巧

寻找 Hook 点。原则是尽可能是静态变量或者单例对象,因为它们容易定位,其次是尽量 Hook public 的对象和方法。选择适当的hook方式或框架。将hook代码注入到目标程序的运行内存中。

实战

我们自己的代码里面,给一个view设置了点击事件,现在要求在不改动这个点击事件的情况下,添加额外的点击事件逻辑.

View v = findViewById(R.id.tv); v.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "别点啦,再点我咬你了...", Toast.LENGTH_SHORT).show(); } });

下载本文
显示全文
专题