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"));
热门推荐
漫画《圣斗士星矢》黄金圣斗士把守的黄道十二宫到底是怎样的?
什么精华抗衰老紧致效果好
为何越来越多人放弃砖砌衣柜,看看年轻人的新做法,美观更耐用
英国留学生如何成为优秀口译员:从技能培训到职业发展
深圳社保扣除的规则是怎样的?这些规则有哪些变化趋势?
鼻子下面长了一堆小水泡怎么回事
股票除权填权解析:理解股票市场的投资技巧
“山西菜不入流,上不得台面”?探秘那些比较出名的山西菜...
亚里士多德:吾爱吾师,吾更爱真理!折射出怎样的观念
“嵌入式踢脚线”越来越流行?入住后才知道,原来好处这么多
《甄嬛传》剧组重聚:资本运作下的温情与商业博弈
温暖冬季的美味羊肉汤制作经验分享
绿色能源行业深度解析:定义、发展趋势及热门岗位
超市收银员会被自助收银机替代吗?未来发展趋势解析
儿童膝关节肘关节痛的原因及应对方法
LCK超级银河战舰,花40亿买世界冠军,如今已国内无敌
孟德尔的豌豆实验:揭秘遗传规律
如何规划合理的装修预算?这种预算如何满足不同的装修需求?
古今交融、中西合璧 中华巴洛克:多元业态模式打开穿越“传送门”
结婚送礼指南:实用、创意与情感的完美结合
卧室阳台的N种可能,这里都帮你想到了
阴阳家的思想是什么?和道家有什么区别?
燃气安检为什么检?检什么?怎么检?一文读懂燃气入户安全检查!
以小幼衔接为起点 罗湖探索实现全学段贯通培养
150城数据告诉你,哪里的幼儿园在批量关停?
腰背痛如何通过运动进行康复锻炼
BIM技术在不同类型桥梁中的应用差异及其影响
项目管理师怎么报名流程
浙江邮政:数智赋能政务服务转型升级
嵌入式开发学习——数电模电基础