frida : java .lang.ClassCastException: java .lang.Object [] нельзя преобразовать в android .content.Intent [] - PullRequest
0 голосов
/ 20 апреля 2020

проблема java .lang.ClassCastException: java .lang.Object [] не может быть приведен к android .content.Intent []

код показывает, как показано ниже: frida- js :

var ProcessManagerG = Java.use('com.xxx.xxx.processManager.g')
var doInBackground = ProcessManagerG.doInBackground.overload('[Ljava.lang.Object;')
doInBackground.implementation = function (intentArr) {

    doInBackground.call(this, intentArr)

}

Не несколькими другими способами. Вот весь код. Другой код был удален.

  1. Ошибка: java .lang.ClassCastException: java .lang.Object [] не может быть приведен к android .content.Intent []
Java.perform(function () {
    Java.use('com.xxx.xxx.processManager.g').doInBackground.overload('[Ljava.lang.Object;').implementation = function (intentArr) {
        try {
            return this.doInBackground.apply(this, arguments);
        } catch (e) {
            console.log(e)
        }
    }
})
Ошибка: doInBackground (): типы аргументов не соответствуют ни одному из: .overload ('[L java .lang.Object;')
Java.perform(function () {
    Java.use('com.xxx.xxx.processManager.g').doInBackground.overload('[Ljava.lang.Object;').implementation = function (intentArr) {
        try {
            var arr = [];
            for (var i = 0, len = intentArr.length; i < len; i++) {
                // console.log(arguments[i], Object.prototype.toString.call(arguments[i]))
                send(intentArr[i]) // {'type': 'send', 'payload': ['<instance: java.lang.Object, $className: android.content.Intent>']}
                arr.push(Java.cast(intentArr[i], Java.use('android.content.Intent')))
                send(arr) // {'type': 'send', 'payload': ['<instance: android.content.Intent>']}
            }
            return this.doInBackground.apply(this, arr); // Error: doInBackground(): argument types do not match any of: .overload('[Ljava.lang.Object;')
        } catch (e) {
            console.log(e)
        }
    }
})
Ошибка: doInBackground (): типы аргументов не соответствуют ни одному из: .overload ('[L java .lang.Object;')
Java.perform(function () {
    Java.use('com.xxx.xxx.processManager.g').doInBackground.overload('[Ljava.lang.Object;').implementation = function (intentArr) {
        try {
            send(intentArr) // {'type': 'send', 'payload': ['<instance: java.lang.Object, $className: android.content.Intent>']}
            var arr = Java.array('Landroid.content.Intent;', intentArr);
            send(arr) // {'type': 'send', 'payload': ['<instance: android.content.Intent>']}
            return this.doInBackground.apply(this, arr); // Error: doInBackground(): argument types do not match any of: .overload('[Ljava.lang.Object;')
        } catch (e) {
            console.log(e)
        }
    }
})
Ошибка: doInBackground (): типы аргументов не соответствуют ни одному из: .overload ('[L java .lang.Object;')
Java.perform(function () {
    Java.use('com.xxx.xxx.processManager.g').doInBackground.overload('[Ljava.lang.Object;').implementation = function (intentArr) {
        try {
            var arr = [];
            for (var i = 0, len = intentArr.length; i < len; i++) {
                send(intentArr[i]) // {'type': 'send', 'payload': ['<instance: java.lang.Object, $className: android.content.Intent>']}
                arr.push(Java.cast(intentArr[i], Java.use('android.content.Intent')))
                send(arr) // {'type': 'send', 'payload': ['<instance: android.content.Intent>']}
            }
            return this.doInBackground(Java.array('java.lang.Object', arr));
        } catch (e) {
            console.log(e)
        }
    }
})

java:

public Intent doInBackground(Intent... intentArr) {}

smali:

.method protected synthetic doInBackground([Ljava/lang/Object;)Ljava/lang/Object;
    .registers 2

    .line 61
    check-cast p1, [Landroid/content/Intent;

    invoke-virtual {p0, p1}, Lcom/xxx/xxx/processManager/g;->a([Landroid/content/Intent;)Landroid/content/Intent;

    move-result-object p1

    return-object p1
.end method

Спасибо за ответ

1 Ответ

0 голосов
/ 21 апреля 2020

Из вывода smali кажется, что компилятор переписал метод doInBackground, чтобы взять массив Object, привести его к массиву Intent и передать его внутреннему методу a (Lcom / xxx / xxx / processManager / г; -> а). Вы должны использовать этот a метод.

Вы должны попробовать что-то вроде:

Java.perform(function () {
    Java.use('com.xxx.xxx.processManager.g').doInBackground.overload('[Ljava.lang.Object;').implementation = function (objectArray) {
        return this.a.overload('[Landroid.content.Intent;').call(this, intentArray); 
    }
})
...