function test(){Java.perform(function () {/* 重载方法的hookpublic static int getCalc(int i, int i2) {return i + i2;}public static int getCalc(int i, int i2, int i3) {return i + i2 + i3;}public static int getCalc(int i, int i2, int i3, int i4) {return i + i2 + i3 + i4;}} */var Utils=Java.use("com.dudu.hook.Utils");Utils.getCalc.overload('int', 'int').implementation=function (a,b) {console.log("传入参数 - 》 "+a+" "+b);return this.getCalc(a,b);}Utils.getCalc.overload('int', 'int', 'int').implementation=function (a,b,c) {console.log("传入参数 - 》 "+a+" "+b+" "+c);return this.getCalc(a,b,c);}Utils.getCalc.overload('int', 'int', 'int', 'int').implementation=function (a,b,c,d) {console.log("传入参数 - 》 "+a+" "+b+" "+c+" "+d);return this.getCalc(a,b,c,d);}})};setImmediate(function(){setTimeout(test(), 5000);});

根据提示加重载的参数
hook方法的所有重载
function test(){Java.perform(function () {/* 重载方法的hookpublic static int getCalc(int i, int i2) {return i + i2;}public static int getCalc(int i, int i2, int i3) {return i + i2 + i3;}public static int getCalc(int i, int i2, int i3, int i4) {return i + i2 + i3 + i4;}} */var Utils=Java.use("com.dudu.hook.Utils");var overloads_Arr =Utils.getCalc.overloads;//通过overloads生成重载方法数组console.log(overloads_Arr)for (var i = 0; i <overloads_Arr.length; i++) {overloads_Arr[i].implementation=function (){//传入的参数为空var dd="";for (let j = 0; j < arguments.length; j++) {dd+=arguments[j]+" ";console.log(dd);}console.log("------------------------------------");return this.getCalc.apply(this,arguments);}}})};setImmediate(function(){setTimeout(test(), 5000);});
效果如下:
注意arguments的使用,this的指向,以及apply的后面传入的参数
ps:this当实例对象的调用时则指向的就是实例对象,静态方法调用时则this指向的是类,替换成该类也可以;
