序言
独立三边静,轻生一剑知。
记录一次对线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包。。
搜索资料,我发现sun是oracle选择闭源的几个包之一。
Oracle选择性闭源?无奈又好笑,这能忍?
如何拿到rt.jar的源码,火速学习了一波。
所以我想着先去搞到openJDK7的源码。
搜了一波,发现http://hg.openjdk.java.net/可以搞到源码,网速感人,要有耐心。。。
以我自己的7u21为例子:
点击jdk7u-jdk,进去之后点击browse可以看内容
也可以不废话,直接点击zip下载
然后就拿到了一个zip解压:
然后依次进入src-share-classes,看到了sun:
也就是说,IDEA无法帮我们搜索的内容,我们现在可以自己添加进去了。
如何关联?
来到Project Structure - SKDs,把我们的源码的classes添加进去就可以了
这次再搜索一下,直接find in path 搜索path
就可以看到了:
翻出了JD-GUI,比较一下。
我是直接来到$JAVA_HOME,进入jre/lib,这些东西会参与java-runtime
啪的一下很快奥!
不得不佩服西方老师傅门的耐心,漏洞在牛角尖上。