如何实现class文件的反编译:java-decompiler 反编译工具

java-decompiler 反编译工具

📝 主旨内容

Java Decompiler是一项开源工具,Java Decompiler工具不仅可以实现反编译.class文件,将.class文件变为可以被我们阅读的.java文件,而且还可以对jar包进行反编译,得到jar包中.class文件反编译的.java文件。

该工具有图形化界面工具:JD-GUI,同时也有IDE开发工具的插件,如:eclipse和IntelliJ IDEA,这些插件可以将Java Decompiler集成到IDE开发工具上。

我们可以直接搜索Java Decompiler,就可以找到Java Decompiler的官网首页。打开官方文章,我们会发现这个工具已经已经很久没有更新了,到现在,2024年安装一个旧版本工具,不出意外会遇到很多兼容性问题,所以在本篇文章中,主要说明下在2024年使用这个工具可能存在的一些问题。

有需要安装Java Decompiler工具的同学,可以参考下博主小鱼(鳄鱼儿)的安装过程,博主电脑环境如下:

  • MacBook Pro, M1 Pro
  • macOS Sonoma 14.1.1
  • jd-gui-osx-1.6.6.tar

官方下载:http://java-decompiler.github.io/

在打开上面这个官方网站后,我们点击下载,选择JD-GUI下面的Download选择相应的Releases版本下载即可。

如果是windows系统,直接下载jar文件。jar文件是java的可执行文件,右键点击或双击下载后的jd-gui-1.4.0.jar文件即可运行该反编译工具,运行时可以看到咖啡的图标,传统Java=咖啡。

安装遇到的疑问

安装后不能打开,提示“This program requires Java 1.8+”

image.png

解决方法1: 修改 universalJavaApplicationStub.sh, 将 -v 更改为 -V,但是博主尝试这种方法并没有效果。

image.png

如果你只安装了一个Java版本,这种方法是生效的,我们通过 /usr/libexec/java_home -F -V 指令就可以窥见原因。

如博主电脑就安装了两个Java环境,通过指令检索到两个 Java 环境,

usr/libexec/java_home -F -V
Matching Java Virtual Machines (2):17.0.3 (arm64) "Azul Systems, Inc." - "Zulu 17.34.19" /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home1.8.0_312 (arm64) "Azul Systems, Inc." - "Zulu 8.58.0.13" /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home

解决方法2: 修改 Info.plist 文件,将 1.8+ 更改为 1.8,这种方法有效。

image.png

原因是无法通过 1.8+ 进行检索,会得到如下的提示:

/usr/libexec/java_home -F -v '1.8+'
The operation couldn’t be completed. Unable to locate a Java Runtime that supports (null).
Please visit <http://www.java.com> for information on installing Java.

而通过 1.8 进行检索,则能检索到 jdk1.8。

/usr/libexec/java_home -F -v '1.8'
/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
(base) ber@Ber-MacBook-Pro ~ % /usr/libexec/java_home -F -v '1.8+'
The operation couldn’t be completed. Unable to locate a Java Runtime that supports (null).
Please visit <http://www.java.com> for information on installing Java.

以上两种方法在某些情况下都有效。如果你安装的版本不是 jdk1.8,并且安装了多个Java版本,以上方法可能都不生效,但如果你认真看了,相信你一定可以找到方法。

📎 引用

  • https://java-decompiler.github.io/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/520974.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Azure 架构师学习笔记】- Azure Private Endpoint

本文属于【Azure 架构师学习笔记】系列。 前言 公有云的其中一个特点是默认允许公网访问&#xff0c; 这就对企业环境带来风险&#xff0c;也是很多年前企业对公有云抵触的其中一个原因&#xff0c;现在这类问题已经很少&#xff0c;因为有了很多技术来确保云上的资源被安全地…

基于docker安装的Jenkins实现python执行自动化测试程序

背景 通过Jenkins实现自动化测试,在全局配置中配置好后,执行构建发生如下错误 解决办法: 在Jenkins中插件管理中下载python后,回到Jenkins容器中 查找刚下载的python所在位置 到Jenkins中全局配置中修改脚本 1.可以在环境变量中定义python所在位置 2.在一下图示中进行获取…

