【问题标题】:Constructing a string array with Frida使用 Frida 构建字符串数组
【发布时间】: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


【解决方案1】:

我不会尝试构造一个 java.util.List 然后将其转换为数组,而是使用 Frida 函数 Java.array 并直接构造一个 Java String 数组:

var javaStringArray = Java.array('java.lang.String', [ "Test" ]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2016-01-21
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多