接下来深海会和大家逐步分享分析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相关推荐

  1. 安装使用Frida在Android上进行hook

    前言 我们对Android应用进行hook最常用的就是Xposed,它相对来说更加完善,而且有强大的社区和丰富的插件.而Frida则于Xposed不同,它是一款轻量级的Hook框架,可用于多平台,相同 ...

  2. android hook 实例,代码实例分析android中inline hook

    以下内容通过1.实现目标注入程序,2.实现主程序,3.实现注入函数,4.thumb指令集实现等4个方面详细分析了android中inline hook的用法,以下是全部内容: 最近终于沉下心来对着书把 ...

  3. Android安全:Hook技术

    原址 一.Hook技术  1.Hook英文翻译为"钩子",而钩子就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件:  ...

  4. Android打造专有Hook第三篇,实战全量代码规范检查

    系列文章目录 Android打造专有hook,让不规范的代码扼杀在萌芽之中 Android打造专有hook第二篇,走进规范第一步 上篇文章,环境已经搭建,初始化程序已经完成,所需要的配置文件也均已创建 ...

  5. Android上玩玩Hook?

    在中国互联网这片弱肉强食的丛林中,封闭抄袭是垄断巨头的通行证,创新是弱小创业者的墓志铭. 了解Hook 还没有接触过Hook技术读者一定会对Hook一词感觉到特别的陌生,Hook英文翻译过来就是&qu ...

  6. android 黑科技 hook技术简单示例

    Hook属于android 中的黑科技,一般在逆向研究中使用较多,这几天技术分享会需要分享这个点.趁此机会来try一try. 先说一下Hook 意思,让大家有个初步的认识,要不一脸懵逼,Hook 简单 ...

  7. Android中的hook框架:epic简介

    epic是Android中的一个开源的hook框架,目前最新版本是:0.11.2,项目地址:https://github.com/tiann/epic. epic框架的优点有: 1.可以hook普通方 ...

  8. Android平台下hook框架adbi的研究(下)

    上篇中,我大致介绍了一下如何将一个dlopen()的调用插入到指定进程的执行序列中去. 但是,光插入这个没用,还没有具体解决如何hook进程中指定函数的问题.这个任务就要交给dlopen()函数加载进 ...

  9. android 动态hook,一个android动态库hook框架

    oooo oooo `888 `888 oooo ooo 888 .oo. .ooooo. .ooooo. 888 oooo `88b..8P' 888P"Y88b d88' `88b d8 ...

最新文章

  1. Python基础教程:属性值设置和判断变量是否存在
  2. mysql中in的用法
  3. Spring-Mybatis MapperScannerConfigurer 取不到PropertyPlaceholderConfigurer里的值
  4. MOSS 2007的备份与恢复
  5. 取值方法_数据维度爆炸怎么办?详解 5 大常用的特征选择方法
  6. U盘数据泄露,用不到30行的Python代码就能盗走
  7. 车间调度建模系列2|复杂车间调度问题描述
  8. PHP中的e标签和em标签一样吧,html em标签的作用
  9. 教你从进程中判断病毒木马的存在
  10. 增加小球python,python实现弹跳小球
  11. Centos升级GLIBC
  12. 可以直接复制的emoji符号(表情)
  13. Dell G3 3579​的触摸板驱动
  14. Mac部署Prometheus + Grafana监控
  15. 图片转Excel表格
  16. Android主题换肤实现原理与Demo
  17. 论文:YOLOX: Exceeding YOLO Series in 2021
  18. 用js屏蔽脚本加载的广告
  19. VMware出现点虚拟机和新建虚拟机没反应的解决办法
  20. IP地址,子网掩码,默认网关,DNS服务器详解

热门文章

  1. queryWrapper详解
  2. 《MATLAB语音信号分析与合成(第二版)》:第4章 语音信号的线性预测分析
  3. 架构设计(7)—如何设计一个架构
  4. Bison for Windows
  5. 【开机启动】win11开机启动软件,win11开机启动bat脚本(开机启动vbs文件)
  6. 与人工智能相关的创业公司或团队
  7. 三轴加速度计Triaxial accelerometer
  8. MySql保留两位小数
  9. 苏州技师学院计算机专业怎么样,苏州技师学院口碑怎么样
  10. find() python