Java反编译工具,你知道几个?

Java反编译器推荐:5款顶级工具助力Java代码逆向分析 Java反编译和编译是软件开发者、安全研究人员和逆向工程师在分析和理解Java代码时常常遇到的任务。本文将为您介绍五款最佳的Java反编译器,这些工具能够帮助您还原被编译为字节码的Java程序,并提供源代码级别的分析和调试。这些Java反编译器是在逆向工程、代码分析和调试过程中不可或缺的工具。无论是初学者还是经验丰富的开发者,都可以从这些工具中受益。选择适合您需求的反编译器,并开始探索Java代码编译器,并开始探索Java代码的奥秘吧!Java反编译器推荐:5款顶级工具助力Java代码逆向分析。 阅读详情

编译和反编译
编程语言分成高级语言和低级语言。低级语言如机器语言、汇编语言。这类语言直接用计算机指令编写命令,不需要编译。这些语言机器能看到懂,但是程序员读起来很费劲。而我们平时经常用的语言C、Java、Python属于高级语言,这些语言程序员能看的懂。而机器是看不懂的。

简单的总结为:高级语言就是程序员认识的语言,而低级语言是机器认识的语言。而把高级语言转成低级语言这个过程就是编译,而反编译就是把低级语言转成高级语言。
有了反编译,我们就可以看懂Java编译器生成的字节码,比如Synchronized的实现原理(监听器monitor)、枚举、语法糖、泛型,这些都需要用到反编译工具。

javap
javap是jdk自带的反编译命令,可以对代码进行反编译,但是反编译的并不是java文件。

使用格式

javap
常用: javap -c 类名

-help --help -? 输出此用法消息
-version 版本信息
-v -verbose 输出附加信息
-l 输出行号和本地变量表
-public 仅显示公共类和成员
-protected 显示受保护的/公共类和成员
-package 显示程序包/受保护的/公共类和成员 (默认)
-p -private 显示所有类和成员
-c 对代码进行反汇编
-s 输出内部类型签名
-sysinfo 显示正在处理的类的系统信息 (路径, 大小, 日期, MD5 散列)
-constants 显示最终常量
-classpath 指定查找用户类文件的位置
-cp 指定查找用户类文件的位置
-bootclasspath 覆盖引导类文件的位置
下面写一段synchronized代码:

public class SynchronizedTest {

private int count = 0;

public void addOne() {
synchronized (SynchronizedTest.class) {
count++;
}
}
}
执行编译和反编译命令

javac SynchronizedTest .java
javap -c SynchronizedTest.class
直接用记事本打开SynchronizedTest.class文件是一堆乱码文件,用sublime打开是一串数字

cafe babe 0000 0034 0017 0a00 0400 1209
0003 0013 0700 1407 0015 0100 0563 6f75
6e74 0100 0149 0100 063c 696e 6974 3e01
0003 2829 5601 0004 436f 6465 0100 0f4c
696e 654e 756d 6265 7254 6162 6c65 0100
0661 6464 4f6e 6501 000d 5374 6163 6b4d
6170 5461 626c 6507 0014 0700 1507 0016
反编译后的代码:

public class com.SynchronizedTest {
public com.SynchronizedTest();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object.""😦)V
4: aload_0
5: iconst_0
6: putfield #2 // Field count:I
9: return

public void addOne();
Code:
0: ldc #3 // class com/yyw/oil/web/admin/controller/purchase/SynchronizedTest
2: dup
3: astore_1
4: monitorenter
5: aload_0
6: dup
7: getfield #2 // Field count:I
10: iconst_1
11: iadd
12: putfield #2 // Field count:I
15: aload_1
16: monitorexit
17: goto 25
20: astore_2
21: aload_1
22: monitorexit
23: aload_2
24: athrow
25: return
Exception table:
from to target type
5 17 20 any
20 23 20 any
}

