java反编译如今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 -private hello_java hello.java
得到的反编译结果(hello.java)如下:(有关javap命令的选择参数请见其使用说明,这里-c表示选择了反编译)
Compiled from hello_java.java
public synchronized class hello_java extends java.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
}
反编译微信,得到的.class和.java文件 。仔细对比了下,发现很多地方都差不多呀,难道.Class文件就这样?其实这个 我只是了解一点我知道多少说多少吧class文件是java自己内部通过程序员写的java文件编译出来的 class文件 人是看不懂的只有机器能识别java文件是人看得懂的因为java文件最终是要机器使用 所以 就要编译成机器能识别的文件其实java文件中有些是要用到底层的东西的这些在java文件中是看不到的只有在class文件中才能看见既然class文件可以看得见我们有看不懂 所以 我们就用反编译器把class文件反编译成我们看得懂的文件这样有些在java文件中不会有的代码在反编译后的class文件中就会看得到其实大部分class文件反编译后的代码和java文件的代码都是一样的区别只是少数
如何将java中的.class文件反编译 安装Java jdk后
看安装目录里有没有jad.exe , 没有要下载,一般都有的
配置Java环境变量
开始-运行-cmd-回车-进入命令行窗口:
cd+空格+class文件所在路径:
按下面的命令进行反编译:
例如:[2] jad -sjava example.class 回车
在目录里可以看到example.java源文件
[1] 反编译一个class文件:jad example.class,会生成example.jad,用文本编辑器打开就是java源代码
[2] 指定生成源代码的后缀名:jad -sjava example.class,生成example.java
[3] 改变生成的源代码的名称,可以先使用-p将反编译后的源代码输出到控制台窗口,然后使用重定向,输出到文件:jad -p example.classmyexample.java
[4] 把源代码文件输出到指定的目录:jad -dnewdir -sjava example.class,在newdir目录下生成example.java
[5] 把packages目录下的class文件全部反编译:jad -sjava packages/*.class
[6] 把packages目录以及子目录下的文件全部反编译:jad -sjava packages/**/*.class,不过你仍然会发现所有的源代码文件被放到了同一个文件中,没有按照class文件的包路径建立起路径
推荐阅读
- 显卡不稳定会怎么样,显卡不稳定会怎么样
- 鸿蒙3平板手机鸿蒙,手机鸿蒙和开源鸿蒙的区别
- 光猫电脑怎么连接路由器,光猫电脑怎么连接路由器上网
- 恋爱养成游戏推荐女攻文,恋爱养成游戏排行榜女
- 包含leavevb.net的词条
- fx2700显卡怎么样,fx770显卡
- 怎样下载mv,怎样下载mv歌曲视频到优盘
- 鸿蒙系统电话图标不见了,鸿蒙系统电话设置在哪里
- go语言冒号和冒号等于 go语言冒号和冒号等于什么