预期返回值与 java.lang.Boolean 兼容

Mah*_*hdi 5 java android frida

我正在尝试使用 Frida 绕过 Android 应用程序中的 rootDetection。

我找到了检查设备是否已root的类和方法,并尝试更改此方法的返回值,但我收到了一个令人困惑的错误:

错误: isDeviceRooted 的实现预期返回值与 java.lang.Boolean 兼容

我的脚本很简单:

var hook = Java.use("app.name.someClasses.RootUtils");
hook.isDeviceRooted.overload().implementation = function() {
   return false;
}
Run Code Online (Sandbox Code Playgroud)

我尝试谷歌搜索,但我不明白 Boolean(false) 和 false 之间有什么区别,它只是一个包装器,说真的,我应该在这里返回什么才能与 main 方法返回值兼容?

Rob*_*ert 5

如果你只是返回true或者false这是原始类型boolean。现代 Java 编译器会自动在boolean和 之间进行转换java.lang.Boolean,但 Frida 不会。

因此,您必须创建一个java.lang.Boolean实例并返回它:

var hook = Java.use("app.name.someClasses.RootUtils");
hook.isDeviceRooted.overload().implementation = function() {
   return Java.use("java.lang.Boolean").$new(false);
}
Run Code Online (Sandbox Code Playgroud)