frida 主动调用参数构建问题
b.a(50331649,0, i2.this,f4897a, str, arrayList.toArray(new String));请问下各位大佬 arrayList.toArray(new String)) 应该如何进行构建 目前我尝试了各种方法 依然报错 传递的参数错误
下面图是我当前调用的方式 https://www.52pojie.cn/thread-1830779-1-1.html
目前用的方式 是 @正己 大佬在这篇文章的方式 但是并没有作用 直接构建字节数组试过吗,为什么非要按照反编译后的再转换一遍 从java角度看
arrayList.toArray(new String))
不会有结果,new String申请长度都为0了 无闻无问 发表于 2024-4-27 13:29
从java角度看
arrayList.toArray(new String))
不会有结果,new String申请长度都为0了
我用Java 尝试了arrayList.toArray() 和 arrayList.toArray(new String)) 之间的区别
arrayList.toArray() -> [Ljava.lang.Object;@15db9742
arrayList.toArray(new String) -> [Ljava.lang.String;@6d06d69c
感觉就是Obj数组转换成了String数组 小骚 发表于 2024-4-27 13:07
直接构建字节数组试过吗,为什么非要按照反编译后的再转换一遍
字节组数没尝试过,我试试 尝试了直接构建一个Js的数组扔进去 基本报错一致 var strArr = arrayList.toArray(Java.array('java/lang/String', []));
在这段操作时候也尝试将java/lang/String 修改为Ljava/lang/String , Ljava/lang/String 这两种方式也都失败了 我举个例子吧,调用java.util.Arrays给String[]排序的代码。
Java.perform(function(){
// 创建字符串数组
var strArr = Java.array('java.lang.String', ["Zygote", "Android", "Java"]);
// 使用Java类 java.util.Arrays
var Arrays = Java.use('java.util.Arrays');
// 打印排序前的数组
console.log("\nBefore sorting:");
console.log(`strArr: ${strArr}`);
console.log(`strArr: ${strArr}`);
console.log(`strArr: ${strArr}`);
// 调用 java.util.Arrays.sort(String[] strArr);
Arrays.sort(strArr);// 注意,sort是void,直接修改原数组
console.log("----------------------------------------------------------------");
// 打印排序后的数组
console.log("After sorting:");
//
// console.log(Arrays.toString(strArr));
//
// 用排序后的数组再生成一个新数组
var sortedArr = Java.array('java.lang.String', strArr);
console.log(`sortedArr: ${sortedArr}`);
console.log(`sortedArr: ${sortedArr}`);
console.log(`sortedArr: ${sortedArr}`);
});
输出结果:
Before sorting:
strArr: Zygote
strArr: Android
strArr: Java
----------------------------------------------------------------
After sorting:
sortedArr: Android
sortedArr: Java
sortedArr: Zygote 如果是List<String>转为String[]话,代码还可如下:
Java.perform(
function(){
// 若为“List<String> strList” 转为 String[]
// java.util.ArrayList
var JAVA_LIST = Java.use('java.util.ArrayList');
var strList = JAVA_LIST.$new();
strList.add('Zygote');
strList.add('Java');
strList.add('Android');
strList.add('52pojie');
console.log('');
console.log('********************************************************************');
// print strList
for(var i=0;i<strList.size();i++)
{
console.log(`strList[${i}]: ${strList.get(i)}`);
}
console.log('********************************************************************');
// Object[] objects = strList.toArray();
var objArr = strList.toArray();
//
var tmpStrArr = [];
for(var k=0;k<objArr.length;k++)
{
// Each Object convert To java.lang.String
var s = Java.cast(objArr, Java.use('java.lang.String'));
tmpStrArr.push(s);
}
// cast to String[]
var strArr = Java.array('java.lang.String', tmpStrArr);
console.log(strArr);
console.log(`TYpe: ${typeof(strArr)}`);
console.log(`strArr:${strArr}`);
console.log(`strArr:${strArr}`);
console.log(`strArr:${strArr}`);
console.log(`strArr:${strArr}`);
console.log('');
console.log('');
});
结果:
********************************************************************
strList: Zygote
strList: Java
strList: Android
strList: 52pojie
********************************************************************
Zygote,Java,Android,52pojie
TYpe: object
strArr:Zygote
strArr:Java
strArr:Android
strArr:52pojie SNSD99 发表于 2024-4-27 15:53
如果是List转为String[]话,代码还可如下:
Java.perform(
function(){
可以理解代码意思 但是不理解为什么 frida 16调用时候一直处于这个状态
Error: a(): argument types do not match any of:
.overload('int', 'int', 'long', 'java.lang.String', 'java.lang.Object')
页:
[1]