javap并没有将字节码反编译成成java文件,而是生成一种另一种能看的懂得字节码。可以看出被synchronized修饰的代码包含 monitorenter 和 monitorexit。synchronized 底层依赖着两个指令来实现同步, 这里看起来比较晦涩难懂。对于新手小白想更轻松的学好Java提升,Java架构,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源,扩列下我尉(同英):CGMX9880 【教程/工具/方法/解疑】

CFR
在官网上下载jar,执行如下命令:

java -jar cfr-0.151.jar SynchronizedTest.class
得到反编译java文件:

public class SynchronizedTest {
private int count = 0;

/*
 * WARNING - Removed try catching itself - possible behaviour change.
 */
public void addOne() {
    Class<SynchronizedTest> clazz = SynchronizedTest.class;
    synchronized (SynchronizedTest.class) {
        ++this.count;
        // ** MonitorExit[var1_1] (shouldn't be in output)
        return;
    }
}

}

CFR还带有一些参数:

参数 注释
–decodeenumswitch (boolean) 去除switch对枚举支持的语法糖
–decodelambdas (boolean) 去除lambda表达式的语法糖
–decodestringswitch (boolean) 去除switch string支持的语法糖
其余参数可使用如下命令查看:

java -jar cfr-0.151.jar --help
idea
使用idea生成class文件,用idea打开class文件即可。idea是绝大多数Java程序员使用的编辑器,使用idea打开文件比较方便、快捷。

常用的java反编译工具介绍 Java反编译工具是软件开发和逆向工程领域的重要工具,它们可以帮助开发者理解、分析和修改编译后的Java字节码文件。不同的工具有不同的特点和优势,选择合适的工具取决于具体的需求和偏好。然而,使用这些工具时必须谨慎,并遵守相关的法律法规。 阅读详情

相关推荐

java项目反编译工具记录,共计6个工具

java项目反编译工具记录,共计6个工具

橙-极纪元-JJYCheng 1801

【Java工具篇】Java反编译工具Bytecode Viewer

反编译(Decompilation)是指将已编译的程序代码(通常是机器代码或字节码)转换回高级程序设计语言的过程。在软件开发中,程序员通常使用高级编程语言编写源代码,然后通过编译器将其转换为机器代码或字节码,以便计算机能够执行。反编译的过程则是将这些机器代码或字节码还原回高级编程语言的过程。反编译可以帮助理解已编译程序的结构和逻辑,但也可能涉及到法律和伦理问题,因为它可以用于逆向工程和潜在的盗版行为。因此,许多软件的许可协议禁止反编译。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 2万+

深入Java Class反编译技术:工具与实践

本文还有配套的精品资源,点击获取 简介:在Java开发中,反编译 .class 文件是获取源代码、进行逆向工程和安全分析的重要技能。本文详细介绍了Java Class文件结构、反编译的必要性、几种流行的反编译工具如JAD、FernFlower和Procyon,以及如何使用提供的工具进行反编译操作。同时指出了反编译的注意事项,包括结果的准确性、版权问题和理解复杂...

weixin_36212459的博客 3613

Java 中,有什么工具可以进行代码反编译

a.专注于 Java 8、Java 11 和 Java 17 的反编译,支持许多现代 Java 特性。使用 IntelliJ IDEA 的开发者,查看 .class 文件时会自动反编译。a.支持现代 Java 版本(包括 Java 8 和 Java 11)的语法。b.可以直接打开 .jar 或 .class 文件,查看反编译后的代码。c.提供一个库,支持将反编译功能集成到自己的工具中。b.反编译结果质量高,能处理现代 Java 特性。c.命令行工具,适合集成到自动化工具链中。a.一个轻量级的图形化工具。

不负年华 6336

探索Java反编译工具及其应用

Java平台提供了一个运行时环境,即Java虚拟机(JVM),它可以执行编译后的Java程序(即.class文件)。JVM是Java语言跨平台特性的核心,它通过类加载器、运行时数据区、执行引擎以及本地接口等组件来实现Java字节码的加载、验证、执行和优化。反编译是将已编译的程序代码转换回源代码的过程。在Java中,反编译通常用于调试、学习和逆向工程。通过反编译,开发者可以查看.class文件中的程序逻辑,了解其工作机制,或者恢复丢失的源代码。

