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"));
热门推荐
苏轼诗词中的“津津乐道”
2024精彩回顾:8大时尚流行趋势
龙脊梯田摄影技巧:捕捉梯田的韵律与诗意
古老水稻见证民族的时代变迁
三元催化器要不要定期清洗
三元催化器要不要定期清洗
上海南京路必吃美食有哪些
民国时期,真的没有搞经济建设吗?说说饱含血与汗的旧中国经济
百年老照片背后的中法情缘
血液检查挂什么科 血液检查多少钱
抽血化验多少钱一次
声音嘶哑背后的健康隐患,你了解吗?
布兰特教你如何掌控中场:从技术到实战的全方位解析
10 首“禅意”十足的古诗词,首首尽显禅韵,读懂便是大彻大悟
不理解佛教,就不理解中国人的心灵——佛学对国人的三大影响
把健康带回家|老年人春节保健注意事项,请收藏!
描写乌镇的诗句
《2024年中国剧集报告》发布 揭示剧集发展新态势
老人被低俗微短剧“收割”,他们爱看的“好剧”又在哪儿呢
含糖饮料“续命”的年轻人,你将如何拥有健康未来?
提升朋友圈吸引力的技巧:内容、照片、文案与互动全攻略
地铁列车行驶也要看“红绿灯”吗?
半夏泻心汤:古方新用治胃病
数据复盘:粤桂股份8连板,主力资金抢筹19个行业,龙虎榜机构净买入12股
《僵尸先生》:从经典到没落,一部僵尸片的兴衰史
《小公主》里的那些隐秘歧视
冬天到了,梅花繁殖正当时!
正山小种品牌化发展:传统与创新的双重奏
正山小种红茶冲泡指南:从选茶到品饮的完整攻略
从一箱嫁妆到全球流行:正山小种红茶的传奇之旅