functionmain(){ Java.perform( function(){ var clazz = Java.use("com.example.testfrida.demo"); //通过overload()指定所要hook的重载方法 clazz.add.overload('int', 'int').implementation = function(a, b){ //重写两个参数的add方法的加法逻辑为乘法逻辑 var result = a*b; console.log("value = " + result); return result; } //通过overload()指定所要hook的重载方法 clazz.add.overload('int', 'int', 'int').implementation = function(a, b, c){ //重写三个参数的add方法的加法逻辑为减法逻辑 var result = this.add(a,b) - c; console.log("value = " + result); return result; } /* //function中的参数个数也可以改变! clazz.add.overload('int', 'int', 'int').implementation = function(a, b, c, d){ d = 4 var result = this.add(a,b) - c - d; console.log("value = " + result); return result; } */ } ) } setImmediate(main) /*结果 js输出: 注释掉的: value = 30 value = 30 value = 23 value = 19
app log输出: onCreate: 23 onCreate: 19 */
1 2 3 4 5
var clazz = Java.use("com.example.testfrida.demo") console.log(clazz.add.overloads); /*输出 function add(int, int): int,function add(int, int, int): int */
//字符串数组 var arr = Java.array('Ljava.lang.String;',['1','2','3']) //int数组 var values = Java.array('int', [ 1003, 1005, 1007 ]); //byte数组 const values = Java.array('byte', [ 0x48, 0x65, 0x69 ]) //对象数组 var integerclass = Java.use('java.lang.Integer')//获取Java中Integer对象 var booleanclass = Java.use('java.lang.Boolean')//获取Java中Boolean对象 //构建对象数组,基本类型不是对象,需要包装成对象才行 var objarr = Java.array('Ljava.lang.Object;', ['hello', integerclass.$new(1), booleanclass.$new(true)])
//动态数组ArrayList var arraylist = Java.use('java.util.ArrayList').$new() var num = Java.use('java.lang.Integer').$new(1) arraylist.add(num); arraylist.add('hello') console.log(arraylist); arraylist.remove(num); console.log(arraylist)
取消Hook
1 2 3 4 5 6 7
var cl = java.use(类名) //对方法进行hook cl.方法名.implementation = function(){