• Xposed插件的编写


    一、简介

    根据手机系统和自身需求不同,手机可以安装:

    Magisk 为 Ramdisk时一般选择(此模式需要Riru模块):

    EdXposedManager

    Magisk 为 Zygisk 时一般选择:
    LSPosed

    根据官方说法,两者都是兼容Xposed脚本的。

    二、脚本介绍:

    常见的额接口如下
    IXposedHookZygoteInit, IXposedHookLoadPackage, IXposedHookInitPackageResources 等。


    IXposedHookZygoteInit接口实现了ZygoteInit阶段的hook能力,用于在Zygote进程启动之前执行相关代码,framework里的东西一般再这里改。


    IXposedHookLoadPackage接口实现了加载app阶段的hook能力,用于hook app的代码


    IXposedHookInitPackageResources接口实现了加载app资源时的hook能力,用于修改app的一些资源,比如布局文件什么的。

    当你的面具为Zygisk模式时,想要hook系统函数必须继承IXposedHookZygoteInit接口,否则无法成功hook。

    具体的编写脚本前准备,网上有很多,这里不在赘述。

    三、实践:

    1、hook app函数:

    1. @Override
    2. public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
    3. if (lpparam.packageName.equals("com.ss.android.ugc.trill")) {
    4. XposedBridge.log(" HOOK Test");
    5. Class clazz = XposedHelpers.findClass("android.telephony.TelephonyManager", lpparam.classLoader);
    6. XposedHelpers.findAndHookMethod(clazz, "getSimOperatorName", new XC_MethodHook() {
    7. @Override //重写XC_MethodHook()的回调方法
    8. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
    9. XposedBridge.log("它没有参数"); //打印第一个参数
    10. // Log.i("hook before param1:", (String) param.args[0]); //打印第一个参数
    11. }
    12. @Override
    13. protected void afterHookedMethod(MethodHookParam param) throws Throwable {
    14. super.afterHookedMethod(param);
    15. // 打印返回值
    16. XposedBridge.log("hook after result:" + param.getResult().toString()); //打印返回值(String类型)
    17. // 改变返回值
    18. // param.setResult("你已被劫持!!");
    19. }
    20. });
    21. }
    22. }

    Zygisk模式hook系统函数

    1. #继承Zygisk接口
    2. public class HookTest implements IXposedHookZygoteInit {
    3. @Override
    4. public void initZygote(StartupParam startupParam) throws Throwable {
    5. XposedHelpers.findAndHookMethod("android.telephony.TelephonyManager", StartupParam.class.getClassLoader(), "getSimOperatorName", new XC_MethodHook() {
    6. @Override
    7. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
    8. param.setResult("Verizon"); // 设置返回值
    9. }
    10. });
    11. }
    12. }

    在Ramdisk模式下,不使用IXposedHookZygoteInit接口好像也是可以hook系统函数的。

    以上笔记,如果错误,欢迎指出。

  • 相关阅读:
    三十而立技术er的进击之路
    2022 各互联网大厂面经及总结 + 大厂 Java 岗面试真题解析(进大厂必看攻略)
    WCF 请求答复模式
    原生K8S部署pig微服务项目
    Redis数据结构:列表
    嵌入式实时操作系统的设计与开发(信号量学习)
    以sqlilabs靶场为例,讲解SQL注入攻击原理【18-24关】
    编辑SRT字幕,添加在视频中播放
    Android自定义视图
    git 的使用以及如何解决git冲突问题
  • 原文地址:https://blog.csdn.net/kfyzjd2008/article/details/126344230