谈谈JAVA程序的反编译-Java基础-Java-编程开发

Java 代码反编译工具详解:从基础到实战 通过本文的介绍,我们详细学习了 Java 中常用的反编译工具,包括 JD-GUI、CFR、Procyon、Fernflower、Javap 和 Bytecode Viewer。每种工具都有其特点和适用场景。JD-GUI 适合快速查看.class文件,CFR 和 Procyon 适合反编译现代 Java 特性,Fernflower 适合 IntelliJ IDEA 用户,Javap 适合查看字节码结构,Bytecode Viewer 适合对比多种反编译结果或编辑字节码。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>  如今JAVA语言在全世界范围正如火如荼般的流行,它广范地应用在INTERNET的数据库、多媒体、CGI、及动态网页的制作方面。1999年在美国对JAVA程序员的需求量首次超过C !

  作者因最近分析一些JAVA程序,对JAVA的反编译进行了一番了解,下面将我所了解的情况作以下介绍,希望对JAVA爱好者有所帮助。

  JAVA是采用一种称做“字节编码”的程序结构,分为小程序(嵌入到HTML文件中)和应用程序(直接在命令状态下执行)两种类型。无论哪种结构,一旦用JAVAC命令编译后,均变成后缀为CLASS的同名可执行文件。这种文件是不可阅读的代码。

  经查阅了SUN公司的JDK(JDK1.1.3)文档资料后,我找到了一个据称是可反编译JAVA的JAVAP文件(EXE),这个文件位于//JDK//BIN//下面,经按说明使用后,感到失望,原来这个“反编译”仅可反编译出JAVA程序的数据区(定义)、若干方法和类的引用等。

  这里我用了一个简单例子来说明问题。

  JAVA的源程序hello_java.java如下:
  import java.applet.*;

  import java.awt.*;

  public class hello_java extends Applet

  public void paint(Graphics g)

  g.drawString(Hello Java!//n,20,20);

  经用反编译命令:javap -c -package -public -privatehello_javahello.java
  得到的反编译结果(hello.java)如下:(有关javap命令的选择参数请见其使用说明,这里-c表示选择了反编译)
  Compiled from hello_java.java

  public synchronized class hello_javaextendsjava.applet.Applet

  /* ACC_SUPER bit set */

  public void paint(java.awt.Graphics);

  public hello_java();

  Method void paint(java.awt.Graphics)

  0 aload_1

  1 ldc #1

  3 bipush 20

  5 bipush 20

  7 invokevirtual #6

  10 return

  Method hello_java()

  0 aload_0

  1 invokespecial #5 ()V>

  4 return
  从上述结果不难看出该反编译未能将源程序全译出来,像语句g.drawString(HelloJava!//n,20,20);就没有。随着程序量增加,未能编译的JAVA语句还会更多。所以这个反编译程序仅能起个参考作用。

  幸亏有了INTERNET,笔者通过YAHOO很快找到了一个JAVA反编译“自由软件”(SHAREWARE),http://www.inter.nl.net/users/H.P.van.Vliet/mocha.htm。这个软件叫MOCHA,据说是一位30来岁的加拿大的研究生所完成,仅是个“?”版,原因是这位叫做H.P.VAN.VLIET的小伙子患癌逝世了,十分可惜呀!

  经使用MOCHA反编译软件,感到这个软件十分好用,笔者试反编译多个JAVA程序,均得到很好的结果。

  这里给出如何使用这个软件,首先,用WINZIP等将mocha-b1.zip解开得到mocha.zip文件,mocha.zip不须再解开,这个包内包括了反编译的类文件,只需将其拷贝到JDK所在的目录下,如:
c://jdk//bin//此外,须设置路径:SETCLASSPATH=c://myclasses;c://jdk//bin//mocha.zip
  MOCHA用法:
  java mocha.Decompiler -v -o Class1.class Class2.class ..
  java 调用Java虚拟机

  mocha.Decompiler 指示要进行JAVA反编译

  -v 选择详细输出

  -o 选写入已有的.mocha 文件

  ClassX.class 指出要反编译类名

  注意,不需给出输出的JAVA文件名,因为MOCHA自动产生一个与CLASS同名但扩展名为MOCHA的JAVA源文件。

  对于上例,可用命令:
  java mocha.Decompiler -v -o hello_java.class
  得到的源文件:
  /* Decompiled by Mocha from hello_java.class */

  /* Originally compiled from hello_java.java */

  import java.applet.Applet;

  import java.awt.Graphics;

  public synchronized class hello_java extends Applet

  public void paint(Graphics g)

  g.drawString(Hello Java!//n, 20, 20);

  public hello_java()
  我们不难发现,此文件与编译前的JAVA源文件完全一样!笔者曾经用MOCHA反编译出最大为80K的源文件,均取得成功。

  在此,笔者向英年早逝的VLIET表示敬意,感谢他给我们留下这个工具软件。

Java字节码调试与反编译_java 反编译 调试 这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)才香)[外链图片转存中…(img-fo2Fe7Ey-1716458614916)][外链图片转存中…(img-pODKpNOb-1716458614917)] 阅读详情

相关推荐

掌握JAVA反编译工具:逆向工程与代码分析

反编译是一个将编译后的代码,通常是机器码或字节码,转换回原始源代码的过程。这一过程在软件工程领域具有重要的意义,因为源代码能够为开发者提供更易于理解的代码结构,从而促进代码审查、安全分析和维护工作。反编译编程逆向工程的一个分支,它涉及将二进制代码转换为高级语言代码。这通常是一个复杂的过程,因为编译过程中丢失了许多原始源代码的抽象信息,如变量名、函数名以及注释等。JD-GUI是一款广泛使用的Java反编译器,它以其直观的图形用户界面和用户友好的操作方式而备受青睐。

weixin_42360733的博客 3845

java反编译程序

Java反编译

Java编译成JavaScript

Java编译成JavaScript 将Java编译成JavaScript 将Java编译成JavaScript

Java基础--------Java反编译

一. 反编译的概念 反编译,一般指反向编译。 计算机软件反向工程(Reverse engineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(比如可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构...

詹煜彪9527 2万+

Java反编译|代码混淆|代码保护|知识产权保护|License授权

目前,市场上有许多Java反编译工具,黑客能够对这些程序进行更改,或者复用其中的程序。因此,如何保护Java程序不被反编译,是非常重要的一个问题。

tianmaxingkonger的专栏 3935

Java笔记——Java基础---Java反编译

最早的程序员都是直接用机器语言编程,但是很麻烦,需要查大量的表格来确定每个数字表示什么意思,编写出来的程序很不直观,而且容易出错,于是有了汇编语言,把机器语言中一组一组的数字用助记符(Mnemonic)表示,直接用这些助记符写出汇编程序,然后让汇编器(Assembler)去查表把助记符替换成数字,也就把汇编语言翻译成了机器语言。jad很好用,但是无奈的是很久没更新了,所以只能用一款新的工具替代他,CFR是一个不错的选择,相比jad来说,他的语法可能会稍微复杂一些,但是好在他可以work。

a25847a的博客 3023

JAVA 反编译方法

反编译;IDEA;Java

peiuuu的博客 9051

Java开发必会的反编译知识

将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的机器语言的程序的过程就是编译。

QiuMing 910

[转] 谈谈 JAVA 程序反编译

小兵注:不知为什么我测试这个不好用。我现在用的是 jad,它有各种平台的版本,主页地址为 http://www.kpdus.com/jad.html转载自:http://www.hackhome.com/2005/1-24/20460263771.shtml  如今JAVA语言在全世界范围正如火如荼般的流行,它广范地应用在INTERNET的数据库、多媒体、CGI、及动态网页的制作方面。1999年在

1068

如何保护Java程序 防止Java反编译

常用的保护技术   由于Java字节码的抽象级别较高,因此它们较容易被反编译。本节介绍了几种常用的方法,用于保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环境和弱点。   隔离Java程序   最简单的方法就是让用户不能够访问到Java Class程序,这种方法是最根本的方法,具体实现有多种方式。例如,开发

Draco 3万+

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

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

CSDN站内信: https://i.csdn.net/#/msg/chat/qyj19920704 2万+

java代码反编译非常好用的工具

java代码反编译非常好用的工具,相信大多数开发者都必备的工具, 解压安装后将CATCH里面的文件覆盖到同名的文件中即可。

java反编译(附源代码)

java反编译(附源代码) 智能判断VM,检测class文件,java学习利器! whsvc

java怎么反编译_java如何进行反编译

反编译的过程与编译刚好相反,就是将已编译好的编程语言还原到未编译的状态,也就是找出程序语言的源代码。就是将机器看得懂的语言转换成程序员可以看得懂的语言。Java语言中的反编译一般指将class文件转换成java文件。Java常用反编译工具本文主要介绍4个Java反编译工具:javap、jad和cfr以及可视化反编译工具JD-GUIJAVAPjavap是jdk自带的一个工具,可以对代码反编译,也可...

weixin_36371053的博客 1万+

Java基础-IDEA反编译

我们都知道,Java程序是我们编写的代码经过编译变成class可执行文件,反编译就是其逆向过程,就是将可执行的class文件反编译为代码的过程。 关于反编译,网上也有很多的工具,博主在此介绍一下idea反编译。 准备需要反编译class文件。博主这里随便找了一个根据输入求均值的例子。源代码如下: import java.util.Scanner; //通过获取键盘输入的数据,每输入一个数字用回...

Ara_Hu的博客 9001

7款开源Java反编译工具

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

r3t7o7的博客 13万+

Java| 编译和反编译

原文链接: http://www.yveshe.com/articles/2018/05/01/1525172129089.html 什么是编程语言? 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language)。编程语言(Programming Language)分为低级语言(Low-level Language)和高级语言(High-level La...

YvesHe的专栏 3万+
上一篇: Java打印程序设计全攻略-Java基础-Java-编程开发
下一篇: 解析Java体系结构对信息安全的支持-Java基础-Java-编程开发
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值