【发布时间】:2023-01-12 16:36:04
【问题描述】:
我正在尝试使用 Frida 调用一个函数,该函数将字符串数组作为其参数之一。
public void coolFunction(long value, String[] strArr);
在 Java 中,它被这样调用:
long importantValue = 4L;
String[] importantArr = new String[]{"TEST"};
coolFunction(importantValue, importantArr);
重载看起来像这样:.overload('long', '[Ljava.lang.String;')
我可以可能从头开始创建一个字符串数组,但我不知道如何用 Javascript 表达它。 new String[]{"TEST"} 的 Frida 等价物是什么?
因此,我尝试将 ArrayList<String> 转换为 String[],但也没有成功。
据我所知,有两种简单的方法可以将ArrayList<String> 转换为String[]:
尝试 #1:
List<String> list = new ArrayList<String>();
list.add("TEST");
String[] stringArray = list.toArray(new String[0]);
如果我尝试用 Javascript 来表达它,它看起来像这样:
var AL_class = Java.use("java.util.ArrayList");
var arrList = AL_class.$new();
arrList.add("TEST");
var stringArray = arrList.toArray(Java.use("[Ljava.lang.String;").$new(0));
这失败并显示以下错误消息:
Error: no supported overloads
尝试#2:
List<String> list = new ArrayList<String>();
list.add("TEST");
Object[] objectArray = list.toArray();
String[] stringArray = (String[]) objectArray;
Java脚本:
var AL_class = Java.use("java.util.ArrayList");
var arrList = AL_class.$new();
arrList.add("TEST");
var arrayButAsObject = arrList.toArray();
var stringArray = Java.cast(arrayButAsObject, "[Ljava.lang.String;");
这失败了,因为它假定我想使用 Javascript 的 toArray() 函数。
这个问题的解决方案可能非常简单,但我已经被困在这里很长一段时间了,似乎无法弄清楚。任何帮助,将不胜感激。
【问题讨论】:
-
调用函数时的另一个技巧是不要让 Frida 选择正确的重载,而是定义要调用的重载函数 (
targetMethod =),然后是targetMethod.call,如本例所示:stackoverflow.com/a/65969575/150978
标签: javascript java arrays frida