Frida技术问题:如何读取java.lang.String数组数据?
问题解决:读取Hook到的String数组参数值
报错原因
你打印出的[Ljava.lang.String;表示这是Java字符串数组,而非单个Object对象。虽然String继承自Object,但Java中String[]和Object[]是不同的数组类型;再加上Arrays.asList的可变参数重载会把传入的数组当作单个参数处理(可变参数本质是数组),导致Frida找不到匹配的方法重载,因此报错。
正确读取数组内容的方法
方法一:直接遍历数组(推荐)
无需借助Arrays.asList,直接判断对象是否为数组并遍历打印元素:
console.log(`Object type: ${obj.getClass().getName()}`); // 判断是否为数组类型 if (obj.getClass().isArray()) { const arrLength = Java.arrayLength(obj); console.log("Array content:"); for (let i = 0; i < arrLength; i++) { const element = Java.arrayGet(obj, i); console.log(`[${i}]: ${element}`); } } else { // 非数组场景的处理逻辑 console.log("Content:", obj); }
方法二:适配Arrays.asList重载
如果一定要使用Arrays.asList,需要将String数组转为Object数组以匹配方法重载:
console.log(`Object type: ${obj.getClass().getName()}`); let Arrays = Java.use('java.util.Arrays'); // 将String数组转为Object数组,匹配asList的可变参数重载 let arrayList = Arrays.asList.apply(null, Java.cast(obj, Java.use('[Ljava.lang.Object;'))); console.log(arrayList);
内容的提问来源于stack exchange,提问作者Duy Thành Vũ
相关产品推荐
相关产品推荐

