Xposed模块开发简单上手

news/2025/2/23 3:40:58/文章来源:https://www.cnblogs.com/guokaifeng/p/18725098

起因

最近接到一个新的项目,需要开发Xposed模块相关代码,之前没有开发过Xposed模块,只能看着网上的教程简单开发个demo,
熟悉一下Xposed模块开发流程.

环境

  • 下载安装Android Studio 并且有java开发环境
  • 一台支持Xposed环境的手机
  • 使用到的案例app wuaipojie 和 xp api.jar
链接: https://pan.baidu.com/s/1I7mJBrYT3ZzaKYqKd1DGMg?pwd=69di 提取码: 69di 

创建项目

添加相关配置

  • 修改AndroidManifest.xml

        <meta-dataandroid:name="xposedmodule"android:value="true" />
<!--        作用: 告诉Xposed框架这是一个有效的模块。--><meta-dataandroid:name="xposeddescription"android:value="xp模块测试" />
<!--        作用: 提供模块的简短描述,用于Xposed Installer等工具展示。--><meta-dataandroid:name="xposedminversion"android:value="54" />
<!--        作用: 指定模块支持的Xposed框架最低版本(数字对应Android版本代码,如 54=Android 7.0-->
  • 添加xp api.jar

  • 添加xposed_init

package com.example.myapp;import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.callbacks.XC_LoadPackage;public class TestHook implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {}
}

编写hook代码

  • 先看下目标app 需要hook的地方

手机打开usb调试链接电脑

package com.example.myapp;import android.util.Log; // Android 系统日志工具import de.robv.android.xposed.IXposedHookLoadPackage; // Xposed核心接口
import de.robv.android.xposed.XC_MethodHook; // 方法hook基础类
import de.robv.android.xposed.XposedBridge; // Xposed专用日志工具
import de.robv.android.xposed.XposedHelpers; // Xposed反射辅助工具
import de.robv.android.xposed.callbacks.XC_LoadPackage; // 加载包回调参数public class TestHook implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {// 1. 检查是否为目标进程(防止误hook其他应用)if (!loadPackageParam.packageName.equals("com.zj.wuaipojie")) {return; // 非目标包直接跳过}// 2. 获取目标进程的类加载器(关键!)ClassLoader targetClassLoader = loadPackageParam.classLoader;// 3. 执行方法hook(精确匹配方法签名)XposedHelpers.findAndHookMethod("com.zj.wuaipojie.Demo",        // 目标类全称targetClassLoader,              // 必须使用目标进程的类加载器"a",                           // 要hook的方法名String.class,                   // 方法参数类型(按顺序)new XC_MethodHook() {             // 方法回调处理@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {super.beforeHookedMethod(param);// === 方法执行前逻辑 ===// 第一种日志方式:Android标准日志(可能被系统过滤)Log.d("zj2595", "第一种日志记录方式," +"方法 a 被调用未修改参数: " + param.args[0].toString());// 第二种日志方式:Xposed专用日志(稳定输出)XposedBridge.log("第二种日志记录方式," +"方法 a 被调用未修改参数: " + param.args[0].toString());// 修改方法参数(通过反射直接操作参数数组)param.args[0] = "被HOOK过"; // 输出修改后的参数值Log.d("zj2595", "第一种日志记录方式," +"方法 a 修改后的参数: " + param.args[0].toString());}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);// === 方法执行后逻辑 ===// 可在此处收集返回值或执行清理操作// 示例:Log.d("zj2595", "方法a返回值: " + param.getResult());}});}
}

实现简单的hook

参考

https://www.bilibili.com/video/BV1b94y1u7gq/?spm_id_from=333.337.search-card.all.clickhttps://www.bilibili.com/video/BV1VT411C7Sr/?spm_id_from=888.80997.embed_other.whitelist&t=472.311224&bvid=BV1VT411C7Sr&vd_source=71255b7f1df42f35a9ec4d880389817c

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/886850.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache-CC6链审计笔记

