从jar包还原出java源码(项⽬⽂件)
原⽂转载⾄:blog.csdn/mxmxz/article/details/73043156
上周接到个新任务,⼀个遗留的接⼝⼯程需要改造,然⽽根据前任开发留下的⽂档看,这个⼯程没有代码,只有⽣产环境的jar包供使⽤。。边吐(咒)槽(骂)边在SVN服务器上四处翻,想到这个⼯程的源码,毕竟没源码怎么跑起来这个⼯程?不能跑起来怎么改造调试?
确认真的不到源码之后。。冷静下来开始研究这个前辈留下的坑
0. get jar包
从⽣产环境down下来jar包,打开看了⼀眼:
⿊⼈问号脸。。这是啥?为什么jar包⾥⾯还有java⽂件?还有这种操作?java源代码加密
1. 初次尝试
把jar包的内容解压出来之后,就想把所有的class⽂件删掉,只留下java⽂件,这样不就get了源码?
结果发现想的太简单了,从上⾯的截图就能看出,class⽂件在2010年的5⽉25号有更新,⽽java⽂件是2010年3⽉31号更新的,这就说明class⽂件⽐java⽂件更新,所以这些java⽂件都是过期的。。【坑啊
2. 再次尝试
如果只有⼀个class⽂件,怎么查看java代码这个很简单,平时⽤JD-GUI或类似的反编译⼯具就可以了,但印象中只能⼀个⽂件⼀个⽂件的看,我⼿⾥有⼀个jar包可怎么还原源码导进MyEclipse啊。。
去google了半天,都没有到好的答案(事后发现了,和我的做法相同)
⼀阵沮丧,然后⽆聊打开了JD-GUI,打开jar包后,随⼿点到了左上⾓的File,咦??
发现了⼀个save!⼀阵兴奋,然后点了保存试了⼀下,发现导出来的zip⽂件就是反编译后的整个源码!
3. ⼩问题
打开zip⽂件看了⼀眼,发现:
因为jar包⾥⾯有同名的class⽂件和java⽂件,导出来的反编译源码也保留了旧的java⽂件在⾥⾯(从⽂件时间可以看出)
4. 解决⼩问题
这⾥⽤了压缩软件的命令,我平时⽤的是7-ZIP,简单搜索学习了⼀下,步骤如下:
a. 将7-ZIP的⽬录配置到系统环境变量(PATH)中
b. 打开命令⾏,到jar包所在⽬录
c. 执⾏命令
[plain]
1. 7z d xxx.jar *.java -r
效果如图:
5. 重新保存源码
删除了原jar包中的java⽂件后,再次⽤JD-GUI保存反编译源码⽂件,搞定
6. 最后
欢声笑语中获得了源码后,发现想启动这个项⽬还有些⼩⿇烦,不过跟不知道怎么从jar包还原出⼯程源码相⽐,都是⼩问题了!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。