快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

反编译java对比代码 反编译语言

谈谈JAVA的反编译

作者因最近分析一些JAVA程序 对JAVA的反编译进行了一番了解 下面将我所了解的情况作以下介绍 希望对JAVA爱好者有所帮助 JAVA是采用一种称做 字节编码 的程序结构 分为小程序(嵌入到HTML文件中)和应用程序(直接在命令状态下执行)两种类型 无论哪种结构 一旦用JAVAC 命令编译后 均变成后缀为CLASS的同名可执行文件 这种文件是不可阅读的代码 经查阅了SUN公司的JDK(JDK )文档资料后 我找到了一个据称是可反编译JAVA的JAVAP文件(EXE) 这个文件位于JDKBIN 下面 经按说明使用后 感到失望 原来这个 反编译 仅可反编译出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 );}} 经用反编译命令 javap c package public private hello_java hello java 得到的反编译结果(hello java)如下 (有关javap命令的选择参数请见其使用说明 这里 c表示选择了反编译)Compiled from hello_java javapublic 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) aload_ ldc # bipush bipush invokevirtual # returnMethod hello_java() aload_ invokespecial # ()V return}从上述结果不难看出该反编译未能将源程序全译出来 像语句g drawString( Hello Java!n ); 就没有 随着程序量增加 未能编译的JAVA语句还会更多 所以这个反编译程序仅能起个参考作用 幸亏有了INTERNET 笔者通过YAHOO很快找到了一个JAVA反编译 自由软件 (SHAREWARE) 这个软件叫MOCHA 据说是一位 来岁的加拿大的研究生所完成 仅是个 ? 版 原因是这位叫做H P VAN VLIET的小伙子患癌逝世了 十分可惜呀!经使用MOCHA反编译软件 感到这个软件十分好用 笔者试反编译多个JAVA程序 均得到很好的结果 这里给出如何使用这个软件 首先 用WINZIP等将 mocha b zip 解开得到 mocha zip 文件 mocha zip 不须再解开 这个包内包括了反编译的类文件 只需将其拷贝到JDK所在的目录下 如 c:jdkbin 此外 须设置路径 SET CLASSPATH=c:myclasses;c:jdkbinmocha zipMOCHA用法 java mocha Depiler [ v] [ o] Class class Class class java 调用Java虚拟机 mocha Depiler 指示要进行JAVA反编译 v 选择详细输出 o 选写入已有的 mocha 文件 ClassX class 指出要反编译类名注意 不需给出输出的JAVA文件名 因为MOCHA自动产生一个与CLASS同名但扩展名为MOCHA的JAVA源文件 对于上例 可用命令 java mocha Depiler [ v] [ o] hello_java class得到的源文件 /* Depiled by Mocha from hello_java class *//* Originally piled 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 );}public hello_java(){}}我们不难发现 此文件与编译前的JAVA源文件完全一样!笔者曾经用MOCHA反编译出最大为 K的源文件 均取得成功 在此 笔者向英年早逝的VLIET表示敬意 感谢他给我们留下这个工具软件 如读者下载MOCHA有困难 可给笔者来电子邮件 笔者可将MOCHA寄去 参考文献 ) ) ) ) lishixinzhi/Article/program/Java/Javascript/201311/25331

创新互联建站主打移动网站、成都做网站、网站制作、网站改版、网络推广、网站维护、申请域名、等互联网信息服务,为各行业提供服务。在技术实力的保障下,我们为客户承诺稳定,放心的服务,根据网站的内容与功能再决定采用什么样的设计。最后,要实现符合网站需求的内容、功能与设计,我们还会规划稳定安全的技术方案做保障。

如何反编译Apk得到Java源代码

1.下载反编译工具

需要下载四个工具:dex2jar、JD-GUI、apktool、apktool-install-windows-r05-ibot

dex2jar:将apk中的classes.dex转化成Jar文件。

JD-GUI:反编译工具,可以直接查看Jar包的源代码。

apktool:反编译工具,通过反编译APK中XML文件,直接可以查看。

apktool-install-windows-r05-ibot:辅助windows批处理工具。

2.解压缩APK包

apk文件也是一种常见的zip,常用的压缩软件就可轻松地解压apk文件。用压缩软件将apk文件中的文件解压到一个文件夹中,得到APK中的资源包括XML文件和classes.dex文件,classes.dex就是java文件编译再通过dx工具打包而成的。

3.反编译dex文件

解压apk文件后,你会发现res目录的图片没有加密,但java源码编译成了一个classes.dex文件,无法用普通的反编译class文件的方法来处理,dex2jar可以将dex文件转换成普通的jar包。

解压下载的dex2jar,把解压后的文件夹放到系统盘跟目录中并把这个目录加到系统path变量中,就可以直接用:dex2jar.bat或dex2jar.sh转换dex文件了。

DOS行命令如下:dex2jar.bat xx\classes.dex(xx是classes.dex文件所在的路径)。

将在同目录得到普通jar包:classes_dex2jar.jar,就可以用处理普通jar包的方法来反编译这个jar包得到原文件。

4.反编译jar包

得到jar包后,下载自已喜欢的反编译工具,推荐使用JD-GUI,有比较简单的图形界面,可以反编译单个class文件,也可以反编译jar包,比较方便。

打开压缩文件JD-GUI,运行jd-gui.exe,打开上面生成的jar包,即可看到源代码了。

5.反编译xml文件

打开解压的res\layout目录,有很多xml文件,如果你想看下作者是如何设计界面的,你会很失望,因为你看到的是一大堆乱码!这个时候我们需要用到的是apktool。

具体操作方法:将下载的apktool和apktool-install-windows-r05-ibot两个包解压到同一个文件夹下,这个文件夹有三个文件:aapt.exe,apktool.bat,apktool.jar。把这个文件夹也放到系统盘的根目录中并把这个目录加到path变量中。以HelloWord.apk为例:

在DOS命令行中输入:apktool d xx\HelloWord.apk HelloWord得到HelloWord文件夹,此文件夹中的xml文件就是编译好的可以正常查看的文件。

这样就得到了可以得到编译的源码和XML资源。

注意:文件的路径中最好不要出现中文!

什么是Java代码的编译与反编译

java代码的编译,就是你写完代码,java编译器把它编译成java虚拟机认识的代码,然后再由虚拟机执行它。反编译就是反过来,当然这不是java虚拟机干的事儿,是你找反编译工具干的事儿,把编译过的代码反编译成人看得懂的源代码。

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源代码

就是有些R资源只显示ID号,还有一些没用的代码也反编译出来了


网站名称:反编译java对比代码 反编译语言
网站URL:http://6mz.cn/article/hgshhe.html

其他资讯