利用Frida得到类加载器里面加载的类

function ClassOfClassLoader(classloaderobj) {
    Java.perform(function() {
        try {
            var BaseDexClassLoaderClass = Java.use("dalvik.system.BaseDexClassLoader");
            var DexPathListClass = Java.use("dalvik.system.DexPathList");
            var ElementClass = Java.use("dalvik.system.DexPathList$Element");
            var DexFileClass = Java.use("dalvik.system.DexFile");
            // 将 classloaderobj 转换为 BaseDexClassLoader
            var basedexclassloaderobj = Java.cast(classloaderobj, BaseDexClassLoaderClass);
            // 获取 pathList
            var tmpobj = basedexclassloaderobj.pathList.value;
            var pathlistobj = Java.cast(tmpobj, DexPathListClass);
            // 获取 dexElements
            var dexelementsobj = pathlistobj.dexElements.value;

            // 遍历 dexElements 数组
            for (var i = 0; i < dexelementsobj.length; i++) {
                var obj = dexelementsobj[i];
                var elementobj = Java.cast(obj, ElementClass);
                var tmp = elementobj.dexFile.value;
                var dexfileobj = Java.cast(tmp, DexFileClass);
                
                // 枚举 DexFile 中的类名
                var enumeratorClassNames = dexfileobj.entries();
                while (enumeratorClassNames.hasMoreElements()) {
                    var classname = enumeratorClassNames.nextElement().toString();
                    console.log("start loadclass->" + classname);
                }
            }
        } catch (e) {
            console.log(e);
        }
    });
}


function hook_classloader(){
    Java.perform(function () {
        // 获取 Java 虚拟机中的所有类加载器,并将它们作为数组返回。
        var classloaders = Java.enumerateClassLoadersSync();
        var i = 0;
        for (i;i<classloaders.length;i++){
            console.log("classloader:",classloaders[i])
            if(classloaders[i].toString().indexOf("DexClassLoader")!=-1){
                ClassOfClassLoader(classloaders[i]);
            }
        }
    });
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值