首先在Root的手机上安装Xposed框架,然后新建一个android工程,不需要添加任何Activity。
下载Xposed的jar包,然后在android工程app目录创建lib文件夹,将jar包放置进入并依赖。
修改app下面的build.gradle,将刚添加的jar修改为provided方式

修改manifest文件,加入Xposed模板的必要描述

创建一个java类,在里面写hook代码。
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class Main implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
//判断包名是否为要 hook 的应用
if(loadPackageParam.packageName.equals("要Hook的应用包名"){
//hook 对应类的对应方法
、 XposedHelpers.findAndHookMethod("android.widget.TextView", loadPackageParam.classLoader, "setText", CharSequence.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
//将 textView 的 settext 方法的参数修改成了下面的值,所以 APP 里面所以的 TextView 控件都会显示下面的字符串
param.args[0] = "hook....";
}
});
}
}
}
创建assets资源文件目录,然后在该目录下创建一个文本文档,名字叫做xposed_init,没有后缀名。在里面写上Hookook的包名再加类名。

将Hook模板安装到手机上,在Xposed installer里面勾选刚安装上的模板并重启手机。

针对有应用被Hook的风险,我们可以进行Hook框架的检测。如果有Hook框架的话,就给用户提示然后退出。
实例代码
public void getApplications() {
List<PackageInfo> packages =
getPackageManager().getInstalledPackages(0);
for(int i=0;i<packages.size();i++) {
PackageInfo packageInfo = packages.get(i);
String name = packageInfo.packageName;
//检测手机是否装有 xposed
if(name.contains("xposed.installer")){
/*
相应的处理
*/ Log.d("test:","xposed");
}
}
}
网友评论