YAHFA hook的简单实例 ,hook自己的android应用
16lz
2022-01-09
android有很多hook框架,原理都是大同小异。本文是使用YAHFA。
YAHFA 的github地址:https://github.com/PAGalaxyLab/YAHFA
一 、准备工作
项目的build.gradle中添加mavenCentral()
buildscript { repositories { mavenCentral() }}allprojects { repositories { mavenCentral() }}
model的build.gradle添加引用
dependencies { implementation 'io.github.pagalaxylab:yahfa:0.10.0'}
做好上面两步就可以接着开发了。
二、HookMain.hook方法
本文的例子中,只需要用到HookMain.hook这一个方法。
HookMain.hook(Method target, Method hook)
需要传入两个method参数,“Method target”是想要hook的方法,“Method hook”是想要真正运行的方法。
举例:
Log.i(String, String)的作用是打印一行日志
Log.i("hook", "aaaaaaa");
输出: I/hook: aaaaaaa
但是如果我创建一个"i"方法,将系统提供的Log.i(…)替换掉,那么在应用任何地方调用log.i都会执行我创建的方法,而不是系统方法。
首先,我照着Log.i也创建一个“i”方法,同样是static修饰,但是里面不用log输出日志了,而是用System.out.println输出日志:
public static int i(String s1,String s2){ System.out.println("hook 哈哈哈"); return 0; }
然后hook掉原方法,使用反射取出method传入HookMain.hook中:
try { //取出系统方法 Class logClass = Log.class; Method target = logClass.getDeclaredMethod("i", String.class, String.class); //取出创建的i方法 Class mclass = MainActivity.this.getClass();//新创的“i”方法的类。这里我是放到MainActivity中的 Method hook = mclass.getDeclaredMethod("i", String.class, String.class); HookMain.hook(target,hook ); } catch (Exception e) { e.printStackTrace(); }
执行完这一步后,就已近hook成功了。再次调用Log.i("hook", "aaaaaaa")
看控制台结果:
执行:Log.i(“hook”, “aaaaaaa”)`
输出: I/System.out: hook 哈哈哈
更多相关文章
- Android(安卓)SimapleDateFormat 日期格式的转换方法
- 【解决方法】ADT在线安装
- Android(安卓)横竖屏的锁定
- Android(安卓)字体加粗的两种方法
- android Uri获取真实路径转换成File的方法
- Android×××方法详解
- Android(安卓)进阶16:IntentService 使用及源码解析
- 浅谈Java中Collections.sort对List排序的两种方法
- Python list sort方法的具体使用