参考资料

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

环境目录:

Android xposed Hook 初探01_第1张图片

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 函数:

Android xposed Hook 初探01_第2张图片

Android xposed Hook 初探01_第3张图片

Android xposed Hook 初探01_第4张图片

 

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

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

更多相关文章

  1. android读取网络图片
  2. android 获取图片绝对地址
  3. 图片比例缩放以及bitMap转BitmapDrawable
  4. Android ImageView显示网络图片
  5. 【android】简单的根据url下载图片的一个类
  6. Android 代码片段---从相册或相机获取图片保存并处理
  7. android列出目录下的所有图片
  8. Android页面跳转是如何传递参数的
  9. Android中的GridView图片异步加载

随机推荐

  1. android source code 备忘
  2. android 监听Home键和亮灭屏
  3. Android TextView控件文字添加下划线
  4. Linux | 安装与配置Android SDK
  5. android基于AndPermission的权限申请封装
  6. Android 中文API:如何安全的为APK进行签名
  7. Android实验九之天气预报
  8. picasso框架的使用
  9. android resouce list
  10. Android 获取缩略图,网络视频,或者本地视