java-CC6链审计笔记 一、审计过程 1、lazyMap 在之前CC1的审计中发现ChainedTransformer的transform方法还可以被LazyMap的get方法调用public Object get(Object key) {// create value for key if key is not currently in the mapif (map.containsKey(key) == false) {Object…

3年经验来面试20K的测试岗,连基本功都不会,还不如去招应届生

这段时间面试了几十个人。发现一个很奇怪的现象,面试中一问到元素定位、脚本编写之类的,很多人都能对答如流。但只要一深入,比如“项目中UI自动化和接口自动化如何搭配使用用?”、“项目采用什么策略来保证自动化脚本的稳定性?”。大多数人都避重就轻、含糊其辞。📝 博主…

harbor升级(最详细记录)

1.harbor升级说明Harbor 升级过程需要按照官方推荐的升级路径逐步进行,不能直接跨版本升级。 此次是从Harbor 2.6.4 升级到 Harbor 2.12.2版本 单机版升级,Harbor服务器172.16.4.60 docker版本19.03.8, /etc/docker/daemon.json"log-driver": "json-file&quo…

搭建本地NCBI病毒库用于Blast

搭建本地NCBI病毒库用于Blast目的:为了通过Blast剔除我数据集中所有与Human任意片段相似度超过97%的序列 日期:2022/11/171. Nt库下载 创建conda环境 conda create -n aspera conda activate aspera conda install -y -c hcc aspera-cli conda install -y -c bioconda sr…

你还不会使用Pycham Remote development 打开远程主机工作目录吗?这篇文章帮你解决!

前言必备: 本地开发机与远程主机都要安装Pycharm专业版!!!废话不多说直接开始!! 1、打开pycharm2、依次点击File、Remote Development3、依次点击SSH、New Project4、这里我们选择设置New Connection5、点击 +6、依次输入IP、端口、用户名、密码(可以选择其他认证方式)7、点击t…

Mybatisplus自动生成代码

第一Maven中添加依赖点击查看代码 <!-- MyBatis-Plus 扩展库 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-extension</artifactId><version>3.5.7</version></dependency><dependency&…

LinkedBlockingQueue的poll方法底层原理

一、LinkedBlockingQueue的poll方法底层原理 LinkedBlockingQueue 的 poll 方法用于从队列头部移除并返回元素。如果队列为空,poll 方法会立即返回 null,而不会阻塞线程 1、poll 方法的作用从队列头部移除并返回元素。如果队列为空,立即返回 null。该方法是非阻塞的,适用于…

【R3 RootKit 病毒】基础知识研究

# 恶意样本 # RootKit RootKit简介 RootKit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络连接等信息,比较多见到的是Rootkit一般都和木马、后门等恶意程序结合使用。 技术研究入门 一般的恶意程序使用RootKit技术,主要功能分为下面两类: (…

vscode配置免密登录

Host 192.168.233.130HostName 192.168.233.130User rootPort 22IdentityFile C:\\Users\\username\\.ssh\\id_rsa

Camstar设置textbox只允许扫码

😘宝子:除非不再醒来,除非太阳不再升起,不然都请你好好生活,挣扎着前进,开心的笑。(●◡●)

虚幻GameAbilitySystem源码与设计解析-GameEffectComponent的实现

// 版权所有(c)Epic Games, Inc. 保留所有权利。#pragma once#include "CoreMinimal.h" #include "GameplayEffectComponent.generated.h"struct FActiveGameplayEffect; struct FActiveGameplayEffectsContainer; struct FGameplayEffectSpec; struct F…

建筑遗产的保护与活化利用:历史与现代的和谐交响

在时间的长河中,建筑遗产是凝固的记忆,承载着历史的厚重与文化的底蕴。如何在尊重与保护的前提下,让这些古老建筑焕发新生,融入现代生活,成为富有功能性和时代感的场所,是当代建筑设计面临的一大挑战。 1. 尊重历史,理解遗产价值一切活化利用的出发点,首先是深入研究与…