I debug an android application with Frida and I overload function that return java.util.List<SomeObject>
I want to remove the first element from List that the function is return.
How can I do that please?
Java.perform(function x() {
var my_class = Java.use("a.b");
my_class.c.overload().implementation = function () {
var s= this.c(); // THE FUNCTION RETURN java.util.List<SomeObject>
//HERE I WANT TO REMOVE THE FIRST ELEMENT IN S
return s;
};
});
Here is c function:
public List<SomeObject> c() {
return this.c;
}
CodePudding user response:
First you have to cast the variable s to java.util.List, then you can call methods on it or use it as argument, e.g. to create a new List.
The following code works if the List c() returns is mutable:
let s = this.c();
let list = Java.cast(s, Java.use("java.util.List"));
list.remove(0);
return list;
If the returned List is immutable you need to create a new mutable array and the delete then first element:
let s = this.c();
let list = Java.cast(s, Java.use("java.util.List"));
let newList = Java.use("java.util.ArrayList").$new(list);
newList.remove(0);
return newList;
Mutable Lists are e.g. ArrayList, LinkedList. Immutable are e.g. created by List.of(...) Arrays.asList(...), by wraping a list with Collections.unmodifiableList() or usually by stream/lambda expressions.
