12下一页
返回列表 发新帖

XposedHook api介绍 第三篇XpHook复杂参数和自定义类型菜鸡教程

[复制链接]

10

主题

70

帖子

315

积分

初中生

Rank: 3Rank: 3

金币
52
好评
12
贡献
0
QQ
发表于 2021-11-2 19:28:43 | 显示全部楼层 | 阅读模式
本帖最后由 是小兔子呀 于 2021-11-2 19:34 编辑

前面两节课说了xphook普通变量 和 普通方法 构造方法 这节课我们来学一下hook复杂参数和自定义类型
比如说一个方法是这种
  1. public void complex(String[][] args, Dog dog , List<Sting> list ){
  2. Log.i("铁蛋","复杂参数");
  3. }
复制代码
这么复杂这么hook 又是 二纬数组 又是自定义的Dog类 又是一个list集合 怎么办呢我们可以这样来解决 首先我们来简单看一下findAndHookConstructor的源码 可以看到下面的
  1.     public static Unhook findAndHookConstructor(Class<?> clazz, Object... parameterTypesAndCallback) {
  2.         throw new RuntimeException("Stub!");
  3.     }

  4.     public static Unhook findAndHookConstructor(String className, ClassLoader classLoader, Object... parameterTypesAndCallback) {
  5.         throw new RuntimeException("Stub!");
  6.     }
