Xposed框架Hook环境搭建与基础教学
创作时间:
作者:
@小白创作中心
Xposed框架Hook环境搭建与基础教学
引用
CSDN
1.
https://blog.csdn.net/weixin_51111267/article/details/139087638
Xposed框架是一个运行时修改Android系统行为的框架,它允许开发者在不修改系统源代码的情况下,通过Hook技术实现对系统或应用行为的修改。本文将详细介绍Xposed框架的环境搭建过程以及基本的Hook操作方法。
一、Xposed环境搭建
(1) 导入依赖api-82.jar
首先需要下载并导入Xposed框架的API库。你可以从这里下载api-82.jar文件,并将其添加到你的Android项目中。
(2) 修改AndroidManifest.xml(改为Xposed模块)
在AndroidManifest.xml文件中添加以下元数据信息,将你的应用声明为Xposed模块:
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="this is a hook script" />
<meta-data
android:name="xposedminversion"
android:value="82" />
(3) 编写Hook类
创建一个实现IXposedHookLoadPackage接口的Hook类,用于处理包加载事件:
package com.example.myandroidstudio;
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
public class Hook implements IXposedHookLoadPackage {
public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable{
if(!lpparam.packageName.equals("com.app.acc"))return; // 过滤,只hook包名为com.app.acc的app
Log.d("yunxiao>>>","hook start...");
}
}
(4) 增加Xposed初始化入口
在项目根目录下新建一个名为xposed_init
的文本文件,内容为Hook类的完整路径:
com.example.myandroidstudio.Hook
(5) 编译为Xposed模块APK
使用Android Studio编译项目,生成APK文件。编译完成后,手动安装生成的APK。
(6) 激活Xposed模块
打开Xposed框架管理界面,找到你刚刚安装的模块,勾选激活,然后进行软重启。
(7) 连接安卓进行调试输出
在Logcat中添加相应的过滤器,以便查看Hook相关的日志输出。
注意事项:如果调试输出没有找到相应的应用包名,可以尝试重启手机。
二、Hook教学
(1) Hook普通函数
下面是一个Hook普通函数的例子:
package com.example.myandroidstudio;
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
import java.util.Map;
public class Hook implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
if(!lpparam.packageName.equals("com.xxx.abc")) return;
Log.d("yunxiao>>>","hook com.xxx.abc");
XposedHelpers.findAndHookMethod("abc.g$a", lpparam.classLoader, "onCallToAddSecurityFactor", String.class, Map.class, new XC_MethodHook() {
// $a 为类中类
// String.class, Map.class 为入参类型,如果入参为空则不用填,有多少个入参填多少个
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
String args0 = (String) param.args[0];
String args1 = param.args[1].toString(); // map打印输出
Log.d("yunxiao>>>","================================= hook start ==================================");
Log.d("yunxiao>>>","after args0:"+args0);
Log.d("yunxiao>>>","after args1:"+args1);
Log.d("yunxiao>>>","after result:"+param.getResult().toString());
Log.d("yunxiao>>>","================================= hook end ==================================");
super.afterHookedMethod(param);
}
});
}
}
(2) 打印调用栈
要在Hook方法中打印调用栈,可以在afterHookedMethod
中添加以下代码:
Log.e("yunxiao>>>","Stack:",new Throwable("Stack dump"));
热门推荐
探秘花果山:连云港景区精华一日游
抑郁症病史对公务员录用的潜在影响
电脑端 虚拟天文馆 Stellarium v24.4 免费开源
男子养灰鹦鹉犯法吗?揭秘我国相关法律法规
散文|挖折耳根
业主委员会成立章程:关于规范业主委员会组织与运作的若干规定
政策推动我国远洋渔业行业高质量发展 总产值整体上升 境外出售量持续下滑
如何看待美国抛售黄金这一行为的影响?这种影响如何波及全球市场?
“少年的玩具1-20改造”:从娱乐到教育的深度转型
从婴儿的哭声判断宝宝的需求
中国汽车保险行业发展政策、产业链全景、竞争格局及未来前景分析
从勇士次轮秀到联盟顶级得分手:蒙塔·埃利斯的NBA生涯回顾
稳定性与性能双重提升:AMI BIOS内存调试技巧
解密土壤透气的重要性,如何科学浇水才能让土壤透气性更好
AT89S51单片机与STM32芯片有什么共性与不同
大科学装置齐聚粤港澳大湾区:打造世界级装置集群
鼻腔和咽喉连接处有粘痰怎么办
怎么调理肠胃去口臭
网络安全新挑战:CC攻击影响与防御措施的全景分析
医药行业调整到位了吗?聊聊当下的医药投资
拖欠工资不给怎么办?教你如何申请劳动仲裁
云南勐海:共谋产业新发展 驻村干部齐发力
聚维酮碘含漱液的作用及治疗效果
文言文复习专题及参考答案解析—— 初中文言文通假字大全
侗族大歌遇上现代科技:《天蝉侗唤》让非遗文化焕发时代光彩
著名二胡大师刘长福新作品首发二胡重奏《欢乐的草原》
倡树网络新风,共建网络文明
汽车轮胎动平衡的作用与检测方法
提升与猫咪互动乐趣的多种游戏方式与小技巧
千行百业加速推陈出“新”——解码呼和浩特市经济增长关键动力