IM聊天交友APP源码IM带音视频Uniapp即时通讯安卓苹果APP修改二开

前端开发语言&#xff1a;VUE&#xff08; 安卓&#xff0c;IOS,WEB为一套前端代码&#xff09; 服务器端开发语言: PHPWebSocket 数据库&#xff1a;MySql mongodb 前端打包工具&#xff1a;Hbuilder 服务器搭建工具&#xff1a;宝塔 Xshell 短信接口&#xff1a; 支持…

机器学习笔记 DeepFakes和换脸技术简述

一、简述 人脸检测一直是 2000 年代初的主要研究课题。差不多二十年后,这个问题基本上得到了解决,并且人脸检测在大多数编程语言中都可以作为库使用。甚至换脸技术也不是什么新鲜事,并且已经存在了好些年了。 早在2016年左右就有基于OpenCV进行面部交换的方式了,主要是基于…

【Python数据分析系列】一文带你认识pd.DataFrame的组成(案例)

这是我的第233篇原创文章。 一、引言 DataFrame是Pandas库中的一个重要数据结构&#xff0c;它类似于电子表格或数据库表。DataFrame是一个二维的、大小可变的表格数据结构&#xff0c;其中数据以行和列的形式排列。每一列可以是不同的数据类型&#xff08;整数、浮点数、字符…

2024选哪个牌子的大路灯好用又实惠?口碑最好的五款大路灯品牌型号推荐!

近年来&#xff0c;随着科技时代的迅速发展&#xff0c;大路灯作为一种能够帮助改善光线环境的家电备受追捧&#xff0c;大家都会给自己和家里孩子备上一款大路灯&#xff0c;在读写、工作的时候开大路灯能够充分明亮的照明。然而&#xff0c;市场上存在许多不专业的产品&#…

Bytebase 签约合思,覆盖多云数据库变更发布,数据访问控制,安全治理的全生命周期,确保符合合规审计要求

在数字化快速发展时代&#xff0c;有效的规范数据库管理对企业安全运营至关重要。近日&#xff0c;数据库 DevOps 团队协同管理工具 Bytebase 签约费控领域领军企业合思&#xff0c;旨在全面优化数据库操作管理&#xff0c;收口全体员工的变更和查询操作&#xff0c;以提高整体…

【Git】解决上传代码到github不增加代码提交次数问题

问题 在我们向github远程仓库中提交代码时&#xff0c;有时候会出现提交了代码却没有显示代码的提交记录问题。这是因为你远程github的用户信息和你本地仓库用户信息不一致造成的。 解决 查看本地仓库用户信息 git config --global -l查看哪一项用户信息与你github上不同。…

如何转行成为产品经理?

转行NPDP也是很合适的一条发展路径&#xff0c;之后从事新产品开发相关工作~ 一、什么是NPDP&#xff1f; NPDP 是产品经理国际资格认证&#xff0c;美国产品开发与管理协会&#xff08;PDMA&#xff09;发起的&#xff0c;是目前国际公认的唯一的新产品开发专业认证&#xff…

[c++] c++ 中的顺序(构造,析构,初始化列表,继承)

对象构造的时候&#xff0c;对象成员变量的初始化顺序是什么样的 &#xff1f; 派生类构造的时候&#xff0c;先构造基类还是先构造派生类 &#xff1f; 构造函数中的初始化列表&#xff0c;初始化的顺序是列表的顺序吗 &#xff1f; 析构的时候&#xff0c;析构的顺序是什么…

修改Android打包apk的名字和目录

app打包生成apk后通常需要进行备份&#xff0c;但是要区分好哪个apk是什么版本的、什么时候打包的&#xff0c;以方便以后区分使用。 最开始的想法是把版本号、创建时间这些加在apk文件名上即可&#xff0c;但是公司要求apk使用一个固定的名称&#xff0c;那我怎么保存版本号信…

利用tree命令自动保存文件层级结构

tree命令的使用 为了将上图左侧的文件目录&#xff0c;生成上图右侧中的文件夹结构列表&#xff0c;保存在txt中&#xff0c;使用了如下cmd命令&#xff1a; C:\armadillo-12.8.0>tree .>list.txt以上tree命令分为3部分&#xff1a; tree 命令. 在当前目录>list.tx…