-
-
[原创]关于多classloader的hook和原理探究
-
-
[原创]关于多classloader的hook和原理探究
问题提出
群里有朋友问“我枚举出那个类了,但是用java.use的时候就报错找不到,这是这个app做保护了吗”。很早的时候我用frida也遇到过同样的问题。
问题现象
当我使用enumerateClassLoaders时,在onMatch里可以找到我想找的类,但是我在外部直接Java.use时则报错找不到指定类。
原因及解决
该APP本身有多个classloader,我想Java.use的类并不在frida的默认的classFactory.loader的classloader里面,这个时候怎么办呢,一个办法就是我们把默认的classloader改为我们能找到指定类的classloader,改法如下。
这样通过枚举找到所有classloader,再挨个找到这个类,找到的时候将这个classloader改为默认的classloader就好了。那为什么这么改呢?我们就得看看源码啦。
深入研究
在firda-java的源码文件lib/class-factory.js#L143可以找到Java.use的方法原型。(这里参考了看雪的一篇关于firda源码分析的帖子,找不到链接了。瑞斯拜)
其中loader的初始化来自firda-java的源码文件/index.js#L549
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!