学习中
需要反编译Java的class文件
我的开发工具是windows xp+Eclipse
+MyEclipse
我找到了jad反编译工具
在互联网上找到了一些很有用的安装步骤
下面记录了我的安装过程
一下载
下载 jad 工具在官方网站没有下载到在CSDN上可以下载
下载插件 netsfjadclipse_jar
二安装
安装jad工具下载后解压然后将解压后的jadexe文件复制到%JAVA_HOME%\bin目录下面(可以将jadexe放到任意位置只要记住其存放路径就好下面要用到)
安装插件Eclipse中的插件安装可以参考Eclipse使用技巧(三)Eclipse中插件的安装
我用复制的方法直接把netsfjadclipse_jar拷贝到%ECLIPSE_HOME%\plugins目录下
把使用link的方法拷贝到下面建立D:\Myplugins\netsfjadclipse_\eclipse\plugins的目录结构将jadclipse_jar放到plugins目录下面(注其中D:\Myplugins为你自己定义的一个专门放置插件的目录)再在%ECLIPSE_HOME%\links目录下面建立一个netsfjadclipse_link文件(该文件名随便取)文件里面内容为path=D:/Myplugins/netsfjadclipse_
三配置
启动Eclipse打开Window>Preferences>Java>JadClipse如果找到了JadClipse即JadClipse插件被激活了设置jad路径
在Eclipse的Windows> Perference>General>Editors>File Associations中修改*class默认关联的编辑器为JadClipse Class File Viewer
四使用jad反编译
在DOS窗口中到class所在目录直接运行 >jad DBclass将在该目录中生成DBjad文件运行 >jad sjava DBclass将在该目录中生成DBjava文件
在Eclipse 工作台使用
)把class目录加入项目(这一步许多文档都没有写到花了我很多时间)
)项目〉属性〉java buildpath〉add class folder (如 a)〉OK
)a〉import〉General>File system>Browse>OK
)双击class 文件出现可爱的java文件编译成功
五批量反编译
以下部分转载 菠萝大象的文章
现在有人会说了这样一个一个的看太麻烦了我需要一次把一个JAR包下的所有class文件反编译成java源文件这样的想法是可行的还是使用jad工具
批量反编译
因为之前我们已经将jad加入到了%JAVA_HOME%\bin中只要配置了环境变量我们就可以在命令行中方便的使用在这里大象还是以domjjar为例来说明具体的操作步骤
解压domjjar和jaxenbetajar为了方便我将JAR包解压放到F盘根目录在cmd中进入到F盘根路径下输入命令jad o r s java d src org/**/*class
我解释一下这些参数的含义
o:覆盖旧文件而且不用提示确认
r:重新加载生成包结构
s:定义输出文件的扩展名jad为默认扩展名我们反编译后当然是要java源文件了
d:输出文件的目录src表示反编译后的所有文件都放在src目录下创建Java项目
当Eclipse首次启动时进入的是资源透视图在这个透视图中可以管理项目文件夹文件和其它资源按照Eclipse的说法这些面板叫做视图一套完整的视图叫做透视图在资源透视图中你可以使用左上方的视图(导航视图)导航和创建资源
在Eclipse中做事之前如创建Java程序需创建一个Java项目创建Java项目的步骤如下
在导航视图上点击右键在弹出的上下文菜单中选择新建项目
在新建项目对话框中Eclipse提供了项目选项Java插件开发等因此你想要创建一个Java项目在对话框左边选择Java;
在对话框右边选择Java项目如果你还安装了其它Java插件开发包在这里也会一起列出来(如EJBServlet等)Eclipse默认安装的JDT仅支持标准Java应用程序因此你必须选择Java项目选项
点击下一步进入新建项目向导对话框
首先给项目命一个名字因为是一个简单的Hello world例子因此这里我输入Hello点击下一步设置构建Java项目的设置选项对于这个项目你不需要做任何修改即可
点击完成
Eclipse此时会提示你这种项目是和Java透视图关联的并询问你是否切换到Java透视图选择是
创建Java类
当你创建好Java项目后就可以开始创建Java程序了尽管不是非得这么做但这样可以将你的Java类组织到包中这是一次很好的实践通常使用域名做为包名这样可以减少名字沖突的可能性如果你没有注册域名也可以使用任何方便的唯一的hoc名我在这里使用orgeclipseguide项目名是hello因此包的全名就是orgeclipseguidehello
按照下列步骤创建Java程序
在项目上点击右键选择NewClass弹出新建Java类向导
第一个字段区域源文件夹默认是项目的文件夹保持默认值
在包字段区域输入orgeclipseguidehello;
在类名字段区域输入HelloWorld;
在Which Method Stubs Would You Like to Create?区域下选中public static void main(String[] args)新建Java类的对话框如图所示
图 使用新建Java类向导创建HelloWorld类
点击完成新建java类向导将会为程序包创建一系列目录HelloWorldjava源文件将会放在这个包名下面
自动创建的代码包括一个main( )方法你可以向里面添加任何功能如打印你的Hello world!为了使调试变得更有趣你需要添加一个循环打印的方法在Eclipse中修改自动生成的代码如下
public class HelloWorld {
public static void main(String[] args) {say(Hello world!)}public static void say(String msg) {for (int i = ; i < ; i++) {Systemoutprintln(msg)}}}
运行Java程序
现在你已经可以运行这个Java程序了在运行Java程序时需要考虑多个事情包括Java运行环境是否需要命令行参数如果不知一个类有main( )函数究竟该使用哪一个在Eclipse中正确启动一个Java程序的方法是从Eclipse菜单中选择运行à运行此时会弹出一个对话框让你配置启动选项在运行一个Java程序前你需要创建一个启动配置或从现有配置中选择一个
对于大多数简单的Java程序而言你不需要指定启动配置因此你可以使用更简单的方法启动程序首先确保编辑器中HelloWorld源代码是全部选中的然后
从Eclipse菜单中选择运行à以…运行àJava应用程序
因为你已经对Java程序做出了修改Eclipse会提示你在运行Java程序前先保存一下点击确定
任务视图切换到控制台视图显示程序输出如图所示
图 Eclipse控制台视图显示HelloWorld程序运行输出
你可能疑惑为什么没有单独的步骤将java文件编译成class文件这是因为Eclipse JDT包含了一个增量的编译器来评估你输入的Java程序代码它可以高亮显示语法错误和不完整的引用和其它Eclipse友好的特性一样如果你觉得这个功能对你没用你完全可以关闭它如果编译成功class文件会在保存源文件时同步保存
调试Java程序
在Eclipse中交互式运行代码是其最强大的特性之一使用JDT调试器你可以逐行执行你的Java程序检查程序不同位置变量的值这个过程在定位代码中的问题时非常有用
为了准备调试你需要在代码中设置一个断点先以便让调试器暂停执行允许你调试否则程序会从头执行到尾你就没有机会调试了为了设置一个断点在编辑器左边灰色边缘双击这里将say()函数位置设置为断点此时将会显示一个蓝色的小点表示一个活动的断点
在调试器下运行程序和运行它非常类似Eclipse提供了两个选项选择使用全方位服务运行à调试菜单使用一个快捷配置如果默认选项正确也可以选择运行à以…调试àJava应用程序在这里我们使用后者
确保编辑器中的HelloWorld代码被全部选中了然后从主菜单中选择运行à以…调试àJava应用程序Eclipse将会启动程序切换到调试透视图在断点暂停执行如图所示
图 调试HelloWorld:在第一个断点执行被暂停
调试透视图包括多个新的视图都是用于调试使用的首先在左上方是调试视图(不要和调试透视图混淆了)它显示了所有调用堆和当前所有线程的状态包括所有已经执行完毕的线程程序运行到断点位置时状态显示为暂停
单步调试代码
调试视图的标题栏是一个让你可以控制Java程序执行的工具栏前面几个按钮和电子设备如CD播放器的控制按钮风格非常类似允许你暂停继续和终止程序这些按钮让你可以一行一步地执行程序代码鼠标移动到每个按钮上时都会显示按钮提示信息如跟蹤单步返回等
如第二个按钮跟蹤当前执行的程序代码在编辑器中处于高亮状态调用say()函数如果跟蹤的话就会进入这个函数内部点击跟蹤后高亮的行是首先执行的行 for语句
一般情况下你只想跟蹤你自己写的类对于标准类和第三方类通常没有什么问题是不需要跟蹤的这时候可以使用过滤后跟蹤功能即Step With Filters选择WindowPreferencesJavaDebugStep过滤器然后选择列出的包和类多花点时间设置过滤器可以有效减轻调试难度当你使用普通的跟蹤调试功能时经常会遇到许多未知错误这时使用过滤跟蹤就能很好解决这一问题
评估变量和表达式
调试视图的右边是一个标签视窗包含视图在这里你可以检查和修改变量和断点选择变量标签页这个视图显示了当前范围的变量及其值在进入for循环之前这个视图仅包括say()函数的msg参数及其值单机单步或跟蹤按钮进入for循环变量视图将会显示循环标志i及其值
有时一个Java程序有许多变量但你仅对其中一个或几个感兴趣为了监视选择的变量和表达式你可以将它们添加到表达式视图中的监视列表中例如选择一个变量i(在编辑器中双击它)点击右键从弹出的右键菜单中选择监视这个变量(及其值)就会显示在表达式视图中
监视变量的一个好处是你可以检查对象和它们的值的详细信息并且可以修改它们的值返回到变量视图展开msg变量显示它的属性它是一个char数组展开msg字符串可以显示它的值例如双击H会提示你输入一个新值如J
在同一个标签视窗中的是显示视图它允许你输入任何允许的变量或包括这些变量的实例表达式选择显示视图然后输入
msgcharAt(i)
为了快速评估这个表达式你必须先选中它然后点击第二个显示视图工具按钮(显示所选文本评估结果)它在显示视图中显示结果通常最好点击第一个工具按钮(检查所选文本评估结果)因为它添加表达式到表达式视图中不管使用哪种方法当表达式中的变量发生变化时显示的值都不回自动更新但在表达式视图中你可以讲表达式转为监视表达式当你单步调试代码时就会自动更新切换到表达式视图注意检查按钮显示下一个表达式点击表达式然后从弹出的上下文菜单中选择转换成监视表达式下一个表达式图标将会变成监视图标
我们还是回到单步调试代码中你前面在调用Systemoutprintln()时留下了游标如果你想查看Systemoutprintln()的代码你可以点击跟蹤否则就点击单步执行Systemoutprintln()函数开始下一个for循环
在编辑器下方是连一个标签视窗包括控制台视图程序输出就显示在这里如果你象前面说的那样将H改为J了那这里将会显示Jello world!你也可以点击单步执行直到循环终止如果你觉得这个过程太过冗长也可以点击返回快速结束say()函数返回到main()函数或者点击继续按钮让Java程序运行到终点
小结
Eclipse最有用的特性之一就是它集成的调试器它可以交互式执行代码通过设置断点逐行执行代码检查变量和表达式的值等功能反应其强大的功能它是一款检查和修复Java程序代码问题的不可替代的工具