预期 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 truefalse 这是原始类型 boolean。现代 Java 编译器会自动在 booleanjava.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);
}