吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 747|回复: 9
收起左侧

[求助] frida 主动调用参数构建问题

[复制链接]
Stormrage 发表于 2024-4-27 11:15
b.a(50331649,0, i2.this,f4897a, str, arrayList.toArray(new String[0]));
请问下各位大佬 arrayList.toArray(new String[0])) 应该如何进行构建 目前我尝试了各种方法 依然报错 传递的参数错误
下面图是我当前调用的方式
image.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 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[0]))
不会有结果,new String[0]申请长度都为0了
 楼主| Stormrage 发表于 2024-4-27 13:37
无闻无问 发表于 2024-4-27 13:29
从java角度看
arrayList.toArray(new String[0]))
不会有结果,new String[0]申请长度都为0了

我用Java 尝试了  arrayList.toArray() 和 arrayList.toArray(new String[0])) 之间的区别
arrayList.toArray() -> [Ljava.lang.Object;@15db9742
arrayList.toArray(new String[0]) -> [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[]排序的代码。
[JavaScript] 纯文本查看 复制代码
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[0]: ${strArr[0]}`);
    console.log(`strArr[1]: ${strArr[1]}`);
    console.log(`strArr[2]: ${strArr[2]}`);

    // 调用 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[0]: ${sortedArr[0]}`);
    console.log(`sortedArr[1]: ${sortedArr[1]}`);
    console.log(`sortedArr[2]: ${sortedArr[2]}`);
	   
});


输出结果:
[Plain Text] 纯文本查看 复制代码
Before sorting:
strArr[0]: Zygote
strArr[1]: Android
strArr[2]: Java
----------------------------------------------------------------
After sorting:
sortedArr[0]: Android
sortedArr[1]: Java
sortedArr[2]: Zygote
SNSD99 发表于 2024-4-27 15:53
如果是List<String>转为String[]话,代码还可如下:
[JavaScript] 纯文本查看 复制代码
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[k], 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[0]:${strArr[0]}`);
	console.log(`strArr[1]:${strArr[1]}`);
	console.log(`strArr[2]:${strArr[2]}`);
	console.log(`strArr[3]:${strArr[3]}`);
	console.log('');
	console.log('');
});


结果:
[Plain Text] 纯文本查看 复制代码
********************************************************************
strList[0]: Zygote
strList[1]: Java
strList[2]: Android
strList[3]: 52pojie
********************************************************************
Zygote,Java,Android,52pojie
TYpe: object
strArr[0]:Zygote
strArr[1]:Java
strArr[2]:Android
strArr[3]:52pojie
 楼主| Stormrage 发表于 2024-4-27 19:59
SNSD99 发表于 2024-4-27 15:53
如果是List转为String[]话,代码还可如下:
[mw_shl_code=javascript,true]Java.perform(
function(){

可以理解代码意思 但是不理解为什么 frida 16调用时候一直处于这个状态
Error: a(): argument types do not match any of:
        .overload('int', 'int', 'long', 'java.lang.String', 'java.lang.Object')
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 10:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表