API层面的hook是android hook技术中比较入门的一种,根据hook点选择的不同,能实现很多强大的功能,比如hook掉框架层的某些系统类达到不可思议的效果。

hook主要技术点:

1.寻找合适的hook点。

这一点其实是最难的,我们要根据需求,分析系统源码寻找到合适的hook点。一般hook点都是找单例,静态变量,这样hook起来简单,方便一些。

2.代理。

代理的作用是改变原始方法。

3.反射。

用发射技术截取到原始类,替换为我们修改后的代理类。

简单来说,hook就是通过反射,将原始方法(类)替换为我们增强后的代理方法(类),这样就达到了我们“不可告人”的操作。

下面举个例子,hook框架层比较复杂,比如hook剪切板改变复制的内容啊,拦截startActivity改变跳转页面这种,我们来弄个简单的,hook 控件的点击事件。

第一步,寻找hook点:

android 中所有的控件都继承自View类,点击事件的监听器也都在View的ListenerInfo中的mOnClickListener,那么我们的hook点就找到了,View中ListenerInfo的mOnClickListener。

第二步,实现我们的代理类:

public class ClickListenerProxy implements View.OnClickListener{View.OnClickListener onClickListener;public ClickListenerProxy(View.OnClickListener onClickListener) {this.onClickListener = onClickListener;}@Overridepublic void onClick(View v) {LogUtil.i("hi,before onClick "+v.getId());onClickListener.onClick(v);LogUtil.i("hi,after onClick "+v.getId());}
}

这个代理类实现的功能是在点击事件执行前后各输出了一条日志。

第三步,使用反射替换成我们的代理点击类:

public static void hookClickListener(View view){try {Class<?> aClass = Class.forName("android.view.View");Method getListenerInfo = aClass.getDeclaredMethod("getListenerInfo");getListenerInfo.setAccessible(true);Object listenerInfo = getListenerInfo.invoke(view);Class bClass = Class.forName("android.view.View$ListenerInfo");Field fieldOnClickListener = bClass.getDeclaredField("mOnClickListener");fieldOnClickListener.setAccessible(true);View.OnClickListener onClickListener = (View.OnClickListener) fieldOnClickListener.get(listenerInfo);fieldOnClickListener.set(listenerInfo,new ClickListenerProxy(onClickListener));} catch (Exception e) {LogUtil.i(e);}}

第六行拿到了ListenerInfo对象,第十一行拿到原始的OnClickListener,第十二行完成原始类与代理的替换。

运行下看结果:

看完是不是觉得其实很简单呢?0.0

android API HOOK相关推荐

  1. 关于LD_PRELOAD在Android API HOOK中的应用

    原址 受xposed启发,有了一些想法. 我以前都是通过注入的形式,拦截目标进程的API,从而达到一些目的.这个方法相对笨拙,每次都需要注入(启动时):关键问题是,除非做成INLINE HOOK,否则 ...

  2. hook android api伪造设备信息做刷量

    hook android api伪造设备信息做刷量 概述 Android平台上app的统计数据都是基于Android的设备信息的,比如首次使用(激活),活跃(日活跃DAU,月活跃MAU)等都需要根据设 ...

  3. android socket_盘点Android常用Hook技术

    Android平台开发测试过程中,Hook技术是每个开发人员都常用的技术.可以用于绕过系统限制.修改别人发布的代码.动态化.调用隐藏API.插件化.组件化.自动化测试.沙箱等等. Hook如果要跨进程 ...

  4. Android安全 Hook技术,AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF...

    AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF The name of the DepartmentBeijing Forest Studio 北京理工大学信息 ...

  5. 如何写一个Android inline hook框架

    Android_Inline_Hook https://github.com/GToad/Android_Inline_Hook_ARM64 有32和64的实现,但是是分离的,要用的话还要自己把两份代 ...

  6. Android之Hook入门讲解

    目录 1.Hook是做什么的?(解决什么问题?) 2.HOOK技术如何改变API执行结果的? 3.使用Hook技术需要有实现Java反射和阅读源码的能力 3.1Java反射 3.2SDK源码 4.Ho ...

  7. Android API 中文 (51) —— ZoomButtonsController

    一.结构 public class ZoomButtonsController extends View implements View.OnTouchListener java.lang.Objec ...

  8. android api 中文 (73)—— AdapterView

    前言 本章内容是android.widget.AdapterView,版本为Android 2.3 r1,翻译来自"cnmahj",欢迎大家访问他的博客:http://androi ...

  9. Google Maps Android API v2官网例子使用说明

    2019独角兽企业重金招聘Python工程师标准>>> 1.安装Google Play services SDK Google Maps SDK已经作为Google Play ser ...

最新文章

  1. 深度学习利器:TensorFlow与NLP模型
  2. float与double类型区别比较
  3. linux分区后盘符找不到,为什么我的磁盘不见了,怎么找回来啊?
  4. 2008安装完了找不到_7206BEP.进口轴承_玉溪SKF轴承安装指南
  5. JS等比例缩小图片尺寸
  6. 两种方式设置单元格的下划线
  7. 计算机二级报考哪个科目比较好?
  8. 操作系统基础知识详解
  9. 爬虫一:用正则表达式爬取图片
  10. 合肥工业大学宣城java实验报告,合肥工业大学宣城校区,程序设计基础上机实验,周波老师仅供参考(修正版).doc...
  11. unity实用技能,控制renderQueue解决NGUI与Unity3D物体渲染顺序问题
  12. win10 + Ubuntu 18.04.1 LTS (Bionic Beaver) 双系统的安装配置
  13. easyui的简单实例
  14. 医院管理信息系统与临床信息系统
  15. acme.sh使用阿里云DNS申请Let’s Encrypt的https证书
  16. 时序分析寄存器到寄存器
  17. 给Java程序员的一些中肯建议,你还在虚度光阴吗?(文末福利)
  18. 计算机用户输入信息怎么保存,计算机中的全部信息,包括输入的原始数据、计算机程序、中间运行结果都保存在存储器中...
  19. SOM-TL665x核心板研发的一款TI C66x多核定点/浮点高性能DSP开发板 处理器/FLASH
  20. i5 1035g1和r5 3500u哪个好

热门文章

  1. python中turtle要安装吗_Python之pygame安装过程中出现的问题以及解决方法
  2. ce修改服务器的数据,ce修改游戏服务器数据库
  3. 【PracticalAI丨从0到1】这可能是2023最全面的人工智能学习路线
  4. 使用Multiprocessing.process时出现PicklingError解决方法
  5. 喜报 | 一览群智荣膺2020中关村国际前沿科技创新大赛人工智能领域TOP10
  6. nsf与samba基本应用
  7. idea开发工具常用的插件合集汇总
  8. 固网现代化服务:让铜线网络焕发青春
  9. 数据库复习基本概念——关系、元组、属性、码、域、分量、形式化定义
  10. 设计模式学习笔记(八)—Template Method模式