程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何修复错误:frida 上的 java.lang.ClassNotFoundException大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何修复错误:frida 上的 java.lang.ClassnotFoundException?

开发过程中遇到如何修复错误:frida 上的 java.lang.ClassnotFoundException的问题如何解决?下面主要结合日常开发的经验,给出你关于如何修复错误:frida 上的 java.lang.ClassnotFoundException的解决方法建议,希望对你解决如何修复错误:frida 上的 java.lang.ClassnotFoundException有所启发或帮助;

我正在尝试使用 FrIDa 绕过 AndroID 应用程序上的根检测机制,我尝试了许多不同的脚本(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: cAnnot read property 'getApplicationContext' of null 在 getApplicationContext (src/androID/lib/libjava.ts:21)

我不确定这是 FrIDa 或我的系统的问题还是...

我想如果我能够让我的主代码恰好在类加载后运行(比如使用循环来检查或使用钩子),问题将得到解决,但我不知道如何编写那种为 frIDa 编写的 Js 代码。

我在 macOS 11.5.1 上使用 python 3.9 并安装了最新版本的 frIDa 和反对

我已经在一部装有 androID 10 的手机和一部装有 androID 6 的模拟器上进行了测试

解决方法

未找到类

你怎么知道类是 app.name.RootUtils 你是否使用 Jadx 或 apktool 反编译为应用程序?调用 RootUtils.isRooted() 的方法怎么样?是否有加载 RootUtils 类的特殊代码,例如来自应用程序中包含的非标准 dex 文件?如果类是从一个特殊的 dex 文件加载的,你可以钩住这个 dex 加载机制并首先执行它,然后为 RootUtils.isRooted() 安装你的钩子。

或者假设 RootUtils.isRooted() 仅从一个其他方法调用并且不使用特殊代码来加载 RootUtils 类,您可以挂钩该方法并使用此挂钩来安装您的 {{1} } 钩子。

错误处理

在 JavaScript 中处理错误的正确方法是使用 RootUtils.isRooted() try 块,而不是 catch 函数:

setTimeout

关于你挂课的问题

,

我通过一个简单但技术含量不高的解决方案解决了这个问题。

我使用 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 毫秒。

大佬总结

以上是大佬教程为你收集整理的如何修复错误:frida 上的 java.lang.ClassNotFoundException全部内容,希望文章能够帮你解决如何修复错误:frida 上的 java.lang.ClassNotFoundException所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。