Android Hook技术实战详解

这篇具有很好参考价值的文章主要介绍了Android Hook技术实战详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。
👉点击跳转到教程

前言:
什么是Android Hook技术?

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

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

Android Hook技术实战详解,Android基础笔记,android,Hook,反射,动态代理,view
下面实现一个简单的例子

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);
    }
}

实现效果如下:

Android Hook技术实战详解,Android基础笔记,android,Hook,反射,动态代理,view文章来源地址https://www.toymoban.com/news/detail-578362.html

到了这里,关于Android Hook技术实战详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android相机开发实战,面试题+笔记+项目实战

    private SurfaceView mSurfaceView; private SurfaceHolder mHolder; private Size mPreviewSize; private Size adapterSize; //private List mSupportedPreviewSizes; private Camera mCamera; private boolean isSupportAutoFocus = false; private Camera.Parameters parameters = null; private Context mContext; //private int mCurrentCameraId = 0; private int screenWidth; pri

    2024年04月16日
    浏览(47)
  • Android MTE技术详解

            MTE(内存标记扩展)是ARM v8.5-A新增的一项缓解内存安全的机制。在Android Linux现有的安全机制中,类似的机制有ASAN、HWSAN。但两者因为 性能开销 代价 高 昂,不适用于广泛部署(仅调试使用)。MTE当前带来了一种 高性能、可扩展 的硬件解决方案,可降低以不安全

    2024年02月20日
    浏览(25)
  • Android 基础技术——Binder 机制

    笔者希望做一个系列,整理 Android 基础技术,本章是关于Binder 机制 什么是Binder 机制:Binder 是一种进程间通信机制 驱动:Binder 是一个虚拟物理设备驱动 应用层:Binder 是一个能发起通信的 Java 类 为什么要使用Binder 图解析: 性能上:  binder小于共享内存 优于其他ipc 共

    2024年02月19日
    浏览(36)
  • Android 基础技术——addView 流程

    笔者希望做一个系列,整理 Android 基础技术,本章是关于 addView 在了解 addView 流程之前,先回答下以下几个问题:         PhoneWindow是什么时候创建的?          DectorView 是什么?         DectorView 是什么时候创建的?         ViewRootImpl是什么?        

    2024年01月25日
    浏览(28)
  • android native hook简介

    Android中的 Native Hook是一个非常吸引人的技术节点,诱使开发人员产生绚烂多彩的想法,并带来精彩的体验。在软件调试、逆向、安全等场景中得到采用,各大知名软件公司如byte dance、baidu、tencent等都有自己的开源注入和hook项目。 本文代码来自github,只做了适当的剪裁和优化

    2024年02月11日
    浏览(42)
  • Android hook、检测及对抗相关

    Xposed hook多个dex firda hook libart.so文件导出函数(专治各种静态找不到) hook liblinker.so hook init_array中的函数, 需要指定so名称,且会hook之后的所有so的init_array中的函数,可以通过hook_init函数中for循环,使用函数偏移过滤。 通过libc.so的底层dlopen函数实现dump so Xposed模块 新建Android项

    2024年02月06日
    浏览(51)
  • Android Hook的探索与实践

    Hook,中文译为“挂钩”或“钩子”。要“钩”到什么呢?在对特定的系统事件进行hook后,一旦发生已hook事件,对该事件进行hook的程序就能在第一时间对该事件做出响应,甚至可以截断此事件。 本文,侧重于Java层的hook。 Hook其实很简单,总体概括,分为三步: 釜底抽薪 分

    2023年04月17日
    浏览(39)
  • 【Android】Frida Hook 文件读写操作

    在挖掘客户端漏洞的时候,通常会关注应用对什么文件进行了读写操作,当我们能控制被读的文件或观测到敏感写入的文件,通常可以造成一定危害。本文详细介绍了如何通过frida监控文件读写操作。 在Linux系统下,文件的创建、读取、追加、写入和删除等操作涉及到以下系

    2024年02月08日
    浏览(178)
  • Android Hook之Frida安装使用

    Frida 是一个动态检测框架,允许开发人员在 Windows、macOS、Linux、iOS 和 Android 上的原生应用程序中注入 JavaScript 或 Python 脚本。该框架可用于操纵应用程序的行为、从中提取信息或与其进行通信。Frida 通常被安全研究人员和渗透测试人员用来对应用程序进行动态分析,并执行钩

    2023年04月19日
    浏览(42)
  • Android实战基础 - Java、Kotlin 代码互转

    在Android现阶段,Kotlin已经成为普遍性使用的语言,而在其使用阶段中Java和Kotlin的混用很常见,为了便于开发,我们需要掌握Java、Kotlin文件的转换 这应该是我以前刚学Kotlin时就想记录的一篇blog,没想到隔了这么久才进行记录(嗯… 主要这俩年好像有点忙…) 个人建议:正常

    2024年02月11日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包