linux反编译java_linux系统上如何反编译.class⽂件
问题描述:
很多时候,我们开发都是在windows环境进⾏的,因此,习惯了使⽤⿏标,习惯了很⽅便的浏览,但是,⽣产环境并不是这样的。很多时候⽣产环境只有冷冷的terminal界⾯(字符界⾯)。这给我们带来了很多问题,其中⼀个就是,有时候⽣产上需要验证java程序版本是否正确,我们应该怎么做呢?可以⽐较⽂件的⼤⼩,可以⽐较⽂件的MD5,但最可靠的⽅法,还是把.class⽂件反编译,查看内容是否正确。今天我要解决的就是如何在linux/Unix上反编译.class⽂件。
问题解决:
在windows环境下⾯经常⽤到的反编译⼯具是jad-gui,那么这个⼯具有没有linux版本?答案肯定是的,他在这个地⽅:
根据cpu类型,我们选择了。
直接上传到服务器,使⽤
gzip -d jad158e.linux.intel.zip
解压会得到jad可执⾏⽂件和⽂件。为了⽅便使⽤,可以把jad拷贝到PATH包含的⽬录下⾯。
jdk怎么使用jad命令的参数如下:
有时候,我们只需要反编译⼀个⽂件,那么可以使⽤命令:
jad [class⽂件名]
反编译。
通常我们会碰到反编译jar的需求,jad不⽀持直接反编译jar包,需要分两步实现,第⼀步,jar解压缩,可以创建⼀个src⽬录,使⽤
jar -xvf [jar⽂件]
然后,使⽤通配符解压所有class⽂件。
jad -r -ff -s java com/**/*.class
那么会⽣成同名的java⽂件,并且⽬录跟package是⼀致的。
接着删除原来的class⽂件:
find . -name "*.class" -type f | xargs rm -f
其实对于多语⾔国家来说,现在class⽂件反编译还是没有完成,譬如说中⽂国家,打开java⽂件,原来的中⽂全部变成了\u开头的叫unicode escape的ascii⽂本,这时候,可以使⽤jdk⾃带的⼯具修改⼀下:
find . -name "*.java" -type f | xargs -I {} native2ascii -reverse -encoding utf8 {} {}
那么,所有的\u开头表⽰的中⽂都会变成utf8编码了。⾄此,jar反编译完成了。
当然了,使⽤shell脚本,jar,jad和native2ascii这⼏个⼯具,可以写出更⽅便的反编译脚本。
笔者就写了个⼯具,能够填⼊项⽬中⼀个类的类名,就能够显⽰这个类的路径和反编译后的源码,包括jar包中的类也可以⾃动显⽰jar包,以及在jar包中的路径和反编译的结果。
后续:
另外还有⼀个⼯具也是挺好⽤的
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论