Stormrage 发表于 2024-4-27 11:15

frida 主动调用参数构建问题

b.a(50331649,0, i2.this,f4897a, str, arrayList.toArray(new String));
请问下各位大佬 arrayList.toArray(new String)) 应该如何进行构建 目前我尝试了各种方法 依然报错 传递的参数错误
下面图是我当前调用的方式

Stormrage 发表于 2024-4-27 11:20

https://www.52pojie.cn/thread-1830779-1-1.html
目前用的方式 是 @正己    大佬在这篇文章的方式 但是并没有作用

小骚 发表于 2024-4-27 13:07

直接构建字节数组试过吗,为什么非要按照反编译后的再转换一遍

无闻无问 发表于 2024-4-27 13:29

从java角度看
arrayList.toArray(new String))
不会有结果,new String申请长度都为0了

Stormrage 发表于 2024-4-27 13:37

无闻无问 发表于 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数组

Stormrage 发表于 2024-4-27 13:37

小骚 发表于 2024-4-27 13:07
直接构建字节数组试过吗,为什么非要按照反编译后的再转换一遍

字节组数没尝试过,我试试 尝试了直接构建一个Js的数组扔进去 基本报错一致

Stormrage 发表于 2024-4-27 13:44

    var strArr = arrayList.toArray(Java.array('java/lang/String', []));
在这段操作时候也尝试将java/lang/String 修改为Ljava/lang/String   , Ljava/lang/String 这两种方式也都失败了

SNSD99 发表于 2024-4-27 15:15

我举个例子吧,调用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

SNSD99 发表于 2024-4-27 15:53

如果是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

Stormrage 发表于 2024-4-27 19:59

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]
查看完整版本: frida 主动调用参数构建问题