0x01 大致情况:
- 获取到一个修改版的Java工具, 想研究下具体的功能,学习一下, 直接反编译,发现存在自定义的 ClassLoader 具体功能都是 通过ClassLoader 去加载 bytecode 来实现的.直接反编译并不能直接查看功能代码
0x02 反编译思路
jar 包最终运行肯定加载的到 jvm 虚拟机当中,我们的目的是,从虚拟机中 dump 出所有的解密后的 Class
搜索相关成熟的实现,发现阿里的 Java 应用诊断利器Arthas
仔细看了下功能发现,有相关实现的命令 dump 但是他只支持部分的 dump
通过我们已知的关键字 dump 下,发现可以成功看到对应的类文件, 测试发现只能 dump 个别的类,而且限制了数量:
测试 dump 一个 Class 看下有没有问题 :
但是我们的目的是dump所有Class. 关键字搜索了下,发现 github issus
发现 有同样的问题:
作者也表明没有这样具体的功能:
后续查看了下作者的 github, 其他项目 发现了这个工具 https://github.com/hengyunabc/dumpclass
直接利用下,成功dump *core*.*
尝试dump *shell**
- 最终成功获取到 Java 工具的所有功能代码: