美文网首页
linux系统上如何反编译.class文件

linux系统上如何反编译.class文件

作者: 李兴华的简书 | 来源:发表于2018-07-25 10:46 被阅读0次

    问题描述:

    很多时候,我们开发都是在windows环境进行的,因此,习惯了使用鼠标,习惯了很方便的浏览,但是,生产环境并不是这样的。很多时候生产环境只有冷冷的terminal界面(字符界面)。这给我们带来了很多问题,其中一个就是,有时候生产上需要验证java程序版本是否正确,我们应该怎么做呢?可以比较文件的大小,可以比较文件的MD5,但最可靠的方法,还是把.class文件反编译,查看内容是否正确。今天我要解决的就是如何在linux/Unix上反编译.class文件。

    问题解决:

     在windows环境下面经常用到的反编译工具是jad-gui,那么这个工具有没有linux版本?答案肯定是的,他在这个地方:

    https://varaneckas.com/jad/

    根据cpu类型,我们选择了。

    Jad 1.5.8e for Linux on Intel platform

    直接上传到服务器,使用

    gzip -d jad158e.linux.intel.zip

    解压会得到jad可执行文件和readme.txt文件。为了方便使用,可以把jad拷贝到PATH包含的目录下面。

    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包中的路径和反编译的结果。

    后续:

    另外还有一个工具也是挺好用的

    http://www.benf.org/other/cfr/

    相关文章

      网友评论

          本文标题:linux系统上如何反编译.class文件

          本文链接:https://www.haomeiwen.com/subject/tdnumftx.html