Android 什么是Hook
接下来深海会和大家逐步分享分析Android插件化相关的东西
要了解插件化首先要具备三个前提条件:
1.Android 系统源码阅读与理解
2.Java 反射机制
3.Hook技术
今天咱们就一起分析Hook的相关知识
一.Hook是什么?
在事件执行的过程中截获并监控事件的执行流,将自身的代码融入其执行流中
二.简单举例: Hook 修改 View.OnClickListener 事件
首先阅读系统类View的源码,找到Hook点击事件的关键代码
看点击事件的方法:这边传入的事件赋给了ListenerInfo对象的mOnClickListener接口实例
public void setOnClickListener(@Nullable OnClickListener l) {if (!isClickable()) {setClickable(true);}getListenerInfo().mOnClickListener = l;}
追溯该方法:该方法返回了ListenerInfo对象
@UnsupportedAppUsageListenerInfo getListenerInfo() {if (mListenerInfo != null) {return mListenerInfo;}mListenerInfo = new ListenerInfo();return mListenerInfo;}
然后整理结构:
得出Hook路线:
1.拿到View对象中的mListenerInfo对象
2.然后拿到mOnClickListener接口实例
3.对该实例进行二次封装后替换该实例
具体实现代码:
/**作者:赵星海*时间:2020/6/23 9:51*用途:Hook简单举例(View点击事件)*/
public static void hookOnClickListener(View view) throws Exception {// 第一步:反射得到 ListenerInfo 对象Method getListenerInfo = View.class.getDeclaredMethod("getListenerInfo");getListenerInfo.setAccessible(true);Object listenerInfo = getListenerInfo.invoke(view);// 第二步:得到原始的 OnClickListener事件方法Class<?> listenerInfoClz = Class.forName("android.view.View$ListenerInfo");Field mOnClickListener = listenerInfoClz.getDeclaredField("mOnClickListener");mOnClickListener.setAccessible(true);View.OnClickListener originOnClickListener = (View.OnClickListener) mOnClickListener.get(listenerInfo);// 第三步:用 Hook代理类 替换原始的 OnClickListenerView.OnClickListener hookedOnClickListener = new HookedClickListener(originOnClickListener);mOnClickListener.set(listenerInfo, hookedOnClickListener);}public static class HookedClickListener implements View.OnClickListener {private View.OnClickListener origin;public HookedClickListener(View.OnClickListener origin) {this.origin = origin;}@Overridepublic void onClick(View v) {// Toast.makeText(v.getContext(), "你的点击事件被赵星海劫持了!", Toast.LENGTH_SHORT).show();if (origin != null) {origin.onClick(v);}}}
好了今天的分享就到这里哦,关于上诉内容,有任何的疑惑或者建议欢迎评论区沟通交流哦~
深海特别愿意和大家一起互相学习互相进步
Android 什么是Hook相关推荐
- 安装使用Frida在Android上进行hook
前言 我们对Android应用进行hook最常用的就是Xposed,它相对来说更加完善,而且有强大的社区和丰富的插件.而Frida则于Xposed不同,它是一款轻量级的Hook框架,可用于多平台,相同 ...
- android hook 实例,代码实例分析android中inline hook
以下内容通过1.实现目标注入程序,2.实现主程序,3.实现注入函数,4.thumb指令集实现等4个方面详细分析了android中inline hook的用法,以下是全部内容: 最近终于沉下心来对着书把 ...
- Android安全:Hook技术
原址 一.Hook技术 1.Hook英文翻译为"钩子",而钩子就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件: ...
- Android打造专有Hook第三篇,实战全量代码规范检查
系列文章目录 Android打造专有hook,让不规范的代码扼杀在萌芽之中 Android打造专有hook第二篇,走进规范第一步 上篇文章,环境已经搭建,初始化程序已经完成,所需要的配置文件也均已创建 ...
- Android上玩玩Hook?
在中国互联网这片弱肉强食的丛林中,封闭抄袭是垄断巨头的通行证,创新是弱小创业者的墓志铭. 了解Hook 还没有接触过Hook技术读者一定会对Hook一词感觉到特别的陌生,Hook英文翻译过来就是&qu ...
- android 黑科技 hook技术简单示例
Hook属于android 中的黑科技,一般在逆向研究中使用较多,这几天技术分享会需要分享这个点.趁此机会来try一try. 先说一下Hook 意思,让大家有个初步的认识,要不一脸懵逼,Hook 简单 ...
- Android中的hook框架:epic简介
epic是Android中的一个开源的hook框架,目前最新版本是:0.11.2,项目地址:https://github.com/tiann/epic. epic框架的优点有: 1.可以hook普通方 ...
- Android平台下hook框架adbi的研究(下)
上篇中,我大致介绍了一下如何将一个dlopen()的调用插入到指定进程的执行序列中去. 但是,光插入这个没用,还没有具体解决如何hook进程中指定函数的问题.这个任务就要交给dlopen()函数加载进 ...
- android 动态hook,一个android动态库hook框架
oooo oooo `888 `888 oooo ooo 888 .oo. .ooooo. .ooooo. 888 oooo `88b..8P' 888P"Y88b d88' `88b d8 ...
最新文章
- Python基础教程:属性值设置和判断变量是否存在
- mysql中in的用法
- Spring-Mybatis MapperScannerConfigurer 取不到PropertyPlaceholderConfigurer里的值
- MOSS 2007的备份与恢复
- 取值方法_数据维度爆炸怎么办?详解 5 大常用的特征选择方法
- U盘数据泄露,用不到30行的Python代码就能盗走
- 车间调度建模系列2|复杂车间调度问题描述
- PHP中的e标签和em标签一样吧,html em标签的作用
- 教你从进程中判断病毒木马的存在
- 增加小球python,python实现弹跳小球
- Centos升级GLIBC
- 可以直接复制的emoji符号(表情)
- Dell G3 3579​的触摸板驱动
- Mac部署Prometheus + Grafana监控
- 图片转Excel表格
- Android主题换肤实现原理与Demo
- 论文:YOLOX: Exceeding YOLO Series in 2021
- 用js屏蔽脚本加载的广告
- VMware出现点虚拟机和新建虚拟机没反应的解决办法
- IP地址,子网掩码,默认网关,DNS服务器详解