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


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


相关文章
|
消息中间件 缓存 安全
抱歉,Xposed真的可以为所欲为——终 · 庖丁解码(下)
Xposed的使用不难,API也就那些,难点是: 逆向弄清楚Hook APP的方法调用流程,怎么调,参数都是干嘛的等。 经过反复练习,逆向Hook一个普通的APP(非企业级加固)写出可用的Xposed插件早已驾轻就熟(主要是磨时间),但有一个顾虑一直萦绕心间:不知道Xposed底层的具体实现原理。Tips:Xposed通常只能 Hook java层 及 应用资源的替换,有两个实现版本:4.4前的Dalvik虚拟机实现 和 5.0后ART虚拟机实现,本文针对后者进行分析,同时搭配 Android 5.1.1_r6 源码食用。
2131 0
|
消息中间件 NoSQL 关系型数据库
6年高级开发就因这道题少了5K,Kafka如何避免消息重复消费?
一个6年工作经验的小伙伴,被问到这样一个问题,说Kafka是如何避免消息重复消费的?面试完之后,这位小伙伴来找到我,希望我能给一个思路。今天,我给大家分享一下我的思路。
426 1
|
7月前
|
机器学习/深度学习 算法 物联网
【MPC】模型预测控制(MPC)之多变量和状态空间研究(Matlab代码实现)
【MPC】模型预测控制(MPC)之多变量和状态空间研究(Matlab代码实现)
653 0
|
JavaScript 前端开发 开发者
掌握Node.js中的异步编程:从回调到async/await
Node.js的异步编程模型是其核心特性之一,它使得开发者能够构建高性能和高并发的应用程序。本文将带你从Node.js的异步编程基础开始,逐步深入到回调函数、Promises、以及最新的async/await语法。我们将探讨这些异步模式的原理、使用场景和最佳实践,并通过实例代码展示如何在实际项目中应用这些概念。
|
前端开发 JavaScript PHP
Thinkphp在线客服系统源码多语言外贸版_PHP客服系统源码Uniapp开发搭建+论文设计
Thinkphp在线客服系统源码多语言外贸版_PHP客服系统源码Uniapp开发搭建+论文设计
|
程序员 开发工具 git
读书|程序员如何传书到 Kindle
​Kindle 注定渐行渐远,书籍则继续伴我们同行。
520 1
|
缓存 监控 前端开发
前端开发中的性能瓶颈分析与优化
【7月更文挑战第27天】前端开发中的性能优化是一个系统工程,需要从多个角度入手,综合运用多种策略。通过减少网络延迟、优化资源加载、优化DOM操作、优化JavaScript执行以及第三方服务优化等措施,可以显著提升前端应用的性能。同时,通过性能监控和调优工具的使用,可以持续监控和优化应用性能,确保用户获得流畅、高效的体验。
|
数据安全/隐私保护
APP - 支付宝怎么延时转账?能否撤回转账?
APP - 支付宝怎么延时转账?能否撤回转账?
3639 0
APP - 支付宝怎么延时转账?能否撤回转账?
|
前端开发 Linux 网络安全
旧手机闲置?教你用Termux搭建个移动服务器
旧手机闲置?教你用Termux搭建个移动服务器
1283 0
|
前端开发
layui-form
`layui-form`是一个前端表单组件,提供多种表单类型如单行、多行排列的输入框,下拉选择框(支持模糊搜索),单选框和复选框。表单元素可通过`required`和`lay-verify`属性进行必填和验证设置。编辑器如`layedit`可用于富文本输入,表单监听事件如提交和单选器可绑定回调函数进行处理。此外,能动态更新渲染表单,初始化表单数据并进行数据校验,包括自定义验证规则。
780 1

热门文章

最新文章