Android Hook技术实战详解

简介: Android Hook技术实战详解

前言:

什么是Android Hook技术?

Android Hook技术是指在Android平台上通过修改、拦截或替换系统或应用程序的API、方法或行为,实现对系统或应用程序的定制和扩展的技术手段。

在Android系统中,应用程序和系统之间通过API进行交互。应用程序可以调用系统提供的API来实现各种功能。而通过Hook技术,我们可以修改或拦截这些API的行为,以达到修改系统或应用程序行为的目的。

下面实现一个简单的例子

1.首先定义MainActivity,在该类里面通过hook()方法,进行了Hook,具体注释已经在代码中给出

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "" + ((Button) view).getText(), Toast.LENGTH_SHORT).show();
            }
        });
        try {
            hook(button);
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, "Hook失败" + e.toString(), Toast.LENGTH_SHORT).show();
        }
    }
    /**
     * 在不修改以上代码的情况下,通过Hook把 ((Button) view).getText()内给修改
     *
     * @param view view对象
     */
    private void hook(View view) throws Exception {
        //之前的还是用户写的实现代码
        //为了获取ListenerInfo对象,需要执行这个方法 ListenerInfo getListenerInfo() ,才能拿到
        Class<?> viewClass = Class.forName("android.view.View");
        Method getListenerInfoMethod = viewClass.getDeclaredMethod("getListenerInfo");
        getListenerInfoMethod.setAccessible(true);//授权
        //执行方法
        Object listenerInfo = getListenerInfoMethod.invoke(view);
        //替换 public OnClickListener mOnClickListener; 替换为我们自己的
        Class<?> listenerInfoClass = Class.forName("android.view.View$ListenerInfo");
        Field mOnClickListenerField = listenerInfoClass.getField("mOnClickListener");
        Object mOnClickListenerObj = mOnClickListenerField.get(listenerInfo);//需要对象
        //1.监听onClick,当用户点击按钮的时候-->onClick,我们自己要先拦截这个事件,动态代理
        //第一个参数:类加载器
        //第二个参数:要监听的接口,监听什么接口,就返回什么接口
        //第三个参数:监听接口方法里面的回调
        Object onClickListenerProxy = Proxy.newProxyInstance(MainActivity.class.getClassLoader()
                , new Class[]{View.OnClickListener.class}, new InvocationHandler() {
                    /**
                     * void onClick(View v);
                     *
                     * @param proxy
                     * @param method onClick-->method
                     * @param args View v  -->Object[] args
                     * @return
                     * @throws Throwable
                     */
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        //加入自己的逻辑
                        Log.i(TAG, "拦截到了OnClickListener方法了");
                        Button button = new Button(MainActivity.this);
                        button.setText("同学们大家好...");
                        //让系统片段,正常的执行下去
                        return method.invoke(mOnClickListenerObj, button);
                    }
                });
        //把系统的mOnClickListener,换成我们自己写的动态代理
        mOnClickListenerField.set(listenerInfo, onClickListenerProxy);
    }
}

实现效果如下:


目录
相关文章
|
3天前
|
机器学习/深度学习 人工智能 文字识别
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
|
11天前
|
Android开发
技术经验分享:Android前后台切换的监听
技术经验分享:Android前后台切换的监听
11 2
|
6天前
|
5G Android开发 iOS开发
探索iOS与安卓在移动操作系统领域的技术竞争与合作
本文将深入探讨iOS和安卓这两大移动操作系统的技术竞争与合作。通过对市场份额、用户忠诚度、技术创新、生态系统建设以及安全性等方面的比较,我们将揭示这两个系统各自的优势和挑战。同时,我们还将分析它们如何通过技术合作来推动整个移动行业的发展。
|
9天前
|
算法 安全 Android开发
新一代安卓系统:技术演进与用户体验革新
在移动操作系统领域,安卓系统一直处于不断演进的过程中。本文探讨了新一代安卓系统的技术创新,以及这些创新如何为用户带来全新的体验和功能。
10 0
|
10天前
|
编解码 开发工具 Android开发
技术心得:打造自己的智能投屏体验——Android投屏开发入门
技术心得:打造自己的智能投屏体验——Android投屏开发入门
14 0
|
10天前
|
Java API Android开发
技术经验分享:Android源码笔记——Camera系统架构
技术经验分享:Android源码笔记——Camera系统架构
11 0
|
11天前
|
开发工具 Android开发
技术经验分享:Android编译命令m、mm、mmm区别及工程搭建示例
技术经验分享:Android编译命令m、mm、mmm区别及工程搭建示例
10 0
|
11天前
|
API Android开发
技术经验分享:Android系统开发获取userId
技术经验分享:Android系统开发获取userId
|
16天前
|
Java Linux API
微信API:探究Android平台下Hook技术的比较与应用场景分析
微信API:探究Android平台下Hook技术的比较与应用场景分析
|
2月前
|
存储 缓存 Java
安卓应用性能优化实战
【5月更文挑战第29天】随着智能手机的普及,移动应用已成为人们日常生活中不可或缺的一部分。在众多操作系统中,安卓系统以其开放性和灵活性占据了大量的市场份额。然而,应用的性能问题却时常影响着用户体验。本文将深入探讨针对安卓平台进行应用性能优化的策略与实践,从内存管理到多线程处理,再到布局渲染,旨在为开发者提供全面的优化指导,以期打造出更流畅、高效的安卓应用。