frida:java.lang.ClassCastException: java.lang.Object[] 无法转换为 android.content.Intent[]
frida:java.lang.ClassCastException: java.lang.Object[] cannot be cast to android.content.Intent[]
问题
java.lang.ClassCastException: java.lang.Object[] 无法转换为 android.content.Intent[]
代码如下:
弗里达-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)
}
不是其他几个ways.Here就是全部code.Other代码已经去掉了
- 错误: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('[Ljava.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('[Ljava.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('[Ljava.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
感谢您的回答
从 smali 的输出来看,编译器似乎重写了 doInBackground
方法以获取对象数组,将其转换为 Intent 数组,并将其传递给名为 a
的内部方法(Lcom/xxx/xxx/processManager/g;->a).您必须使用此 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);
}
})
问题 java.lang.ClassCastException: java.lang.Object[] 无法转换为 android.content.Intent[]
代码如下: 弗里达-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)
}
不是其他几个ways.Here就是全部code.Other代码已经去掉了
- 错误: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('[Ljava.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('[Ljava.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('[Ljava.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
感谢您的回答
从 smali 的输出来看,编译器似乎重写了 doInBackground
方法以获取对象数组,将其转换为 Intent 数组,并将其传递给名为 a
的内部方法(Lcom/xxx/xxx/processManager/g;->a).您必须使用此 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);
}
})