android API HOOK
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相关推荐
- 关于LD_PRELOAD在Android API HOOK中的应用
原址 受xposed启发,有了一些想法. 我以前都是通过注入的形式,拦截目标进程的API,从而达到一些目的.这个方法相对笨拙,每次都需要注入(启动时):关键问题是,除非做成INLINE HOOK,否则 ...
- hook android api伪造设备信息做刷量
hook android api伪造设备信息做刷量 概述 Android平台上app的统计数据都是基于Android的设备信息的,比如首次使用(激活),活跃(日活跃DAU,月活跃MAU)等都需要根据设 ...
- android socket_盘点Android常用Hook技术
Android平台开发测试过程中,Hook技术是每个开发人员都常用的技术.可以用于绕过系统限制.修改别人发布的代码.动态化.调用隐藏API.插件化.组件化.自动化测试.沙箱等等. Hook如果要跨进程 ...
- Android安全 Hook技术,AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF...
AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF The name of the DepartmentBeijing Forest Studio 北京理工大学信息 ...
- 如何写一个Android inline hook框架
Android_Inline_Hook https://github.com/GToad/Android_Inline_Hook_ARM64 有32和64的实现,但是是分离的,要用的话还要自己把两份代 ...
- Android之Hook入门讲解
目录 1.Hook是做什么的?(解决什么问题?) 2.HOOK技术如何改变API执行结果的? 3.使用Hook技术需要有实现Java反射和阅读源码的能力 3.1Java反射 3.2SDK源码 4.Ho ...
- Android API 中文 (51) —— ZoomButtonsController
一.结构 public class ZoomButtonsController extends View implements View.OnTouchListener java.lang.Objec ...
- android api 中文 (73)—— AdapterView
前言 本章内容是android.widget.AdapterView,版本为Android 2.3 r1,翻译来自"cnmahj",欢迎大家访问他的博客:http://androi ...
- Google Maps Android API v2官网例子使用说明
2019独角兽企业重金招聘Python工程师标准>>> 1.安装Google Play services SDK Google Maps SDK已经作为Google Play ser ...
最新文章
- 深度学习利器:TensorFlow与NLP模型
- float与double类型区别比较
- linux分区后盘符找不到,为什么我的磁盘不见了,怎么找回来啊?
- 2008安装完了找不到_7206BEP.进口轴承_玉溪SKF轴承安装指南
- JS等比例缩小图片尺寸
- 两种方式设置单元格的下划线
- 计算机二级报考哪个科目比较好?
- 操作系统基础知识详解
- 爬虫一:用正则表达式爬取图片
- 合肥工业大学宣城java实验报告,合肥工业大学宣城校区,程序设计基础上机实验,周波老师仅供参考(修正版).doc...
- unity实用技能,控制renderQueue解决NGUI与Unity3D物体渲染顺序问题
- win10 + Ubuntu 18.04.1 LTS (Bionic Beaver) 双系统的安装配置
- easyui的简单实例
- 医院管理信息系统与临床信息系统
- acme.sh使用阿里云DNS申请Let’s Encrypt的https证书
- 时序分析寄存器到寄存器
- 给Java程序员的一些中肯建议,你还在虚度光阴吗?(文末福利)
- 计算机用户输入信息怎么保存,计算机中的全部信息,包括输入的原始数据、计算机程序、中间运行结果都保存在存储器中...
- SOM-TL665x核心板研发的一款TI C66x多核定点/浮点高性能DSP开发板 处理器/FLASH
- i5 1035g1和r5 3500u哪个好
热门文章
- python中turtle要安装吗_Python之pygame安装过程中出现的问题以及解决方法
- ce修改服务器的数据,ce修改游戏服务器数据库
- 【PracticalAI丨从0到1】这可能是2023最全面的人工智能学习路线
- 使用Multiprocessing.process时出现PicklingError解决方法
- 喜报 | 一览群智荣膺2020中关村国际前沿科技创新大赛人工智能领域TOP10
- nsf与samba基本应用
- idea开发工具常用的插件合集汇总
- 固网现代化服务:让铜线网络焕发青春
- 数据库复习基本概念——关系、元组、属性、码、域、分量、形式化定义
- 设计模式学习笔记(八)—Template Method模式