Frida-调用特定方法重载

问题描述 投票:0回答:1

我正在研究一个具有几种具有相同名称和参数的方法的Android程序。

我需要调用特定的方法重载。这样的Java代码

package a;
public class d
{
     public int a() {
        return 10;
    }

    public long a() {
        return 20;
    }
    public long b() {
        long ret = a();
        return ret + 1;
    }
}

我需要替换b()的实现并调用(int)a()而不是(long)a()。请帮助我修复我的frida js代码。

Java.perform(function () {
  Var Class_A_D = java.Use("a.d");
  Class_A_D.b.implementation = function(){
    var ret = this.(a); // need to call int implementation
    return ret;
 }
}
javascript java android security frida
1个回答
0
投票

d类中的代码违反了由方法名称和每种参数类型定义的方法签名原则。

因为方法类型不是签名的一部分,Java读取这些方法的方式相同:public int a(){...}公共长a(){...}

两个签名都是“ a()”

您应该将这些方法重命名为具有不同的名称(或具有不同类型的输入参数)

此处有更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html

© www.soinside.com 2019 - 2024. All rights reserved.