12.安卓逆向2-frida hook技术-HookJava重载方法
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:图灵Python学院
工具下载:
链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwd=zy89
提取码:zy89
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:11.安卓逆向2-frida hook技术-HookJava静态方法和实例方法
hook重载方法,下图方法名一样,入参不一样
怎么hook?首先写下方的代码,进行hook
Java.perform(function () {var Utils = Java.use('com.luoge.com.Utils');Utils.getOver.implementation = function () {var res = this.getOver();console.log('hook getOver()成功', res);return res;}
})
如下图然后会报错
![]()
.overload() .overload('int') .overload('com.luoge.com.Money')
报错信息中的这三个就是用来hook重载的
.overload()表示hook无参的getOver方法
.overload('int')表示hook有参的getOver(int i)方法
.overload('com.luoge.com.Money')表示hook有参的getOver(Money money)方法
hook无参的
Java.perform(function () {var Utils = Java.use('com.luoge.com.Utils');Utils.getOver.overload().implementation = function () {var res = this.getOver();console.log('hook getOver()成功', res);return res;}
})
hook有参getOver(int i)方法
Java.perform(function () {var Utils = Java.use('com.luoge.com.Utils');Utils.getOver.overload('int').implementation = function (i) {console.log('hook getOver(int i)入参 ', i);var res = this.getOver(i);console.log('hook getOver(int i)返回值', res);return res;}
})
hook有参getOver(Money money)
Java.perform(function () {var Utils = Java.use('com.luoge.com.Utils');Utils.getOver.overload('com.luoge.com.Money').implementation = function (i) {console.log('hook getOver(Money money)入参 ', i);var res = this.getOver(i);console.log('hook getOver(Money money)返回值', res);return res;}
})
java常用参数对应的Frida参数
一次hook所有重载方法
Java.perform(function () {var targetClass = Java.use('com.luoge.com.Utils');// 使用 overloads 函数获取所有重载方法var methods = targetClass['getOver'].overloads;console.log(methods)console.log(methods.length,'多少个重载方法')// 遍历所有的重载方法并进行钩子for (var i = 0; i < methods.length; i++) {(function(method) {method.implementation = function () {// console.log('方法被调用:', method);for (var j = 0; j < arguments.length; j++) {console.log('参数' + j + ':', arguments[j]);}// 调用原始方法var ret = method.apply(this, arguments);console.log('返回值:', ret);return ret;};})(methods[i]);}
})