应用 JD-Eclipse 插件实现 RFT 中 .class 文件的反向编译
概述
反编译是一个将目标代码转换成源代码的过程。而目标代码是一种用语言表示的代码 , 这种语言能通过实机或虚拟机直接执行。文本所要介绍的 JD-Eclipse 是一款反编译的开源软件,它是应用于 Eclipse 开发平台的插件,它可以帮助开发人员在调试程序的过程中显示所有的 Java 源代码,方便了开发人员的开发工作。
JD-Eclipse 的安装及配置
高级语言源程序经过编译变成可执行文件,反向编译就是其逆过程。但是由于反向编译的复杂性,通常不能把可执行文件变成高级语言源代码,只能转换成汇编程序。本文介绍了如何应用 JD-Eclipse 插件实现 RFT 中 .class 文件的反向编译,这种方法简单实用,运用 JD-Eclipse 插件应用于 RFT,使 RFT 具有更多方面的应用,方便了用户对 .class 文件的操作,不需要单独应用反向编译器进行方向编译的工作。
当 C 编译器编译生成一个对象的目标代码是,该目标代码是为某一个特定的硬件平台运行而产生的,在编译过程中,编译程序通过查表将所有符号的引用转换为特定的内存编译量。目标代码只能在特定的 CPU 上运行。而 Java 编译器为了保证目标代码的可移植性,并不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由 Java 虚拟机在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。由于其相对简单的 Java 虚拟机和规范的字节码格式,由 Java 字节码反编译成源代码的过程相对于 C 语言来说要简单,所以当前反编译 Java 程序非常流行。
目前有多种对于 Java 的反编译软件,下面本文将介绍一款开源的反编译软件 JD-Eclipse。JD-Eclipse 是一个插件 Eclipse 平台。它允许您调试所有的 Java 源代码。为了能够更为详实的说明 JD-Eclipse 的应用方法,下面主要介绍了 JD-Eclipse 的安装及配置过程,使开发人员能够更为快捷便利地使用。
目前有两种方式进行安装 JD-Eclipse 插件。第一种是利用 RFT 中“安装更新软件”的选项进行安装;下面本文将主要介绍手动安装的安装方法。
1. 下载相应的安装文件:jd.ide.eclipse_X.X.X.jar;jd.ide.eclipse.win32.x86_ X.X.X.jar;jd.edi.eclipse.feature_X.X.X.jar。其中 JD-Eclipse 插件提供了 Liunx,Mac 平台的相应的 jar 文件,本文以 Windows 平台为例作介绍。
2. 将 jd.ide.eclipse_X.X.X.jar;jd.ide.eclipse.win32.x86_ X.X.X.jar 这两个 jar 文件拷到安装 RFT 的文件夹中 plugins 的路径下面。
图 1. 拷入 jar 文件到 plugins 中

3. 将 jd.edi.eclipse.feature_X.X.X.jar 文件拷到安装 RFT 的文件夹中 features 的路径下面。
图 2. 拷入 jar 文件到 features 中

4. 重新启动 RFT。
5. 打开 RFT,Windows->Preferences->General->Editors->File Assciation,将 Class File Editor 设置为 default。
图 3. 设置默认显示

对于存在原始码的类,他不会强行反编译,也就是说他还是会用 eclipse 自带的 Class File Viewer 查看 class 文件。
JD-Eclipse 的使用及相关讨论
首先本节介绍了 JD-Eclipse 的应用方法,然后通过一个具体的应用实例来介绍 JD-Eclipse 的具体使用方法。文本采用 RFT 作为 Java 的开发平台,所以 JD-Eclipse 是安装在 RFT 上的一个插件进行相关讨论的。
一、JD-Eclipse 的应用方法
首先需要将反编译的文件打成 jar 的 java 包。
例如将文件 JavaTest 打成一个包,JavaTest 文件中有许多的 .class 文件。
图 4. Java 中的 .class 文件

jar 包生成方法如下面步骤所示。
1. 导入相应的工程。
2. 选择 Flie->Export->Jar file。
图 5. 选择 Jar 文件

3. 将 .class 文件导入并选择存储地址。
图 6. 导入工程

4. 生成一个 javatest.jar 文件
图 7. 生成 Jar 文件

