• 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系统函数的。

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

  • 相关阅读:
    力扣每日一题56:合并区间
    云原生之深入解析K8S集群内的服务通信
    初识Spring(一)IOC
    从0到1,一个长期主义的中国自动驾驶范本
    Day30 接口测试requests
    MATLAB中findpeaks函数使用
    【第98题】JAVA高级技术-网络编程17(简易聊天室12:实现客户端一对一聊天)
    k8s pod使用sriov
    上海00后985毕业女生月薪1.2w,想找年薪40万程序员,网友表示很不理解
    leetcode 557. Reverse Words in a String III(字符串中单词逆序III)
  • 原文地址:https://blog.csdn.net/kfyzjd2008/article/details/126344230