Fridia Java.classFactory.loader:Cannot assign to ‘loader‘ because it is a read-only property.

当在使用fridia hook非默认的classloader加载的class(也就是插件化,动态化使用dalvik.system.PathClassLoader进行加载的)的时候,我们按照前辈的经验写下:

Java.enumerateClassLoaders({
        "onMatch": function(loader) {
            if (loader.toString().indexOf("main.so") >= 0 ) {
                Java.classFactory.loader = loader;
                console.log("loader = ",loader.toString());
            }
        },
        "onComplete": function() {
            console.log("success");
        }
    });

的时候,我的Pycharm(我用Pycharm来写的typeScript)提示我:Attempt to assign to const or readonly variable TS2540: Cannot assign to 'loader' because it is a read-only property.点进loader去看

        /**
         * Class loader currently being used. For the default class factory this
         * is updated by the first call to `Java.perform()`.
         */
        readonly loader: Wrapper | null;

果然是readonly的,是fridia的api升级了吗?还是因为我用的ts的原因?没有仔细研究,不过也正好发现了上面的:

        /**
         * Gets the class factory instance for a given class loader, or the
         * default factory when passing `null`.
         *
         * The default class factory used behind the scenes only interacts
         * with the application's main class loader. Other class loaders
         * can be discovered through APIs such as `Java.enumerateMethods()` and
         * `Java.enumerateClassLoaders()`, and subsequently interacted with
         * through this API.
         */
        static get(classLoader: Wrapper | null): ClassFactory;

经过一番尝试,发现了正确的使用姿势:

Java.enumerateClassLoaders({
        "onMatch": function(loader) {
            if (loader.toString().indexOf("main.so") >= 0 ) {
                console.log("loader = ",loader.toString());
                //Java.classFactory.loader = loader;
                var secondFactory =  Java.ClassFactory.get(loader)
                var  clazz =  secondFactory.use('com.xxx.TargetClass');
                //这里就可以对clazz正常使用了
                clazz.xxx.implementation = function(){
                    ``````
                }
            }
        },
        "onComplete": function() {
            console.log("onComplete");
        }
    });

随便水水.:😆

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值