问题描述:

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

问题解决:

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

https://varaneckas.com/jad/

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

直接上传到服务器,使用

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反编译java_linux系统上如何反编译.class文件相关推荐

  1. 理解Linux和其他UNIX-Like系统上的平均负载

    理解Linux和其他UNIX-Like系统上的平均负载      Linux,Mac以及其他UNIX-like系统都能显示出"load average"信息.这些数字告诉你,你系统 ...

  2. 【疑难杂症爆破委员会】UEFI Linux、Windows双系统,丢失Windows的efi文件导致找不到启动项(恢复Windows的efi文件)

    [疑难杂症爆破委员会] UEFI Linux.Windows双系统,丢失Windows的efi文件导致找不到启动项,导致无法进入Windows系统 状况说明 状况是这样的:我本来好好的装着Linux和 ...

  3. Linux中检查本地系统上的开放端口列表的方法

    在 Linux 中很少有用于此目的的实用程序.然而,我提供了四个最重要的 Linux 命令来检查这一点. 你可以使用以下四个命令来完成这个工作.这些命令是非常出名的并被 Linux 管理员广泛使用. ...

  4. mac可以写linux的进程,macOS系统上读写Linux的ext4分区方法

    macOS系统上读写Linux的ext4分区方法 很多时候需要在macOS上操作Linux的ext4分区,然后macOS系统默认并不支持ext4等分区格式.今天给大家介绍的方法是如何在macOS上,使 ...

  5. centos7是linux内核,在CentOS 7上用源代码编译最新的Linux内核

    翻译转载自:https://linuxhint.com/compile-linux-kernel-centos7/ 关键字:centos7 kernel 编译 内核 这文章是转载自国外博客的,因为这个 ...

  6. 在linux(arm)系统上压缩TF卡系统分区,以实现制作低容量img镜像,从而进行镜像移植至其他TF卡上的方法

    试想一个情景,当你开发完一个linux系统后,想要将其TF卡制作成img镜像来移植到其他TF卡上来实现大规模部署时,你选择将写有系统的TF卡插入读卡器,插入你的win10系统的电脑上,打开Win32D ...

  7. mysql win linux性能对比,不同系统上 MySQL 的性能对比

    不同系统上 MySQL 的性能对比 发布时间:2006-07-16 16:44:23来源:红联作者:koov 这个文件中包含了不同基准测试的结果. 测试结果后)中的数字表示精确测试中执行的SQL命令的 ...

  8. 在Windows系统上对hfds中的文件进行操作

    在 linux 上我们可以通过命令对 hdfs 中的文件及文件目录进行处理,但是在 Windows 上编写代码时需要用到 hdfs 时该如何处理呢?其实 hdfs 也是可以部署在 Windows 系统 ...

  9. linux下C/C++编译时系统搜索 include 和 链接库 文件路径的指定

    C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径.自己指定的路径就不说了,这里说明一下系统自动搜索的路径. [1 ...

  10. linux vps 桌面,linode linux vps的centos系统上安装X Window System GNOME图形桌面使用vnc连接 - 乖兔博客...

    国内外都很出名的linode这家vps供应商大家都不陌生,跟大多数境外vps供应商一样,官网只提供linux的系统,并且默认都是没有桌面版的,需要进行桌面图形化的东西是没法做的.要用图形桌面,就两个途 ...

最新文章

  1. VScode的撤销操作的快捷键
  2. 016 | 漫谈区块链共识机制
  3. 祝「杭州程序媛」母亲节快乐!
  4. JAVA 继承基本类、抽象类、接口
  5. 自定义类型处理器的应用
  6. 阿里云服务器ECS按ctrl+alt+delete无法登录
  7. python直线检测_opencv+python 开操作进行直线检测
  8. java图书管理系统(MySQL)
  9. 阿里云产品分析(PPT)
  10. linux 安装Python3 并安装Python Blog Wagtail
  11. 在centos上安装pycharm
  12. 30行Python代码 刷王者荣耀金币
  13. Canva在线免费图表制作工具
  14. Matplotlib和Seaborn(离散数据的图表选择与一些使用技巧)
  15. 截至2022年12月共计451个信息安全国家标准汇总
  16. 多元线性回归的正规方程解
  17. C语言 函数返回多个值方法
  18. 自己的理解——WMD
  19. 语法错误和语义错误区别
  20. python秒懂百科视频,Python开发简单爬虫

热门文章

  1. java流程图平行四边形_流程图图形标准含义
  2. 遗传算法python实例_Python遗传算法框架使用实例(一)使用Geatpy实现句子匹配
  3. SVN汉化包安装后无效果(已解决)
  4. 安装svn和安装svn汉化语言包
  5. 福利时间(1):Scala 入门视频
  6. Python3 人脸识别 源码
  7. 轨道交通重要组成部分网络时钟系统(子母钟系统)
  8. 【仿真】Proteus8.9 下载与安装教程(超详细)
  9. 基于python的火车票订票系统的设计与实现_火车票售票系统的设计与实现
  10. VC MFC 换肤 SkinSharp