被hook的apk正常显示的界面
其中,在查询数据库结束之后会调用MainActivity中的finishSetting()方法,隐藏progressbar、显示相对应的listview并更新listview中的内容
private void finishSetting(){
//取消progressbar的动画及隐藏progressbar
ivLoading.clearAnimation();
ivLoading.setVisibility(View.GONE);
//显示相应的listview
if (isUser) {
listViewUser.setVisibility(View.VISIBLE);
listViewSys.setVisibility(View.GONE);
} else {
listViewSys.setVisibility(View.VISIBLE);
listViewUser.setVisibility(View.GONE);
}
//更新listview的内容,调用了cursoradapter的.changeCursor方法
changeAdapterInfo();
}
目的:现在要将该方法hook掉,查询结束后不进行任何处理,然后界面会一直显示进度条
步骤:
1.在自定义的hook的入口类Main中添加hook代码
类Main中的代码
public class Main implements IXposedHookLoadPackage{
private static final String TAG = "testXpost";
//手机中所有的程序被加载时都会调用这个方法
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
//根据包名判断是否是所需要hook的目标apk
if(loadPackageParam.packageName.equalsIgnoreCase("com.test.extractapk")) {
//向xposed installer中写入日志信息
XposedBridge.log("load app:xpose load success...........");
//加载所要hook的apk中的方法所在的类,返回其clazz对象
Class linkMainClazz = loadPackageParam.classLoader.loadClass("com.test.extractapk.MainActivity");
//向xposed installer中写入日志信息
XposedBridge.log("load app:xpose load extractapk success...........");
//查找相应类中的相应方法,并替换方法的内容
//第一个参数是方法所在的类的clazz,第二个参数是所要hook的方法名,内部类中是所要替换的方法的内容
XposedHelpers.findAndHookMethod(linkMainClazz, "finishSetting", new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
//向xposed installer中写入日志信息
XposedBridge.log("changed method success...........");
return null;
}
});
}
}
2.运行该apk ,在Xposed Installer中点击模块,勾选上这个apk的模块
3.Xposed Installer中回退到主界面,并点击框架,点击安装更新
4.然后手机会重启,重启后打开被hook的apk,由于把设置apk的方法hook掉了,会看到界面的进度条不停地旋转
5.上面的xposed入口类Main中通过调用方法XposedBridge.log向Xposed Installer中写入了一些日志,点击Xposed Installer的日志,在里面可以看到输出信息,执行过程
注:1.被hook的apk应该在install重启之前打开过一次,否则会报classNot Find Exception
2.由于Xposed Installer需要向系统中写东西,手机需要有root权限