抱歉,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.小结


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


相关文章
|
安全 搜索推荐
下载软件别再被套路!教你避开流氓下载器的坑!
安装之前,可以看到界面中明显的提示:“使用360安全导航”、“ABC看图”,这两处旁边还有复选框,细心的你肯定知道要把这两个复选框去掉。
183 0
下载软件别再被套路!教你避开流氓下载器的坑!
|
5月前
|
SQL 安全 算法
爆赞!终于有大佬把网络安全零基础入门教程给讲明白了!
网络安全的一个通用定义指网络信息系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的破坏、更改、泄露,系统能连续、可靠、正常地运行,服务不中断。网络安全简单的说是在网络环境下能够识别和消除不安全因素的能力。 网络安全在不同环境和应用中有不同的解释,例如系统运行的安全、系统信息内容的安全、信息通信与传播的安全等。 网络安全的主体是保护网络上的数据和通信的安全,数据安全性是指软硬件保护措施,用来阻止对数据进行非授权的泄漏、转移、修改和破坏等,通信安全性是通信保护措施,要求在通信中采用保密安全性、传输安全性、辐射安全性等措施。
|
存储 算法 安全
我用一个小小的开放设计题,干掉了40%的面试候选人
去年团队招聘需求比较大,本人参与了近百次的面试工作。今天来跟大家聊聊,面试候选人过程中,一个常见的开放类设计题目的解题思路,以及候选人的理解设计误区分析。
我用一个小小的开放设计题,干掉了40%的面试候选人
|
Java Linux API
抱歉,Xposed真的可以为所欲为——1.基础知识储备(上)
本节简单介绍了什么是Xposed,基本原理,如何创建一个Xposed项目以及Xposed常用的类与方法。
444 0
|
数据库 Android开发
|
数据库
|
数据库管理
|
Android开发 架构师 开发工具
Android开发常犯错误记录
Multiple dex files define Landroid/support/xxx 这个包冲突都是support里的,比如 Multiple dex files define Landroid/support/...
749 0