预期 return 值与 java.lang.Boolean 兼容
expected return value compatible with java.lang.Boolean
我正在尝试使用 Frida 在 android 应用程序中绕过 rootDetection。
我找到了 class 和检查设备是否已 root 的方法,并尝试更改此方法的 return 值,但我遇到了一个令人困惑的错误:
Error: Implementation for isDeviceRooted expected return value compatible with java.lang.Boolean
我的脚本很简单:
var hook = Java.use("app.name.someClasses.RootUtils");
hook.isDeviceRooted.overload().implementation = function() {
return false;
}
我尝试谷歌搜索,但我不明白 Boolean(false) 和 false 之间有什么区别,它只是一个包装器,认真地说我应该 return 在这里与主要方法兼容 return 值?!
- Boolean(false) 将 return 对象布尔值。它可以为 null 而不是 true/false
- false 将 return 原始类型。就是 true/false
如果你只是 return true
或 false
这是原始类型 boolean
。现代 Java 编译器会自动在 boolean
和 java.lang.Boolean
之间进行转换,但 Frida 不会。
因此您必须创建一个 java.lang.Boolean
实例并 return 它:
var hook = Java.use("app.name.someClasses.RootUtils");
hook.isDeviceRooted.overload().implementation = function() {
return Java.use("java.lang.Boolean").$new(false);
}
我正在尝试使用 Frida 在 android 应用程序中绕过 rootDetection。
我找到了 class 和检查设备是否已 root 的方法,并尝试更改此方法的 return 值,但我遇到了一个令人困惑的错误:
Error: Implementation for isDeviceRooted expected return value compatible with java.lang.Boolean
我的脚本很简单:
var hook = Java.use("app.name.someClasses.RootUtils");
hook.isDeviceRooted.overload().implementation = function() {
return false;
}
我尝试谷歌搜索,但我不明白 Boolean(false) 和 false 之间有什么区别,它只是一个包装器,认真地说我应该 return 在这里与主要方法兼容 return 值?!
- Boolean(false) 将 return 对象布尔值。它可以为 null 而不是 true/false
- false 将 return 原始类型。就是 true/false
如果你只是 return true
或 false
这是原始类型 boolean
。现代 Java 编译器会自动在 boolean
和 java.lang.Boolean
之间进行转换,但 Frida 不会。
因此您必须创建一个 java.lang.Boolean
实例并 return 它:
var hook = Java.use("app.name.someClasses.RootUtils");
hook.isDeviceRooted.overload().implementation = function() {
return Java.use("java.lang.Boolean").$new(false);
}