二、JD-Eclipse 的应用实例
生成 jar 文件后需要将 jar 文件构建到工程文件中。
图 8 是没有反编译之前的所看到的文件内容。开发人员不能看到 .class 文件中的信息,对于开发人员调试代码带来的相对复杂的问题。
图 8. 反编译前的 .class 文件显示信息

采用 JD-Eclipse 插件后,可以清楚地显示出文件内容,方便开发人员的工作,也增强了开发人员在使用 RFT 过程中的方便程度。
清单 1. 以“CapturePlayback.class”为为例显示的部分代码内容
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font; public CapturePlayback(){
super.setLayout(new BorderLayout());
EmptyBorder localEmptyBorder = new EmptyBorder(5, 5, 5, 5);
SoftBevelBorder localSoftBevelBorder = new SoftBevelBorder(1);
super.setBorder(new EmptyBorder(5, 5, 5, 5));
JPanel localJPanel1 = new JPanel();
localJPanel1.setLayout(new BoxLayout(localJPanel1, 0));
localJPanel1.add(this.formatControls);
JPanel localJPanel2 = new JPanel();
localJPanel2.setBorder(localSoftBevelBorder);
JPanel localJPanel3 = new JPanel();
localJPanel3.setBorder(new EmptyBorder(10, 0, 5, 0));
this.playB = addButton("Play", localJPanel3, false);
this.captB = addButton("Record", localJPanel3, true);
this.pausB = addButton("Pause", localJPanel3, false);
this.loadB = addButton("Load...", localJPanel3, true);
localJPanel2.add(localJPanel3);
public class Playback implements Runnable{
SourceDataLine line;
Thread thread;
public void start(){
CapturePlayback.this.errStr = null;
this.thread = new Thread(this);
this.thread.setName("Playback");
this.thread.start();
}
public void stop() {
this.thread = null;
}
private void shutDown(String paramString) {
if ((CapturePlayback.this.errStr = paramString) != null) {
System.err.println(CapturePlayback.this.errStr);
CapturePlayback.this.samplingGraph.repaint();
}
if (this.thread != null) {
this.thread = null;
CapturePlayback.this.samplingGraph.stop();
CapturePlayback.this.captB.setEnabled(true);
CapturePlayback.this.pausB.setEnabled(false);
CapturePlayback.this.playB.setText("Play");
}
}
}
三、JD-GUI 的介绍
JD-Core 也提供了独立的运行软件 JD-GUI,它的功能完全与 JD-Eclipse 插件一样,方便不能使用基于 Eclipse 平台的人员查看反编译的文件。
图 9. JD-GUI 的操作界面

将需要反编译的文件导入即可。
图 10. 导入需要反编译的文件

这款独立的运行软件提供了强大的编辑功能,方便了开发人员对于文件的编辑,处理等操作。
总结
本文向读者介绍了如何应用 JD-Eclipse 插件实现 RFT 中 .class 文件的反向编译,这种方法简单实用,运用 JD-Eclipse 插件应用于 RFT,使 RFT 具有更多方面的应用,方便了用户对 .class 文件的操作,不需要单独应用反向编译器进行方向编译的工作。相信 JD-Eclipse 能够帮助开发人员基于 RFT 的操作提供更为方便的插件应用,为开发人员调试程序提供一个较为便捷的方法。
参考资料
学习
- 参考 JD-Eclipse 手册,可以了解更多的关于 JD-Eclipse 和 JD-GUI 的内容。
- 参考 ICUJava 反编译和源代码保护,了解反编译和代码保护的相关问题。
- 参考 JAVA 反编译技术和代码安全,了解反编译技术及代码安全的相关问题描述。
- 随时关注 developerWorks 技术活动和网络广播。
- 访问 developerWorks Open source 专区获得丰富的 how-to 信息、工具和项目更新以及最受欢迎的文章和教程,帮助您用开放源码技术进行开发,并将它们与 IBM 产品结合使用。
讨论
- 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。
- 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。
- 加入 IBM 软件下载与技术交流群组,参与在线交流。
应用 JD-Eclipse 插件实现 RFT 中 .class 文件的反向编译的更多相关文章
- Eclipse插件(导出UML图,打开文件资源管理器插件,静态代码分析工具PMD,在eclipse上安装插件)
目录 能够导出UML图的Eclipse插件 打开文件资源管理器插件 Java静态代码分析工具PMD 如何在eclipse上安装插件 JProfiler性能分析工具 从更新站点安装EclEmma 能够导 ...
- Hadoop eclipse插件使用过程中出现的问题
http://download.csdn.net/detail/java2000_wl/4326323 转自http://www.ithao123.cn/content-945210.html 由于h ...
- VS2008 工程中部分文件不参与编译 从生成中排除【Worldsing笔记】
Visual Studio 2008 .VS2008.VC2008工程源文件配置.编译配置 有时编写代码时,往往存在这样的需求(或是希望有这样的功能):一个工程经过不共同的配置实现不同的版本或是功 ...
- Eclipse插件:mybatis generator的使用步骤
一.首先,安装eclipse插件 Help--Eclipser Marketplace中查找:Mybatis Generator 1.3.5安装 二.新建project New--other--查找如 ...
- Activiti BPMN 2.0 designer eclipse插件安装
官方网是这样说的: https://www.activiti.org/userguide/index.html#springSpringBoot The following installation ...
- Android 开发之开发插件使用:Eclipse 插件 SQLiteManger eclipse中查看数据内容--翻译
最近研究了一段时间Android开发后发现,google自带的ADT工具,缺失一些开发常用的东西,希望可以构建一个类似使用JAVA EE开发体系一样开发的工具包集合,包括前台开发,调试,到后台数据库的 ...
- [Eclipse插件] Eclipse中如何安装和使用GrepCode插件
Java是开源的世界,如何快速的搜索到你需要的Java源码呢?2009年7月17日,GrepCode团队发布了一个有趣的 Java源码搜索引擎-GrepCode .与现有的各种搜索引擎相比,Java源 ...
- 从Eclipse插件中读取资源
可以通过Eclipse里的OSGi的Bundle类,获取插件目录下的某个文件的输入流: 1. Bundle bundle = Platform.getBundle(Activator.PLUGIN_I ...
- Hadoop学习笔记—6.Hadoop Eclipse插件的使用
开篇:Hadoop是一个强大的并行软件开发框架,它可以让任务在分布式集群上并行处理,从而提高执行效率.但是,它也有一些缺点,如编码.调试Hadoop程序的难度较大,这样的缺点直接导致开发人员入门门槛高 ...
随机推荐
- JPanel设置图片
package com.gr.db; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class We ...
- Java算法-快速排序
快速排序也是用归并方法实现的一个“分而治之”的排序算法,它的魅力之处在于它能在每次partition(排序算法的核心所在)都能为一个数组元素确定其排序最终正确位置(一次就定位准,下次循环就不考虑这个元 ...
- 基于spring mvc的注解DEMO完整例子
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件.本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mv ...
- 【poj1009】 Edge Detection
http://poj.org/problem?id=1009 (题目链接) 不得不说,poj上的水题还是质量非常高的= =,竟然让本大爷写了一下午. 转自:http://blog.sina.com.c ...
- BZOJ3229 石子合并
Description 在一个操场上摆放着一排N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分. 试设计一个算法,计算出将N堆石 ...
- 网页设计师常用的PHOTOSHOP插件
Photoshop是网页设计师常用的一个非常重要而强大的工具,可以让网页设计师的工作高效便捷的进行,也为设计师们的天马行空提供了实际技术实现.一般我们的网页设计师设计完成后,需要将其转换制作成网页形式 ...
- Android学习笔记01-Mac下搭建Java开发环境
一 安装JDK 下载 mac 下专用的jdk1.7, 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downlo ...
- Spring学习6-Spring整合Struts2
一.Spring为什么要整合Struts2 Struts2与Spring进行整合的根本目的就是要让 Spring为Struts2的Action注入所需的资源对象,它们整合的原理则是只要导入了s ...
- Glut 回调函数小结
2014-04-08 16:25:50 void glutDisplayFunc(void (*func)(void)); 注册当前窗口的显示回调函数 参数: func:形为void func( ...
- Unable to open liblaunch_sim.dylib. Try reinstalling Xcode or the simulator
关于Xcode7 Beta报错 simulator runtime is not available. Unable to open liblaunch_sim.dylib Try reinstall ...