复制代码
可以看到方法的参数列表是一个objct类型 那就是说可以传入 任何类型的参数 因为object是所有类的父类
所以说我们可以通过传入一个字符串详细类路径来获取到自定义的类型 比如说
第一个参数二维数组我们用的是smali语法来寻找二维数组[[Ljava.lang.String;如果是String[] args 就写一个[ 这个案例我们是二维数组
第二个参数是Dog比如说dog类的路径是com.tiedan.Dog那么参数列表我们就填com.tiedan.Dog通过类路径和类名寻找方法列表也可以通过反射来获取类
java反射获取类的字节码的方式有很多 这里就不一样举例了感兴趣的同学可以自行百度
  1. XposedHelpers.findAndHookMethod(clazz,
  2.                     "complex",//需要hook方法名
  3.                     "[[Ljava.lang.String;",//这里二维数组我们用的是smali语法来寻找二维数组如果是String[] args 就写一个[ 这个案例我们是二维数组
  4.                     "com.tiedan.Dog",//比如说dog类的路径是com.tiedan.Dog那么参数列表我们就填com.tiedan.Dog
  5.                     List.class,//这里是第三个参数 集合其实集合我们可以无视他直接获取类就行了所以这里我们填写
  6.                     new XC_MethodHook() {
  7.                         //方法执行前hook
  8.                         public void beforeHookedMethod(MethodHookParam param) throws Throwable {

  9.                         }
  10.                         //方法执行后hook
  11.                         public void afterHookedMethod(MethodHookParam param) throws Throwable {

  12.                         }
  13.                     });
复制代码

hook的基本已经讲的差不多了之前我们只学习了在方法执行之前hook 和方法执行之后hook 其实还有一种方法是直接替换方法的内容
就是说不让原来的方法执行直接执行我们自己写的代码 比如说某外挂执行了一大堆判断如果说卡密正确返回 true 卡密错误返回 flase我们可以直接让他返回true
然后我想了一下顺便教一下你们那个复杂参数的方法列表通过反射获取参数
接下来我们来看代码实现


  1. //forname的第二种用法 传入一个类路径 第个参数是一个boolean类型 forname底层会执行无参数构造如果说直接执行的话 可以传入一个false不执行无参构造这里我们不执行
  2.             //然后最后一个参数是传入当前类加载器来更准确的判断这个list是不是我们要获取的list
  3.             Class list = Class.forName("java.util.List", false, lpparam.classLoader);

  4.             //new XC_MethodReplacement       Replacement替换
  5.             XposedHelpers.findAndHookMethod(clazz,
  6.                     "complex",//方法名
  7.                     "[[Ljava.lang.String;",
  8.                     Class.forName("com.tiedan.Dog"),//这里我们来写一下通过反射获取字节码 当然直接传字符串也是可以的因为xp底层传入一个字符串他也会去调用这个forname方法
  9.                     list,//forname的第二种用法 传入一个类路径 第个参数是一个boolean类型 forname底层会执行无参数构造如果说直接执行的话 可以传入一个false不执行无参构造这里我们不执行
  10.                     //然后最后一个参数是传入当前类加载器来更准确的判断这个list是不是我们要获取的list
  11.                     new XC_MethodReplacement() {

  12.                         //   这是替换之后的输出
  13.                         public Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {

  14.                             return true;//比如说原来方法返回一个布耳类型就返回这个 这里注意和原方法返回值一定要一致 不然会报错
  15.                         }
  16.                     });
复制代码




好了这节课就到这里 老是说理论也没意思 下节课我们来实战分析一款app 通过我们自己写xp模块来实现对app功能的小修改
最后还是我可爱的交流群欢迎加群学习





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
已有1人评分金币 理由
你是小兔叽嘛 + 1 每篇都看牛逼

查看全部评分 总评分:金币 +1 

q 1430607429
群801362831
回复

使用道具 举报

10

主题

70

帖子

315

积分

初中生

Rank: 3Rank: 3

金币
52
好评
12
贡献
0
QQ
发表于 2021-11-2 19:35:17 | 显示全部楼层
好诡异啊 打了一大堆论坛发出来是乱码
q 1430607429
群801362831
回复

使用道具 举报

0

主题

130

帖子

402

积分

初中生

Rank: 3Rank: 3

金币
226
好评
1
贡献
0
发表于 2021-11-2 19:38:35 | 显示全部楼层

回帖奖励 +1 金币

看看大佬发言
回复

使用道具 举报

2

主题

1581

帖子

6633

积分

硕士生

Rank: 6Rank: 6

金币
1526
好评
0
贡献
0
发表于 2021-11-2 19:41:36 来自手机  | 显示全部楼层

回帖奖励 +1 金币

向大佬学习
回复

使用道具 举报

101

主题

3285

帖子

8073

积分

硕士生

Rank: 6Rank: 6

金币
2087
好评
7
贡献
0
发表于 2021-11-2 19:59:59 来自手机  | 显示全部楼层

回帖奖励 +1 金币

回复

使用道具 举报

16

主题

4673

帖子

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
2394
好评
5
贡献
0
发表于 2021-11-2 20:00:33 来自手机  | 显示全部楼层

回帖奖励 +1 金币

回复

使用道具 举报

94

主题

1155

帖子

4047

积分

大学生

Rank: 5Rank: 5

金币
1705
好评
6
贡献
0
发表于 2021-11-2 20:01:38 来自手机  | 显示全部楼层

回帖奖励 +1 金币

向大佬学习
回复

使用道具 举报

13

主题

631

帖子

2718

积分

大学生

Rank: 5Rank: 5

金币
674
好评
8
贡献
0

MT论坛新人

发表于 2021-11-2 20:02:34 来自手机  | 显示全部楼层

回帖奖励 +1 金币

大佬大佬
回复

使用道具 举报

27

主题

796

帖子

2985

积分

大学生

Rank: 5Rank: 5

金币
1040
好评
30
贡献
0

MT论坛最佳新人MT论坛新人考神MT论坛帅哥MT论坛活跃会员

QQ
发表于 2021-11-2 20:02:57 来自手机  | 显示全部楼层

回帖奖励 +1 金币

虽然看不懂,但我大受震撼
回复

使用道具 举报

13

主题

815

帖子

2445

积分

大学生

Rank: 5Rank: 5

金币
884
好评
2
贡献
0
QQ
发表于 2021-11-2 20:10:48 来自手机  | 显示全部楼层

回帖奖励 +1 金币

金币我来了
回复

使用道具 举报

54

主题

1454

帖子

4911

积分

大学生

Rank: 5Rank: 5

金币
2347
好评
1
贡献
0
发表于 2021-11-2 20:18:08 来自手机  | 显示全部楼层

回帖奖励 +1 金币

谢谢分享
回复

使用道具 举报

0

主题

162

帖子

456

积分

初中生

Rank: 3Rank: 3

金币
312
好评
0
贡献
0
发表于 2021-11-2 20:23:18 | 显示全部楼层

回帖奖励 +1 金币

谢谢分享
回复

使用道具 举报

27

主题

2733

帖子

6406

积分

硕士生

Rank: 6Rank: 6

金币
1286
好评
3
贡献
0

MT论坛最佳新人考神MT论坛帅哥MT论坛新人

发表于 2021-11-2 20:31:07 来自手机  | 显示全部楼层

回帖奖励 +1 金币

前来学习!
回复

使用道具 举报

1

主题

295

帖子

1657

积分

高中生

Rank: 4

金币
290
好评
0
贡献
0
发表于 2021-11-2 20:34:04 来自手机  | 显示全部楼层

回帖奖励 +1 金币

看看是什么
回复

使用道具 举报

70

主题

2519

帖子

6878

积分

硕士生

Rank: 6Rank: 6

金币
1581
好评
42
贡献
0

考神MT论坛新人MT论坛最佳新人MT论坛活跃会员

发表于 2021-11-2 20:37:07 来自手机  | 显示全部楼层

回帖奖励 +1 金币

学习学习
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表