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"));
热门推荐
刘诗诗尖叫之夜红毯造型惊艳全场,绿色礼服尽显温婉之美
刘诗诗双剧齐发:《掌心》《醉梦》引热议
自动驾驶汽车军事应用方案研究
专家:自动驾驶在城市交通落地需考虑与其他交通方式配合
秋天常吃这 5 道菜,润燥益肝明目,安神助眠
尿液颜色与健康的关系:从正常黄色到异常变色的解读
揭秘泰国四千年历史:从神秘班清文化到辉煌素可泰王朝
西岭雪山滑雪攻略:成都周边最大滑雪场,让你尽享冰雪乐趣
九寨沟:冬日冰雪童话世界
海螺沟贡嘎雪山:冬季邂逅蜀山之王的冰雪奇缘
窦圌山:蜀北小蓬莱的自然与人文传奇
探秘四川最美林草景观:窦圌山
窦圌山深度游:李白故乡的避暑胜地
梓潼县丹参丰收季:红根子致富新路
刘备在昭化古城的那些事儿
龙岩旅游攻略:热门景点与交通指南
初步了解皮料
皮革制品:时尚界的经典之选与社会变迁的见证者
二层牛皮算真皮吗?一篇搞懂皮革面料的秘密,再也不被坑
心肌酶检查:项目、方法、适用人群及注意事项全解析
儿童甲流后查心肌酶升高是否代表心肌炎?
虾蟹享受吸氧服务、跨省最快7小时送达……青岛海鲜这样“邮”向全国
尿液像普洱茶?当心身体在发出健康预警
盛慧:潮州菜的秘密,不过一个“真”字
农业数智化提升?“数据要素×”大赛现代农业优秀案例必看
牛皮革和牛皮的区别,你真的了解吗?看完涨知识了!建议收藏
十大常见农副产品大盘点:从主食到副食的全面解析
秋冬水质大挑战:如何选对RO反渗透净水器?
家用净水器清洁小妙招,你get了吗?
全屋净水系统:守护全家健康的秘密武器