开发Xposed插件CPWechatXposed | 项目复盘(下)

简介: Xposed框架可以在不修改APK的情况下影响程序运行,我们可以利用它对App进行Hook,以实现一些自定义的功能。CPWechatXposed 是笔者开发的一款微信插件,本文介绍的是此插件开发过程与复盘。

② Xposed 提供的一些API


知道怎么创建运行一个Xposed项目,接着了解下都有哪些常用的API~


  • IXposedHookLoadPackage → App被加载时调用,用于App应用Hook回调的函数是:handleLoadPackage


  • XC_LoadPackage.LoadPackageParam → 包含与正在加载的应用程序相关的信息;


网络异常,图片无法展示
|


  • XposedHelpers.findAndHookMethod(要Hook的类,classLoader,方法名,参数,XC_MethodHook回调对象)


Hook一个函数时使用,XC_MethodHook回调对象需重写两个函数:


  • beforeHookedMethod(MethodHookParam param):方法调用前执行;
  • afterHookedMethod(MethodHookParam param):方法调用后执行;


注:可调用**param.setResult**()设置方法的返回值!


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


网络异常,图片无法展示
|


比较关注的是这里的 thisObject 代表调用此方法的对象实例,如果是静态方法,会返回null,而例子中调用OnCreate()方法的是MainActivity,获得的自然是MainActivity的实例。


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


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("贪玩难约");


  • 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接口和抽象方法;


③ 如何定位到方法调用点


知道哪些API可以耍了,接着就是如何定位到方法调用点了,方法一般有下述三种:


  • 猜测验证法:适用于特定场景,而且具有一定Android开发经验,Hook微信运动改步数,如果你写过计步类的程序,不难想到 手机传感器 那一块去:


网络异常,图片无法展示
|


接着就是写代码验证的过程了,完整过程可以移步至:《抱歉,Xposed真的可以为所欲为——3.微信运动占领封面出售广告位》 自行查阅~



  • 反编译apk源代码:没加固的可以直接用jadx直接反编译,加固的需要自己脱出dex再反编译,然后去跟代码。另外直接用jadx反编译遇到大apk时容易直接卡死,笔者写了个脚本:


网络异常,图片无法展示
|


执行下py文件一键反编译,哈哈,至于简单加固脱壳可以见我之前写的逆向文章,完整过程可移步至:《抱歉,Xposed真的可以为所欲为——6.你的表白撤不回了》 自行查阅~

4、总结思考


在编写Xposed的过程中,让我对逆向有了写了解,相比起普通Android开发仔,在竞品分析时,我能更快的了解到实现方式,日常使用APP时,用得不爽,就写个Xposed或者脱壳修复二次打包。


相关文章
|
4月前
|
Rust 前端开发 JavaScript
Tauri 开发实践 — Tauri 日志记录功能开发
本文介绍了如何为 Tauri 应用配置日志记录。Tauri 是一个利用 Web 技术构建桌面应用的框架。文章详细说明了如何在 Rust 和 JavaScript 代码中设置和集成日志记录,并控制日志输出。通过添加 `log` crate 和 Tauri 日志插件,可以轻松实现多平台日志记录,包括控制台输出、Webview 控制台和日志文件。文章还展示了如何调整日志级别以优化输出内容。配置完成后,日志记录功能将显著提升开发体验和程序稳定性。
197 1
Tauri 开发实践 — Tauri 日志记录功能开发
|
6月前
|
数据可视化 Linux Android开发
Flutter相关痛点解决问题之研发链路中的环境配置和打包集成问题如何解决
Flutter相关痛点解决问题之研发链路中的环境配置和打包集成问题如何解决
|
6月前
|
Java Maven 开发者
"揭秘IDEA的神奇助手:Maven Helper插件,让你轻松驾驭复杂依赖,告别冲突噩梦!"
【8月更文挑战第20天】Maven Helper是一款提升Java开发者工作效率的IDEA插件,它能直观展示项目依赖关系并协助管理。主要功能包括依赖树视图、冲突检测与解决及依赖排除。安装简便,重启IDEA后即用。借助其“Dependencies”面板,开发者可以清晰了解依赖详情,快速定位并解决冲突问题,有效优化项目结构,提升开发效率。
387 0
|
测试技术 开发工具 数据库
《移动互联网技术》第十一章 Android应用工程案例: 掌握Android系统的需求分析和设计以及 Android项目的程序测试和版本管理方法
《移动互联网技术》第十一章 Android应用工程案例: 掌握Android系统的需求分析和设计以及 Android项目的程序测试和版本管理方法
160 0
|
API Android开发
基于Xposed自动化框架XposedAppium
基于Xposed自动化框架XposedAppium
334 0
|
存储 编解码 缓存
|
移动开发 缓存 前端开发
ReactNative项目升级避坑指南
ReactNative项目升级避坑指南
482 0
ReactNative项目升级避坑指南
|
Android开发
开发Xposed插件CPWechatXposed | 项目复盘(上)
Xposed框架可以在不修改APK的情况下影响程序运行,我们可以利用它对App进行Hook,以实现一些自定义的功能。CPWechatXposed 是笔者开发的一款微信插件,本文介绍的是此插件开发过程与复盘。
453 0
|
JavaScript 持续交付
造轮子之dying-ui组件库|项目复盘
之前组件封装接触也只是在项目中所需,才会去封装组件。起初自己产生这个想法,就知道从无到有一定很困难。在b站上搜资源,确实又类似的,但只是按钮的基本教程。之后,各种翻资料,举一反三,尤其是在项目持续部署GitHub时,直接卡住了。为了完成这个项目,不得不说,是深刻体会到了无助、却又无奈的压力。
209 0
|
Java Python
无脑安装java编程语言开发的集成环境 IDEA
根python很类似:可以借鉴无脑安装——Python 及 安装python集成开发环境pycharm - 隐姓埋名4869 - 博客园 (cnblogs.com)
无脑安装java编程语言开发的集成环境  IDEA

热门文章

最新文章