javascript - 如何修复错误:frida 上的 java.lang.ClassNotFoundException
问题描述
我试图绕过使用 Frida 的 android 应用程序上的 root 检测机制,我尝试了很多不同的脚本(frida 代码共享)和不同的方法(如隐藏 root),但没有成功!
所以我试图找到负责检查设备是否已植根并更改其返回值的类和方法。
这是我的脚本:
setTimeout(function() { // avoid java.lang.ClassNotFoundException
Java.perform(function() {
var hook = Java.use("app.name.RootUtils");
console.log("info: hooking target class");
hook.isRooted.overload().implementation = function() {
console.log("info: entered target method");
return Java.use("java.lang.Boolean").$new(false);
}
});
},0);
如果我正常注入此代码,它将无法工作,因为看起来 isRooted 方法会在它之前被调用
如果我使用 spawn 运行应用程序并更改此方法返回值,则会失败并出现错误:
frida.core.RPCException:错误:java.lang.ClassNotFoundException:找不到类...
我也尝试过生成应用程序,然后使用反对来运行“android root disable”,但它会返回此错误:
frida.core.RPCException:TypeError:无法在 getApplicationContext (src/android/lib/libjava.ts:21) 处读取 null 的属性“getApplicationContext”
我不确定这是否是 Frida 或我的系统的问题,或者......
我想如果我能够让我的主要代码在类被加载之后运行(比如使用循环检查或使用钩子)问题就会得到解决,但我不知道如何编写那种代码js for frida。
我在 macOS 11.5.1 上使用 python 3.9 并安装了最新版本的 frida 和 objection
我已经在一部带有 android 10 的 root 手机和带有 android 6 的模拟器上进行了测试
解决方案
我能够通过一个简单但不是非常技术性的解决方案来解决这个问题。
我使用 setInteval 一遍又一遍地运行我的挂钩,直到它开始工作,(正如@Robert 提到的,我还需要将挂钩包装在 try catch 中,以防止代码在第一次尝试后停止)
这可能不适用于每个人,但由于它对我有用,我将发布最终代码,希望它在未来对其他人有所帮助:)
Java.perform(function() {
var it = setInterval(function(){
try{
var hook = Java.use("app.name.RootUtils");
console.log("info: hooking target class");
hook.isRooted.overload().implementation = function() {
console.log("info: entered target method");
clearInterval(it);
return Java.use("java.lang.Boolean").$new(false);
}
} catch(e) {
console.log("failed!");
}
},200); // runs every 200milisecods
});
PS:您可能需要更改间隔时间以匹配您的应用程序需求,它对我有用 200 毫秒。
推荐阅读
- ruby-on-rails - Ruby on Rails 应用程序的 Heroku 配置
- python - 使用 blender 和 pybullet 创建用于姿势估计的自定义数据集
- r - 依次访问的多边形之间的重叠百分比
- javascript - 如何获取所有周的开始日期和结束日期
- ios - 反应原生“构建 JavaScript 包失败”
- firebase - 如何删除现有表的默认分区到期?
- firebase - 使用 typrescript 和 if 语句的云函数
- rust - 如何使用嵌入式切片创建指向未调整大小的类型的智能指针?
- react-native - 在 Android 上的 React-Native 中正确超时 XHR 请求
- c# - C# 到 arduino 的通信