Frida构造数组、对象、Map和类参数
![](/images/rabete.jpg)
本章主要内容为hook后参数如何打印和构造
环境:
设备:pixel XL
系统版本:Android 7.1
数组
改变app的返回结果
源码片段
char arr[][] = new char[4][]; // 创建一个4行的二维数组
arr[0] = new char[] { '春', '眠', '不', '觉', '晓' }; // 为每一行赋值
arr[1] = new char[] { '处', '处', '闻', '啼', '鸟' };
arr[2] = new char[] { '夜', '来', '风', '雨', '声' };
arr[3] = new char[] { '花', '落', '知', '多', '少' };
Log.d("SimpleArray", "-----横版-----");
for (int i = 0; i < 4; i++) { // 循环4行
// Log.d("SimpleArraysToString", Arrays.toString(arr[i]));
// Log.d("SimpleStringBytes", Arrays.toString (Arrays.toString (arr[i]).getBytes()));
for (int j = 0; j < 5; j++) { // 循环5列
Log.d("SimpleArray", Character.toString(arr[i][j])); // 输出数组中的元素
}
if (i % 2 == 0) {
Log.d("SimpleArray", ",");// 如果是一、三句,输出逗号
} else {
Log.d("SimpleArray", "。");// 如果是二、四句,输出句号
}
}
hook
Character.toString()
获取参数和返回值并改变返回结果hook
charArrays.toString()
这里的X值因为格式的问题打印不出来,使用
JSON.stringify()
方法来打印
hook
charArray.getBytes()
- 有点奇怪,在搜索实例的时候出现了搜索不到的情况,要等app运行了很久(大概一个小时左右了)才能搜索到实例。看报错是编译优化导致的找不到类名。应该是设备或者系统版本的问题。没搜索到类似的问题,回头测试一下
- 之前是Android 10.0换了7.1没有这个问题了
对象/多态、强转
子类可以强转为父类,父类不能强转为子类
![image-20231118224940766](/2023/11/18/Frida%E6%9E%84%E9%80%A0%E6%95%B0%E7%BB%84%E3%80%81%E5%AF%B9%E8%B1%A1%E3%80%81Map%E5%92%8C%E7%B1%BB%E5%8F%82%E6%95%B0/image-20231118224940766.png)
- 子类强转为父类ok
接口
也可以在hook代码中实现接口
![image-20231118225044474](/2023/11/18/Frida%E6%9E%84%E9%80%A0%E6%95%B0%E7%BB%84%E3%80%81%E5%AF%B9%E8%B1%A1%E3%80%81Map%E5%92%8C%E7%B1%BB%E5%8F%82%E6%95%B0/image-20231118225044474.png)
枚举
获取枚举的实例和类
![image-20231118225148951](/2023/11/18/Frida%E6%9E%84%E9%80%A0%E6%95%B0%E7%BB%84%E3%80%81%E5%AF%B9%E8%B1%A1%E3%80%81Map%E5%92%8C%E7%B1%BB%E5%8F%82%E6%95%B0/image-20231118225148951.png)
Map
打印以及hook Map
Map的源码片段
Map<String, String> mapr0ysue = new HashMap<>(); // 创建Map集合对象
mapr0ysue.put("xiaoeryu 1", "张三"); // 向Map集合中添加元素
mapr0ysue.put("xiaoeryu 2", "李四");
mapr0ysue.put("xiaoeryu 3", "王五");
mapr0ysue.put("xiaoeryu 4", "赵六");
Log.d("5map", "key值toString"+mapr0ysue.toString());
打印Map
![image-20231119233324076](/2023/11/18/Frida%E6%9E%84%E9%80%A0%E6%95%B0%E7%BB%84%E3%80%81%E5%AF%B9%E8%B1%A1%E3%80%81Map%E5%92%8C%E7%B1%BB%E5%8F%82%E6%95%B0/image-20231119233324076.png)
- 打印可以使用命令
frida -U com.xiaoeryu.printout -l lesson5.js
加载脚本就打印出来了
hook的话需要添加-f
参数重新启动才能hook到
命令:frida -U -f com.xiaoeryu.printout -l lesson5.js --no-pause
![image-20231119233616888](/2023/11/18/Frida%E6%9E%84%E9%80%A0%E6%95%B0%E7%BB%84%E3%80%81%E5%AF%B9%E8%B1%A1%E3%80%81Map%E5%92%8C%E7%B1%BB%E5%8F%82%E6%95%B0/image-20231119233616888.png)
测试Demo源码
hook脚本
- 标题: Frida构造数组、对象、Map和类参数
- 作者: xiaoeryu
- 创建于 : 2023-11-18 22:14:47
- 更新于 : 2023-11-20 21:27:33
- 链接: https://github.com/xiaoeryu/2023/11/18/Frida构造数组、对象、Map和类参数/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论