APP中Java类存在,但Objection报错找不到类(含解决方案)

admin 2025年6月30日18:05:13评论8 views字数 1784阅读5分56秒阅读模式
APP中Java类存在,但Objection报错找不到类(含解决方案)

声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!如有侵权烦请告知,我会立即删除并致歉。谢谢

文章有疑问的,可以公众号发消息问我,或者留言。我每天都会看的。

APP中Java类存在,但Objection报错找不到类(含解决方案)

前言

Objection作为基于Frida的工具,在Java层定位代码、打印堆栈很好用。但有时,Objection会报错Error: java.lang.ClassNotFoundException: Didn't find class

Objection提示找不到类,但是你用Objection的search模块搜索类名时,是能够看到的。

APP中Java类存在,但Objection报错找不到类(含解决方案)
cac68dfaaecd36b42afae2fc5fc032c9.png

查看报错信息,原因是因为需要Hook的类采用的类加载器和Objection默认使用的类加载器不一致,导致Objection找不到。

同样的问题,Frida hook 类也存在,解决方案是通用的。

解决方案

既然默认的类加载器无法找到类,那么就通过遍历类加载器,让不同的类加载器加载指定类。

参考Frida API,我们可以采用Java.enumerateClassLoaders遍历类加载器。

具体代码如下:

function load_found() {
    var loaderFound = null;
    var class_name = "类名";

    Java.enumerateClassLoaders({
        onMatch: function (loader) {
            try {
                // 尝试用这个 loader 加载目标类
                if (loader.findClass(class_name)) {
                    console.log("[+] 找到合适的 ClassLoader: " + loader);
                    loaderFound = loader;  // 找到正确的 loader 后保存
                    const classFactory = Java.ClassFactory.get(loaderFound);
                    const TargetClass = classFactory.use(class_name);
                    // console.log(TargetClass);

                }
            } catch (e) {
                // 某些 loader 可能无法 findClass,忽略即可
            }
        },
        onComplete: function () {
            if (loaderFound !== null) {
                console.log("[+] 成功匹配 ClassLoader,继续操作");
                // 接下来你就可以用这个 loader 来使用类了
            } else {
                console.log("[-] 没有找到能加载目标类的 ClassLoader");
            }
        }
    });
}

将上述代码稍作修改贴到Objection的agen.js中
路径在Python中的Libsite-packagesobjection

比如将报错位置的

const targetClass = Java.use(clazz);

替换为

let tempclass = null;
Java.enumerateClassLoaders({
onMatch: function (loader) {
  try {
    if (loader.findClass(clazz)) {
      const classFactory = Java.ClassFactory.get(loader);
      tempclass = classFactory.use(clazz);

    }
  } catch (e) {
  }
},
onComplete: function () {
}
});
const targetClass = tempclass;

修改好的agent.js我放在知识星球了,下载文件后,替换Objection中的agent.js即可。

记得备份原来的agent.js,避免出现问题导致Objection无法使用,需要重新安装。

知识星球:

APP中Java类存在,但Objection报错找不到类(含解决方案)

原文始发于微信公众号(进击的HACK):APP中Java类存在,但Objection报错找不到类(含解决方案)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月30日18:05:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   APP中Java类存在,但Objection报错找不到类(含解决方案)https://cn-sec.com/archives/4211475.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息