抱歉,Xposed真的可以为所欲为——1.基础知识储备(下)

简介: 本节简单介绍了什么是Xposed,基本原理,如何创建一个Xposed项目以及Xposed常用的类与方法。

3.Xposed API相关介绍


PS:发现网上没有什么好的Xposed API的文档啊,这里都是翻阅很多的出来的 网页总结,如果英语好的,建议直接阅读源码注释!!!


1.例子里用到的姿势点


  • IXposedHookLoadPackage接口:App被加载的时候调用,用于App应用的Hook 回调方法是:handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam)


  • XC_LoadPackage.LoadPackageParam:包含与正在加载的应用程序的有关信息。



  • XposedHelpers.findAndHookMethod(要Hook的类,classLoader,方法名,参数,回调对象) Hook一个方法的时候使用,回调对象**XC_MethodHook()**需重写两个方法beforeHookedMethod(MethodHookParam param):方法调用前执行afterHookedMethod(MethodHookParam param) 方法调用后执行注:可以调用param.setResult()设置方法的返回值!


  • MethodHookParam:包含与调用方法有关的信息



比较关注的是这个thisObject,代表调用该方法的对象实例,如果是静态方法 的话,返回一个Null,比如这里调用onCreate()方法的是MainActivity,获得 的自然是MainActivity实例。


接着是获取成员变量,分为私有与非私有变量,非私有直接调用下述方法 即可获得class


Class c = lpparam.classLoader.loadClass("com.coderpig.cpwechatxposed.MainActivity");
Field field = c.getField("tv");


如果是私有,则需要先设置访问权限(setAccessible)


Class c = lpparam.classLoader.loadClass("com.coderpig.cpwechatxposed.MainActivity");
Field field = c.getDeclaredField("tv");
field.setAccessible(true);


接着调用获得该对象


TextView tv = (TextView) field.get(param.thisObject);
tv.setText("贪玩难约");


2.补充姿势点


  • IXposedHookZygoteInit:在Zygote启动时调用,用于系统服务的Hook 回调方法initZygote()


  • IXposedHookInitPackageResources:在资源布局初始化时会回被执行(inflate方法) 回调方法:handleInitPackageResources(XC_InitPackageResources.InitPackageResourcesParam resparam)InitPackageResourcesParam包含两个参数,包名和XResource(资源相关)



有了这个XResource对象,就可以拿到布局资源树了,通过重写hookLayout方法,



LayoutInflatedParam,里面这个view就是布局资源树了,你可以拿到遍历,拿到某个 特定控件,然后做一些骚操作。



XposeHelpers提供了一些辅助方法


  • callMethod(Object obj,String methodName, Object... args):在APP中调用特定方法; 参数依次是:调用方法的所在类,调用方法名,方法参数


  • findClass(String className,ClassLoader classLoader):获取class类实例 参数依次是类名,类加载器


  • findMethodExact:通过反射查找类的成员方法(可setAccessible(true)设置非私有)


  • findConstructorExact:通过反射查找构造函数(同样可设置可访问下性)


  • findAndHookXXX:查找并Hook


  • setXxx:通过反射设置对象数据成员的值


  • setStaticXxx:通过反射设置静态变量的值


  • XposedBridge.log("日志内容"):输入日志和写入到/data/xposed/debug.log Xposed Installer日志那里可以看到!


  • 内部类:通过$符号链接内部类


  • 只能Hook方法与构造方法,不能Hook接口和抽象方法


4.小结


基础的东西大概就这些,后续觉得有遗漏的回头补,谢谢~


相关文章
|
6月前
|
缓存 分布式计算 算法
码农死磕这份Java高级开发文档,成功'挤'进一线大厂,这也太强了吧
拿到一份offer比什么都重要,所以笔者专门花了近一个月的时间整理好了一份专门为Java面试而生的总结,注意的是笔者仅仅对面试技术方面的题目进行的总结,至于如何去和面试官去聊,怎么聊,聊得嗨,这里笔者就不谈了,因为这方面并不是笔者擅长的。
|
SQL 安全 前端开发
Web安全性测试包括哪些要点?梳理下,总算搞明白了
Web安全性测试包括哪些要点?梳理下,总算搞明白了
435 0
Web安全性测试包括哪些要点?梳理下,总算搞明白了
|
JavaScript 前端开发 测试技术
6款程序员实用工具,老少皆宜,你一定用得上!
6款程序员实用工具,老少皆宜,你一定用得上!
134 0
|
存储 程序员 编译器
【C/调试实用技巧】—作为程序员应如何面对并尝试解决Bug?
【C/调试实用技巧】—作为程序员应如何面对并尝试解决Bug?
149 0
|
开发者 Java 网络安全
消灭 Java 代码的“坏味道” | 开发者必读(078期)
最炫的技术新知、最热门的大咖公开课、最有趣的开发者活动、最实用的工具干货,就在《开发者必读》!
959 0
ADS2020安装陷阱你学废了吗,小白狂喜教程
ADS2020安装陷阱你学废了吗,小白狂喜教程
856 0
ADS2020安装陷阱你学废了吗,小白狂喜教程
|
存储 算法 安全
我用一个小小的开放设计题,干掉了40%的面试候选人
去年团队招聘需求比较大,本人参与了近百次的面试工作。今天来跟大家聊聊,面试候选人过程中,一个常见的开放类设计题目的解题思路,以及候选人的理解设计误区分析。
我用一个小小的开放设计题,干掉了40%的面试候选人
|
Java Linux API
抱歉,Xposed真的可以为所欲为——1.基础知识储备(上)
本节简单介绍了什么是Xposed,基本原理,如何创建一个Xposed项目以及Xposed常用的类与方法。
441 0
|
数据库 Android开发
|
数据库管理
下一篇
无影云桌面