首页
社区
课程
招聘
[原创]关于多classloader的hook和原理探究
发表于: 2021-7-4 16:55 7664

[原创]关于多classloader的hook和原理探究

2021-7-4 16:55
7664

问题提出

群里有朋友问“我枚举出那个类了,但是用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


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 2
支持
分享
最新回复 (2)
雪    币: 2089
活跃值: (3933)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
还有另一种可能,就是枚举的时候没link,但是使用的时候内部依赖了某些实际上父类加载器没有的东西,导致class not found等等的异常。
当然这个类也是没有用的,app不会加载这个类。
2021-7-4 20:53
0
雪    币: 1040
活跃值: (1313)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这方法有的时候不太行,frida调用loadClass默认传一个参数,但是有些classloader只有两个参数的,就一直说找不到对应重载,很蛋疼,比如spring boot的那个URLClassLoader
2021-7-4 22:43
0
游客
登录 | 注册 方可回帖
返回
//