weixin_30600615的博客 1460

Java字节码反编译工具实战指南

本文还有配套的精品资源,点击获取 简介:Java反编译工具能够将编译后的字节码转换回接近原始的Java源代码,对于软件开发、逆向工程、调试和学习Java类库等方面具有重要价值。文章将深入探讨Java反编译工具的原理和应用,重点介绍jd-gui这款流行的开源工具,以及其使用方法和常见问题。同时,文章还将提及其他一些反编译工具,并分析反编译在多个领域中的实践应用。 1...

weixin_42601702的博客 2041

2020年支持java8的Java反编译工具汇总

luyten是一款操作简单、功能实用的java反编译工具,软件支持*.JAR、*.zip、*.class等类型文件的反编译操作,还原度非常高,支持更多功能设置,如显式导入、类型、合成组件等等,用户可根据不同的需求选择合适的显示项目,结果更明了。luyten是个人用过的最好用的java反编译工具。哪怕使用jd-gui反编译时会出现“// INTERNAL ERROR //” 错误,无法反编译,此工具...

yannqi的专栏 23万+

Java反编译工具及混淆代码解析指南

Java反编译是指将Java编译后的字节码(.class文件)还原为可读的Java源代码的过程。这一技术在软件开发、逆向工程、安全测试等领域具有重要的作用。反编译不是简单的代码转换,它涉及到对Java字节码指令的理解和反向解析,以便最大程度地恢复源代码的结构和逻辑。JAD是一个历史悠久的Java反编译器,它能够将.class文件反编译成较为易读的Java源代码。JAD以其相对简单的反编译过程和不错的效果受到很多开发者的青睐。与其他工具相比,JAD在处理旧版本Java字节码时有着更好的表现。

weixin_42181686的博客 1477

Java 中, 代码反编译工具盘点

老铁,我有个长期项目,想接私活的兄弟可以看看我GitHub!

2501_91133319的博客 3156

Java反编译工具:从字节码到源码的桥梁

本文还有配套的精品资源,点击获取 简介:Java反编译工具是软件开发中不可缺少的一部分,特别是用于将Java字节码文件转换回可读的Java源代码。这些工具在学习和调试过程中非常重要,尤其是在缺少原始源代码的情况下。本文将探讨Java反编译工具的原理,以及如何使用它们来恢复丢失的代码功能,同时指出了一些反编译工具还支持代码编辑和重构的特点。文中还提供了关于DJ Decompi...

weixin_35972981的博客 1296

Java反编译工具的实用指南

本文还有配套的精品资源,点击获取 简介:Java反编译工具对开发人员至关重要,使他们能够查看和理解无法直接获取源代码的Java类文件。这类工具可用于逆向工程、研究闭源库,或分析现有的jar文件。文章详细介绍了Java字节码概念、反编译过程,列举了常用的Java反编译工具如JD-GUI、JAD、FernFlower、Procyon及IntelliJ IDEA插件,并探讨了它们...

weixin_28487725的博客 814

Java反编译工具

javap并没有将字节码反编译成成java文件,而是生成一种另一种能看的懂得字节码。-package 显示程序包/受保护的/公共类和成员 (默认)javap是jdk自带的反编译命令,可以对代码进行反编译,但是反编译的并不是java文件。-protected 显示受保护的/公共类和成员。-p -private 显示所有类和成员。常用: javap -c 类名。执行编译和反编译命令。

2401_86400079的博客 1782

掌握Java反编译工具:从字节码到源代码的转换

本文还有配套的精品资源,点击获取 简介:Java反编译工具对于Java开发人员至关重要,能够将编译后的 .class 文件转换回可读的Java源代码。这些工具对于理解库功能、学习API实现或在缺乏源代码时进行调试非常有用。文章将介绍Java反编译的概念,并详述 jd-gui.exe 等主流反编译器的使用和特点。同时,还会探讨版权问题和反编译的局限...

