Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Hook技术

Hook技术

作者头像
用户9854323
发布于 2022-06-25 03:00:52
发布于 2022-06-25 03:00:52
50600
代码可运行
举报
文章被收录于专栏:小陈飞砖小陈飞砖
运行总次数:0
代码可运行

参考: https://www.jianshu.com/p/4f6d20076922

使用 Java 反射实现 API Hook

通过对 Android 平台的虚拟机注入与 Java 反射的方式,来改变 Android 虚拟机调用函数的方式(ClassLoader),从而达到 Java 函数重定向的目的,这里我们将此类操作称为 Java API Hook。

下面通过 Hook View 的 OnClickListener 来说明 Hook 的使用方法。

首先进入 View 的 setOnClickListener 方法,我们看到 OnClickListener 对象被保存在了一个叫做 ListenerInfo 的内部类里,其中 mListenerInfo 是 View 的成员变量。ListeneInfo 里面保存了 View 的各种监听事件,比如 OnClickListener、OnLongClickListener、OnKeyListener 等等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MainActivity extends AppCompatActivity {

    TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = findViewById(R.id.text);

        mTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("tag", "origin click");
            }
        });

        hookOnClickListener(mTextView);

    }

    private void hookOnClickListener(View view) {
        try {
            // 得到 View 的 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);
            // 用自定义的 OnClickListener 替换原始的 OnClickListener
            View.OnClickListener hookedOnClickListener = new HookedOnClickListener(originOnClickListener);
            mOnClickListener.set(listenerInfo, hookedOnClickListener);
        } catch (Exception e) {
            Log.e("tag", "hook clickListener failed!", e);
        }
    }

    public class HookedOnClickListener implements View.OnClickListener {
        private View.OnClickListener origin;

        HookedOnClickListener(View.OnClickListener origin) {
            this.origin = origin;
        }

        @Override
        public void onClick(View v) {
            Toast.makeText(MainActivity.this, "hook click", Toast.LENGTH_SHORT).show();
            Log.e("tag", "Before click, do what you want to to.");
            if (origin != null) {
                origin.onClick(v);
            }
            Log.e("tag", "After click, do what you want to to.");
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
编辑精选文章
换一批
hook之替换View.OnClickListener
第一章:android hook介绍 第二章:hook之替换View.OnClickListener
李小白是一只喵
2021/02/04
9170
hook之替换View.OnClickListener
理解 Android Hook 技术以及简单实战
作者:落英坠露 链接:https://www.jianshu.com/p/4f6d20076922 著作权归作者所有,转载请联系作者获得授权。 1. 什么是 Hook Hook 英文翻译过来就是「钩子」的意思,那我们在什么时候使用这个「钩子」呢?在 Android 操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。而「钩子」的意思,就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事
用户1269200
2018/04/19
3.1K0
Android Hook技术的简单实现
Android 程序有一套特有的事件分发机制,都是按既定程序从前往后执行的。Hook 技术就是利用反射和代理,在既定程序中插入我们自己写的程序。比如,我们想在某个View的点击事件中添加播放音乐的效果。控件的点击事件,分发流程都是系统已经写好了,这时我们怎么做到在其中插入我们的播放音乐的效果呢?
全栈程序员站长
2022/08/26
7770
【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 )
【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化】插件化原理 ( 类加载器 )
韩曙亮
2023/03/29
7720
【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 )
[Android][Security] Android 逆向之 xposed
我当然不会满足于这么一点浅薄的介绍,既然用这个框架了,那就得把这个框架搞清楚对不?
wOw
2020/01/20
2.4K0
Android Hook 机制之简单实战
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/81459830
程序员徐公
2018/09/17
3.1K0
Android Hook 机制之简单实战
【云+社区年度征文】探究 | 如何捕获一个 Activity页面上所有的点击行为
既然我要捕获点击事件,首先就想到的是通过事件分发机制,也就是在源头就去获取所有的触摸事件,然后对点击事件进行统计,干吧~
码上积木
2020/12/03
1.1K0
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )
【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化】插件化原理 ( 类加载器 )
韩曙亮
2023/03/29
9430
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )
HooK之hook Notification
第一章:android hook介绍 第二章:hook之替换View.OnClickListener 第三章:HooK之hook Notification
李小白是一只喵
2021/02/05
1.3K0
Android之按钮点击事件(单击、双击、长按等)
在布局文件中添加按钮点击事件 1、在xml文件中 为 Button 添加android:onclick属性
程思扬
2023/07/24
2.4K0
Android蓝牙详析 | 蓝牙的适配、权限、开启、搜索发现等处理
本系列笔记概述 蓝牙传输优势:功耗低,传输距离还可以; 蓝牙聊天室案例 Android中蓝牙设备的使用 蓝牙权限(本文的讲解内容之一) 蓝牙功能开启(本文的讲解内容之一) 搜索蓝牙设备(本文的讲解内容之一) 与外设搭建RFCOMM通道(射频通道) 蓝牙设备双向数据传输 蓝牙聊天室案例框架 蓝牙权限 执行蓝牙通信需要权限BLUETOOTH, 例如:请求连接、接收连接和传输数据等; 如果需要启动设备 或 操作蓝牙设置,则需声明BLUETOOTH_ADMIN权限 <uses-permiss
凌川江雪
2019/05/17
6.6K0
Android快速集成融云
1、IMKit 集成了会话界面,并且提供了丰富的自定义功能,我们推荐首次接触融云的客户直接使用 IMKit 来快速集成和开发。
CatEatFish
2020/07/09
1.2K0
Android快速集成融云
android view事件分发机制
首先我们先写个简单的例子来测试View的事件转发的流程~ 1、案例 为了更好的研究View的事件转发,我们自定以一个MyButton继承Button,然后把跟事件传播有关的方法进行复写,然后添加上日志~ MyButton package com.example.zhy_event03;   import android.content.Context;   import android.util.AttributeSet;   import android.util.Log;   import andr
xiangzhihong
2018/01/30
1.2K0
android view事件分发机制
hook activity的mInstrumentation实现
image.png 理论知识参考:activity的启动流程(一) hook activity 下载反射使用代码RefInvoke.java hook思路: 获取实例中的mInstrumentation区域 创建MyInstrumentation对象 使用MyInstrumentation对象替换掉实例中的mInstrumentation区域 核心代码如下: // hook实现静态代理 // hook本MainActivity实例的mInstrumentation // 替换为myInstrumentati
李小白是一只喵
2020/12/14
6570
hook activity的mInstrumentation实现
Android的相关事件
res下新建一个Director,名为menu,在menu中建一个main的menuresourceFile(右键新建即可)
Dream城堡
2018/12/12
4930
android view事件分发机制_android事件分发流程图
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN。因为CSDN也支持MarkDown语法了,牛逼啊!
全栈程序员站长
2022/09/30
6370
android view事件分发机制_android事件分发流程图
相关推荐
hook之替换View.OnClickListener
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验