参考资料

https://blog.csdn.net/qq_42229759/article/details/103066214

https://blog.csdn.net/xingkong_hdc/article/details/82531505?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

事前准备:

xposed.apk

XposedBridgeApi-82.jar

环境目录:

test001/app/mylib 目录下存放的是XposedBridgeApi-82.jar 相关的包

test001/app/src/main/assets/xposed_init  文件中的内容是实现hook的包 + 类; 例如

com.example.test001.HookTest

在build.gradle 中需要将xpose的包引入

dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar'])    implementation 'androidx.appcompat:appcompat:1.0.2'    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'    testImplementation 'junit:junit:4.12'    androidTestImplementation 'androidx.test:runner:1.1.1'    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'    // 引入mylib中的jar    compileOnly fileTree(dir: 'mylib', include: ['*.jar'])  }

/test001/app/src/main/java/HookTest 中是 Hook实现的方法

package com.example.test001;// hook 导入包import java.lang.reflect.Method;import java.util.Map;import  de.robv.android.xposed.IXposedHookLoadPackage;import de.robv.android.xposed.XposedBridge;import de.robv.android.xposed.XposedHelpers;import de.robv.android.xposed.callbacks.XC_LoadPackage;import de.robv.android.xposed.XC_MethodHook;public class HookTest implements IXposedHookLoadPackage{    String signurl_classname = "com.chanjet.library.utils.FormatUrlUtils";    String md5password_classname = "com.chanjet.library.utils.EncryptUtils";    @Override    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {        if (!loadPackageParam.packageName.equals("com.foundao.bjnews")) {            return;        }        XposedBridge.log("xposed 测试");//         Class clazz = loadPackageParam.classLoader.loadClass(signurl_classname);//        XposedHelpers.findAndHookMethod(clazz, "formatUrlMap", new XC_MethodHook() {//        打印类中的方法名        Class <?> a_class = XposedHelpers.findClass(signurl_classname, loadPackageParam.classLoader);        for(Method method : a_class.getDeclaredMethods()){            XposedBridge.log("方法名:"+ method.getName());        }//        signurl  signurl_classname 为 由包到类的名称  signUrl 为方法名称 Map.class 是方法中参数的类型        XposedHelpers.findAndHookMethod(signurl_classname, loadPackageParam.classLoader, "signUrl", Map.class, new XC_MethodHook() {            @Override            protected void afterHookedMethod(MethodHookParam param) throws Throwable {                super.afterHookedMethod(param);                XposedBridge.log("signUrl params:  " + param.args[0].toString());            }        });//      formaturlmap        XposedHelpers.findAndHookMethod(signurl_classname, loadPackageParam.classLoader, "formatUrlMap", Map.class, new XC_MethodHook() {            @Override            protected void afterHookedMethod(MethodHookParam param) throws Throwable {                super.afterHookedMethod(param);//                获取结果                Object f_result = param.getResult();                XposedBridge.log("formatUrlMap params:  " + param.args[0].toString());                XposedBridge.log("formatUrlMap result:  " + f_result.toString());            }        });        Class <?> b_class = XposedHelpers.findClass(md5password_classname, loadPackageParam.classLoader);        for(Method method : b_class.getDeclaredMethods()){            XposedBridge.log("方法名: " + method.getName());        }//        hook多个参数的函数, 注 boolean 类型的参数 用boolean,不能使用Boolean        XposedHelpers.findAndHookMethod(md5password_classname, loadPackageParam.classLoader, "md5Password", String.class, boolean.class, new XC_MethodHook() {            @Override            protected void afterHookedMethod(MethodHookParam param) throws Throwable {                super.afterHookedMethod(param);                XposedBridge.log("md5password param1:" + param.args[0].toString());                Object result = param.getResult();                XposedBridge.log("md5password result:" + result.toString());            }        });    }}

 

hook 函数:

 

上述hook功能 将参数和结果卸载了xposed 的日志中了。

在手机上安装好virtualxposed以后, 可以在xposed-install 中的日志进行查看。

更多相关文章

  1. Android之Loader理解
  2. Android运行虚拟机报错Execution failed for task ':app:transfo
  3. Android(安卓)Post方法请求URL 迭代器
  4. Android(安卓)四大组件之 Service
  5. Android(安卓)view手势缩放与移动
  6. 浅谈Java中Collections.sort对List排序的两种方法
  7. mybatisplus的坑 insert标签insert into select无参数问题的解决
  8. Python技巧匿名函数、回调函数和高阶函数
  9. Python list sort方法的具体使用

随机推荐

  1. Change ALL links, hrefs,urls with vani
  2. 1、突然对jQuery的心血来潮
  3. 常用验证JS代码基础及实例
  4. 如何使函数等到对象的值未定义为js setTi
  5. 单选按钮单击,隐藏/显示不工作
  6. 无法在JQuery中查找表单输入
  7. IE中使用jquery的Google geomap失败
  8. 动态更改angularjs中静态段落的颜色
  9. javascript的密封对象之seal(),isSealed(
  10. 对多维数组中的列进行排序