weixin_32099703的博客 2804

Java反编译工具汇总

2020年支持java8的Java反编译工具汇总 大多商业软件,会对程序进行加密、加壳等安全措施以防范软件被破解,从而使得反编译越来越难。反编译是一个对目标可执行程序进行逆向分析,从而得到源代码的过程。尤其是像Java这样的运行在虚拟机上的编程语言,更容易进行反编译得到源代码。 我们知道,在代码支撑方面,JDK 1.7引入了字符串Switch、泛型接口改进等新功能,1.8增加了lambda表达式、方法传递、多重注解等新特性,这使得反编译工具的编写难度加大。今天我们盘点一下目前仍然可用的、相对功能很强大的Ja

yyyggyy的博客 6700

全面Java反编译工具包

简介:Java反编译过程涉及将字节码还原为可读源代码,对于理解和恢复源代码非常关键。本压缩包提供了多种反编译工具和资源,包括但不限于JD-GUI、Procyon和FernFlower等。用户将获得一个全面的解决方案,包括工具授权信息、使用说明、第三方库列表、功能描述文件、插件等,以确保合法、高效地完成反编译任务。

weixin_31486261的博客 817

EFR32BG22 Thunderboard开发板 使用SPI 读取加速度计

Simplicity Studio v5 创建Silicon Labs蓝牙SoC EFR32BG22 Thunderboard模块的加速度计工程,模块上有一个ICM-20648 6轴运动跟踪设备,集成3轴加速度计和3轴陀螺仪功能,使用SPI接口跟EFR32BG22芯片连接。 我尽量以图片的形式展示(少打字): 将EFR32BG22的Thunderboard模块通过USB线插入到电脑,打开Simplicity Studio v5软件。 下面看重点: 点击搜索到的IO Stream: USART,点击Ins

qq_25727979的博客 1494

7款开源Java反编译工具

今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程。尤其是像.NET、Java这样的运行在虚拟机上的编程语言,更容易进行反编译得到源代码。当然,也有一些商业软件,对其程序进行了混淆加密,这样我们就很难用工具反编译了。 1、Java反编译插件 —— Jadclipse JadCl

r3t7o7的博客 13万+

华为星闪SLE实战:手把手教你用HarmonyOS开发智能家居控制应用(附完整代码)

本文详细介绍了如何利用华为星闪SLE技术,结合HarmonyOS开发智能家居控制应用。通过对比传统无线技术,阐述了星闪SLE在低时延、高可靠性和高并发方面的优势,并提供了从环境搭建、设备发现、连接管理到核心控制代码的完整实战教程,帮助开发者快速上手这一无线短距通信技术。

bert9linguist的博客 506

java反编译工具_Java 反编译指南

1. 前言在正式解读《Effective Java》之前,我们需要先了解 Java 反编译,因为反编译是我们学习和研究问题的重要手段之一。结合反编译才能更好地理解《Effective Java》一书中给出的一些建议的根本原因。贯穿整个专栏的大多数章节会涉及到 Java 反编译,因此能够灵活掌握反汇编对我们专栏后续的学习有极大的帮助。本文将从反编译的工具,反编译举例等角度来讲解。2. 是什么虽然本节...

weixin_39972264的博客 322

保姆级教程如何进行本地局域网布署openclaw小龙虾

全网唯一一篇一步步实战教程,图文并茂方式的方式教你如何本地部署安装小龙虾openclaw

zzw17wei的专栏 1467

Ubuntu零基础入门到精通【3.10讲】:旧版本 Ubuntu 升级与迁移路线:从 20.04 到 24.04 的完整实战指南

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

**My Coding Family** 1247
上一篇: 11个Java 开源 socket框架,来了解下吧
下一篇: java常见的三种定时任务调度框架,写得太棒了
python88889
博客等级 码龄5年 15粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值