function 普通函数() { var cls = Java.use('com.yemao.demo.MainActivity$非重载测试类') // var cls = Java.use('com.yemao.demo.MainActivity.C0004') console.log("Java.Use.Successfully!") //定位类成功! cls['中文方法'].implementation = function(x: number, y: number) { // cls['m6'].implementation = function(x: number, y: number) { console.log("[普通函数] x => ",x,", y => ",y) // this['中文方法'] 可以获得Hook之前的函数,可以直接调用之前的函数 // 这时候,可以根据自己的需求,修改参数等!!! var ret_value = this['中文方法'](x, y); return ret_value } } function 重载函数() { var MainAcitivity = Java.use('com.yemao.demo.MainActivity') console.log("Java.Use.Successfully!") //定位类成功! MainAcitivity.fun.overload('int', 'int').implementation = function(x: number, y: number) { console.log("[重载函数] x => ",x,", y => ",y) var ret_value = this.fun(x, y); return ret_value } } function 构造函数() { var cls = Java.use('com.yemao.demo.MainActivity$非重载测试类') console.log("Java.Use.Successfully!") //定位类成功! cls.$init.implementation = function(mainAcitivity) { console.log("[构造函数] ===") var ret_value = this.$init(mainAcitivity); return ret_value } // var JavaString = Java.use('java.lang.String'); // JavaString.$init.overload('java.lang.String').implementation = function (content) { // console.log('JavaString.$init.overload(\'java.lang.String\')->' + content); // var result = this.$init(content); // return result; // }; // JavaString.$init.overload('[C').implementation = function (content) { // console.log("JavaString.$init.overload('[C')->" + content); // var result = this.$init(content); // return result; // }; // var StringFactory = Java.use('java.lang.StringFactory'); // StringFactory.newStringFromString.implementation = function (arg0: string) { // console.log("java.lang.StringFactory.newStringFromString->" + arg0); // var result = this.newStringFromString(arg0); // return result; // }; // var exampleString1 = JavaString.$new('Hello World, this is an example string in Java.'); // console.log('[+] exampleString1: ' + exampleString1); // // public String() { throw new RuntimeException("Stub!"); } // var cls = Java.use('java.lang.String') // console.log("Java.Use.Successfully!") //定位类成功! // cls.$init.overload().implementation = function() { // console.log("[构造函数] java.lang.String") // this.$init(); // // 没有返回值!!! // // var ret_value = this.$init(); // // return ret_value // } } let instanceGlobal = null function 函数主动调用() { var MainAcitivity = Java.use('com.yemao.demo.MainActivity') console.log("Java.Use.Successfully! 函数主动调用") //定位类成功! // 静态函数主动调用 MainAcitivity.staticSecret(); // Error: secret: cannot call instance method without an instance // MainAcitivity.secret(); // 动态函数主动调用 Java.choose('com.yemao.demo.MainActivity',{ onMatch: function(instance){ console.log('instance found',instance) instance.secret() // instanceGlobal = instance }, onComplete: function(){ console.log('search Complete') } }) } function rpc测试() { function CallSecretFunc(){ Java.perform(function(){ // 动态函数主动调用 Java.choose('com.yemao.demo.MainActivity',{ onMatch: function(instance){ instance.secret() }, onComplete: function(){ } }) }) } function getTotalValue(){ Java.perform(function(){ // var MainAcitivity = Java.use('com.yemao.demo.MainActivity') // 动态函数主动调用 Java.choose('com.yemao.demo.MainActivity',{ onMatch: function(instance){ // console.log('instance found',instance) // instance.secret() console.log('total value = ',instance.total.value) // console.log('secret func exec success') }, onComplete: function(){ console.log('search Complete') } }) }) } // setImmediate(getTotalValue) rpc.exports = { gettotalvalue: getTotalValue, callfunc: CallSecretFunc, CallSecretFunc: CallSecretFunc } } function main() { 普通函数() 重载函数() 构造函数() 函数主动调用() } Java.perform(main) rpc测试()