Фрида называет неправильный конструктор - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь подключить следующий конструктор java. net .URL: URL (контекст URL, строка String spe c, обработчик 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()

Это приводит к тому, что приложение (а иногда и frida-сервер) генерирует sh. Проверка 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)
...

Это означает, что инициал, который я пытался вызвать, является неправильной функцией инициализации, так как URL. java: 339 сопоставляется с конструктором URL(String protocol, String host, String file). Я подозреваю, что это может быть потому, что и arg0, и arg2 являются нулевыми в этой цепочке вызовов.

Есть ли способ вызвать определенную c перегрузку?

1 Ответ

1 голос
/ 27 марта 2020

Я получил ответ на Фриде Гитхуб . Решение:

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);
  };
});
...