0%

记一次对线rt.jar

序言

独立三边静,轻生一剑知。

记录一次对线rt.jar的经历。

过程全记录

前一阵在复习CC链的时候,想着从PoC来逆向分析ysoserial师傅们的挖掘思路。

LazyMap函数的get函数很有挖掘潜力,所以我需要找哪些类调用了get方法。

已知答案是AnnotationInvocationHandler的invoke函数调用了get函数,可以执行下去。

现在我想用IDEA搜索一下,但是无奈没有找到。

发现这个类属于sun.reflect.annotation包,位于rt.jar中,主动去搜索这个类你是可以看到的。

IDEA可以反编译出来rt.jar的源码,但是不会帮你进去搜索代码细节,因为它没有源码

直接去翻$JAVA_HOME,src.zip里面是jdk源码,但是并没有sun包。。

image-20210513153049164

搜索资料,我发现sun是oracle选择闭源的几个包之一。

Oracle选择性闭源?无奈又好笑,这能忍?

如何拿到rt.jar的源码,火速学习了一波。

所以我想着先去搞到openJDK7的源码。

搜了一波,发现http://hg.openjdk.java.net/可以搞到源码,网速感人,要有耐心。。。

以我自己的7u21为例子:

image-20210513150521166

点击jdk7u-jdk,进去之后点击browse可以看内容

image-20210513150614447

也可以不废话,直接点击zip下载

然后就拿到了一个zip解压:

image-20210513150829266

然后依次进入src-share-classes,看到了sun:

image-20210513150912940

也就是说,IDEA无法帮我们搜索的内容,我们现在可以自己添加进去了。

如何关联?

来到Project Structure - SKDs,把我们的源码的classes添加进去就可以了

image-20210513151529264

这次再搜索一下,直接find in path 搜索path

就可以看到了:

image-20210513151800556

翻出了JD-GUI,比较一下。

我是直接来到$JAVA_HOME,进入jre/lib,这些东西会参与java-runtime

啪的一下很快奥!

image-20210513152337666

image-20210513152445982

不得不佩服西方老师傅门的耐心,漏洞在牛角尖上。

参考

获取openJDK源码

JDK(rt.jar)源码和IDE关联

http://hg.openjdk.java.net/