编写Xposed模块
1,在AXML文件里添加以下代码:
<!-- 添加标识-->
<meta-data
android:name="xposedmodule"
android:value="true" />
<!-- 载入Hook模块后显示的信息-->
<meta-data
android:name="xposeddescription"
android:value="Xposed Proxy For Hook" />
<!-- 规定jar包的版本信息-->
<meta-data
android:name="xposedminversion"
android:value="54" />
2,在bulid文件下添加
集成XposedBridgeAPI-89.jar
compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'
3,在assets目录下,创建xposed_init 文件
内容是:Xposed的入口类的完整类名
固定写法:
public class packageHook implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
}
}
练习
打印装载的apk程序包名
public class packageHook implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
// 打印装载的apk程序包名
XposedBridge.log("Launch app: " + loadPackageParam.packageName);
XposedBridge.log("Hook已经成功了");
}
}
修改函数返回值:
project:CheckSN
Hook模块:
public class CheckSNHook implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
XposedBridge.log(lpparam.packageName+":");
XposedHelpers.findAndHookMethod(
"com.example.checksn.MainActivity",//被Hook函数的:包名+类名
lpparam.classLoader,//classLoader固定
"checkSN",//要hook的方法名
//方法参数 没有就不填
String.class,//被Hook函数的第一个参数
String.class,//被Hook函数的第二个参数
new XC_MethodHook() {
//Hook之前,方法执行前执行
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
StackTraceElement[] element=new Throwable("wodelog").getStackTrace();
for(int i=0;i<element.length;i++){
String s1= (String) param.args[0];
String s2= (String) param.args[1];
XposedBridge.log("账号:"+s1);
XposedBridge.log("注册码:"+s2);
XposedBridge.log("查看堆栈:"+element[i].toString());
}
}
//Hook之后,方法执行后执行,改方法的返回值一定要在方法执行完毕后更改
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//获取方法返回结果
param.getResult();
//设置方法返回结果
param.setResult(true);
super.afterHookedMethod(param);
}
}
);
}
}
2024/4/7
坑: app 的 build.gradle 不要引入source,只引入api即可,否则不报错,但是永远找不到IXposedHookLoadPackage
dependencies {
......
//以下一句引用
compileOnly 'de.robv.android.xposed:api:82'
}
坑:jcenter已经过期不提供服务了,一些网上的文档较旧了,改为在setting,gradle中添加
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
//以下一句引用
maven { url "https://api.xposed.info/"}
}
}
坑:插件写的有问题,一定要先卸载删除插件,然后重新修改后安装,然后exposed中打开模块并重启手机,;在这里卡了很久,就是因为有时候没这么做,导致一直不成功