Frida构造数组、对象、Map和类参数
本章主要内容为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没有这个问题了
对象/多态、强转
子类可以强转为父类,父类不能强转为子类
- 子类强转为父类ok
接口
也可以在hook代码中实现接口
枚举
获取枚举的实例和类
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
- 打印可以使用命令
frida -U com.xiaoeryu.printout -l lesson5.js
加载脚本就打印出来了
hook的话需要添加-f
参数重新启动才能hook到
命令:frida -U -f com.xiaoeryu.printout -l lesson5.js --no-pause
测试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 进行许可。
评论