day08 8.4 Hook重载方法补充

【一】什么是重载

名字一样,但是参数不一样

【1】重载介绍

  • 在Java中,重载(Overloading)指的是在同一个类中可以定义多个方法(函数)具有相同的名称,但参数列表不同的情况。

  • 换句话说,重载允许在同一个类中使用相同的方法名执行不同的操作,提供了更多的灵活性。

【2】重载的规则如下:

  1. 方法名称必须相同。
  2. 参数列表必须不同,要么是参数的数量不同,要么是参数类型不同,或者两者都不同。
  3. 返回类型可以相同也可以不同,但不能仅仅基于返回类型来进行重载方法的区分。
  4. 重载的方法可以有不同的访问修饰符。
  5. 重载的方法可以抛出不同的异常。

【3】重载方法的执行

当程序调用一个被重载的方法时,编译器会根据传递的参数选择合适的方法执行。选择过程会按照以下规则进行:

  1. 如果能够精确匹配到参数数量和类型完全一致的方法,则选择该方法。
  2. 如果没有找到精确匹配的方法,编译器会自动进行类型转换来寻找最佳匹配的方法。类型转换的优先级为:小范围类型向大范围类型转换;自动装箱与拆箱;子类向父类类型转换。
  3. 如果有多个方法都可以匹配到,但没有一个方法是明显地更具体的,编译器将会报错。

重载的好处在于可以根据方法功能的不同来使用相同的方法名,提高代码可读性和灵活性。但过度使用重载可能会导致代码难以理解和维护,因此需要合理使用。

【二】Hook重载的方法

【1】手机端启动server服务

  • 进入shell命令窗口
adb shell
  • 切换到管理员权限
su
  • 切换到 frida-server 文件位置
cd /data/local/tmp/ ./frida-server-16.0.19-android-arm64
  • 端口转发
adb forward tcp:27042 tcp:27042 adb forward tcp:27043 tcp:27043

【2】Python Hook代码编写

import frida import sys # 连接手机设备 rdev = frida.get_remote_device() session = rdev.attach("油联合伙人") # hook的是update这个重载方法,不写overload,会有错误提示,告诉你有几个,你想hook那个,复制过去即可 scr = """ Java.perform(function () { // 包.类 var MessageDigest = Java.use("java.security.MessageDigest"); MessageDigest.update.overload('byte').implementation = function(data){ var res = this.update(data); return res; } }); """ script = session.create_script(scr) def on_message(message, data): print(message, data) script.on("message", on_message) script.load() sys.stdin.read()

【3】Python Hook代码改写

  • 构造方法可能有多个
  • hook构造方法
import frida import sys # 连接手机设备 rdev = frida.get_remote_device() session = rdev.attach("油联合伙人") scr = """ Java.perform(function () { // 包.类 项目中字符串拼接,都会用这个,hook它,很多地方会用到 StringBuilder sb =new StringBuilder() 触发构造方法,就好hook到 var StringBuilder = Java.use("java.lang.StringBuilder"); // hook构造方法,固定加入 .$init.overload('int') StringBuilder.$init.overload('int').implementation = function(num){ console.log(num); return res; } }); """ script = session.create_script(scr) def on_message(message, data): print(message, data) script.on("message", on_message) script.load() sys.stdin.read()

__EOF__

本文作者Chimengmeng
本文链接https://www.cnblogs.com/dream-ze/p/17557910.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Chimengmeng  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示