android API HOOK
来源:互联网 发布:淘宝里美即官方旗舰店 编辑:程序博客网 时间:2024/05/16 23:56
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; } @Override public 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
阅读全文
0 0
- android hook api
- android hook API
- android hook api
- android hook api
- android hook api
- android hook api
- android API HOOK
- Android利用ptrace实现Hook API
- hook android api伪造设备信息做刷量
- API HOOK
- Hook API
- hook api
- hook api
- API HOOK
- Hook API
- API HOOK
- HOOK API
- API HOOK
- WSAPoll引发的一场血案(1)
- lintcode:搜索插入位置
- MATLAB读取文本数据处理
- Redis 键管理
- CSU 1946 A Rational Sequence (递归)
- android API HOOK
- 【转】ACM高精度模板
- 通过ping、traceroute、tcpdump困扰已久的网络问题终于解决了
- 一行代码解决多渠道打包
- Git 常用命令详解(二)
- 快速排序
- 二、pandas系列---pandas库的Series类型
- vimの学习笔记 删除方法
- JQuery之动画