有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java frida调用了错误的构造函数

我试图钩住java的以下构造函数。网网址: URL(URL上下文、字符串规范、URLStreamHandler)

我的代码如下:

import argparse
import frida
import sys

jscode = """
Java.perform(function () {
    Java.use('java.net.URL').$init.overload('java.net.URL', 'java.lang.String', 'java.net.URLStreamHandler').implementation = function(arg0,arg1,arg2) {
          return this.$init(arg0,arg1,arg2);
      };
});
"""

parser = argparse.ArgumentParser()
parser.add_argument("target")
args = parser.parse_args()
process = frida.get_usb_device().attach(args.target)
script = process.create_script(jscode)
script.load()
sys.stdin.read()

这会导致应用程序(有时是服务器)崩溃。检查logcat显示:

03-25 16:09:03.347 23490 23563 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toLowerCase()' on a null object reference
03-25 16:09:03.347 23490 23563 E AndroidRuntime:        at java.net.URL.<init>(URL.java:391)
03-25 16:09:03.347 23490 23563 E AndroidRuntime:        at java.net.URL.<init>(URL.java:316)
03-25 16:09:03.347 23490 23563 E AndroidRuntime:        at java.net.URL.<init>(URL.java:339)
03-25 16:09:03.347 23490 23563 E AndroidRuntime:        at java.net.URL.<init>(Native Method)
03-25 16:09:03.347 23490 23563 E AndroidRuntime:        at java.net.URL.<init>(URL.java:498)
03-25 16:09:03.347 23490 23563 E AndroidRuntime:        at java.net.URL.<init>(URL.java:447)
03-25 16:09:03.347 23490 23563 E AndroidRuntime:        at okhttp3.HttpUrl.url(HttpUrl.kt:1)
...

这意味着我试图调用的init是错误的init函数,比如URL。java:339映射到URL(String protocol, String host, String file)构造函数。我怀疑这可能是因为arg0和arg2在此调用链中都为null

有没有办法调用特定的重载


共 (1) 个答案

  1. # 1 楼答案

    我得到了关于frida github的答复。 解决办法是:

    Java.perform(function () {
      var URL = Java.use('java.net.URL');
    
      var ctor = URL.$init.overload('java.net.URL', 'java.lang.String', 'java.net.URLStreamHandler');
      ctor.implementation = function (arg0, arg1, arg2) {
        return ctor.call(this, arg0, arg1, arg2);
      };
    });