如何通过frida js

时间:2019-04-15 10:53:06

标签: java arrays frida

我在java.lang.Class.getMethod中有一个问题。

public Method getMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException 
{
    return getMethod(name, parameterTypes, true); 
}

第二个参数需要一个[java.lang.Object];类型和java这样的代码:

getMethod("say", new Class[]{String.class,int.class});
getMethod("say", new Class[]{Integer.TYPE,Integer.TYPE});

那么如何使用array或其他方式创建此js

此外,我这样创建了一个obj array

var Integerclass = Java.use("java.lang.Integer");
var objectArr = Java.array('Ljava.lang.Class;[Integerclass.TYPE,Integerclass.TYPE]);

但是我收到一个无效的参数值错误,如何解决??

  

{'type':'错误','description':'错误:无效参数值','stack':'错误:无效参数值\ n在frida / node_modules / frida-java / lib / env.js在frida / node_modules / frida-java / lib / class-factory.js:515 \ n:在toJniObjectArray(frida / node_modules / frida-java / lib / class-factory.js:2640)中的Java:2592 \ n。 js:4489 \ n在frida / node_modules / frida-java / lib / class-factory.js:743 \ n在[anon](script1.js:28)\ n输入:1','fileName':'frida /node_modules/frida-java/lib/env.js','lineNumber':515,'columnNumber':1}

2 个答案:

答案 0 :(得分:0)

使用反射的 java 代码为:

int length = 42;
int[] arr = (int[]) java.lang.reflect.Array.newInstance(int.class, length);

int.class与常量Integer.TYPE相对应的地方。

您可以将反射用作:

klazz.getMethod("avg", int[].class, int.class);

JavaScript可以使用自动换行。


我对JavaScript的猜测:

var StringClass = Java.use("java.lang.String.class");
var IntClass = Java.use("int.class");
var IntArrayClass = Java.use("int[].class");
var objectArr = Java.array([IntClass, IntArrayClass]);
var objectArr = Java.array([StringClass, IntClass]);

getMethod("say", objectArr);

答案 1 :(得分:0)

如果您想要一个'int':

Integer = Java.use("java.lang.Integer")
int = Integer.class.getField("TYPE").get(null)

希望你能做到

int数字似乎无法识别为“ java.lang.Object”,但是方法(param具有“ int”)可以自动适应它。 这是一个例子:

var iActivityManager = ActivityManagerNative.class.getMethod("getDefault", null).invoke(null, null)
var method_startUserInBackground = ActivityManagerNative.class.getMethod("startUserInBackground", [int])
var isOK = method_startUserInBackground.invoke(iActivityManager, [Integer.$new(10)])

getMethod-使用'int'; sendParam-使用“整数”