<!-- [if !mso]>
<mce:style><!--
v/:* {behavior:url(#default#VML);}
o/:* {behavior:url(#default#VML);}
w/:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
-->
<!-- [endif]--><!-- [if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!-- [if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><!-- [if !mso]>
<object
classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui>
</object>
<mce:style><!--
st1/:*{behavior:url(#ieooui) }
-->
<!-- [endif]-->
<!-- [if gte mso 10]>
<mce:style><!--
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
-->
<!-- [endif]-->
JAVA 反编译工具
JAVA
语言是
1995
年
5
月由
SUN
公司发布的,由于其安全性高、代码优化、跨平台等特性,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位。
不过,
JAVA
最突出的跨平台优势使得它不能被编译成本地代码,而要以中间代码的形式运行在虚拟机环境中,这使得
JAVA
的反编译要比别的高级语言容易实现,并且反编译的代码经过优化后几乎可以与源代码相媲美。
为了更好地保护知识产权,避免本公司的智力成果轻易被人窃取,开发者有必要对反编译工具深入了解,以便有针对性地采取保护措施。
目前,比较流行的
JAVA
反编译工具超过
30
种,其中有三款堪称精品:
一、
应用广泛的
JAD
在众多的
JAVA
反编译工具中,有几种非常著名的工具使用了相同的核心引擎——
JAD
,其中主要包括:
Front End Plus
、
mDeJava
、
Decafe
Pro
、
Cavaj Java Decompiler
、
DJ Java Decompiler
、
NMI’s
Java Class Viewer
和国产的
JAVA
源代码反编译专家等等。
JAD
本身是一个命令行工具,没有图形界面,上述的这些工具大多是在
JAD
内核的基础之上加了一个图形界面而已。这么多种产品的共同选择,足可证明
JAD
在
JAVA
反编译领域中的尊贵地位。
笔者用来测试的
JAD
版本是
1.5.8
f
。
<!-- [if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75"
alt="" style='width:24pt;height:24pt'/><![endif]--><!-- [if !vml]--><!-- [endif]-->
JAD
是使用
Microsoft Visual C++
开发的,运行速度非常快,可以处理很复杂的
JAVA
编译文件。众多的参数使
JAD
可以灵活应付多种加密手段,令反编译的代码更加优化和易读。由于
JAD
参数太多,没必要一一解释,其中有几个最常用的如下:
-d
-
用于指定输出文件的目录
-s -
输出文件扩展名
(
默认为
: .jad)
,通常都会把输出文件扩展名直接指定为
.java
,以方便修改的重新编译。
-8 -
将
Unicode
字符转换为
ANSI
字符串,如果输出字符串是中文的话一定要加上这个参数才能正确显示。
最常用的反编译指令如下所示:
Jad –d c:/javasource –s .java -8
javatest.class
这条指令将当前目录下的
javatest.class
反编译为
javatest.java
并保存在
c:/javasource
目录里,其中的提示输出为中文,而不是
Unicode
代码。
二、
源码开放的
JODE
JODE
是全球最大的开源项目网站
Sourceforge.net
的成员,不要以为源码开放就小瞧它,在所有的
JAVA
反编译器中,
JODE
的反编译效果是最好的,尤其是对付一些常见的加密手段,例如混淆技术等,更是出类拔粹。
JODE
本身也是纯
JAVA
开发的,最近越来越多的
JAVA
反编译软件也选择
JODE
来做它们的核心引擎,例如
JCavaj Java Decompiler
、
BTJ (Back To Java)
、
jEdit's
JavaInsight plugin
等。
JODE
是一个可运行的
JAR
文件,在
windows
环境下双击即可运行。
<!-- [if gte vml 1]><v:shape id="_x0000_i1028" type="#_x0000_t75" alt=""
style='width:24pt;height:24pt'/><![endif]--><!-- [if !vml]--><!-- [endif]-->
需要特别说明的是,
JODE
不是通过常规的
Open->File
的方式来加载
JAVA
编译后的类文件(
*.class
)或是类包(
*.jar
)的,而是通过在
Options
菜单中的
Set
Classpath
来实现的,单独的类文件可以将它的上一级目录作为
Classpath
输入,然后再选择
Reload Classpath
即可。
<!-- [if gte vml 1]><v:shape id="_x0000_i1029" type="#_x0000_t75" alt=""
style='width:24pt;height:24pt'/><![endif]--><!-- [if !vml]--><!-- [endif]--><!-- [if gte vml 1]><v:shape
id="_x0000_i1030" type="#_x0000_t75" alt="" style='width:24pt;height:24pt'/><![endif]--><!-- [if !vml]--><!-- [endif]-->
新加入的类包或是类的名字会在左侧窗口出现,双击类包名可以展开目录树结构,双击需要反编译的类名则在右上角的窗口中直接显示反编译后的源代码。
三、
独树一帜的
DAVA
DAVA
不是一个独立的
JAVA
反编译器,而是
JAVA
代码优化工具
Soot
的一部分。
Soot
和
JODE
一样是纯
JAVA
开发的,也是一个独立的
JAR
包,但却不能通过双击直接运行,而是象
JAD
一样在命令行状态运行。
<!-- [if gte vml 1]><v:shape id="_x0000_i1031" type="#_x0000_t75" alt=""
style='width:24pt;height:24pt'/><![endif]--><!-- [if !vml]--><!-- [endif]-->
Soot
对环境变量的配置要求非常严格,通常情况下要对
CLASSPATH
做如下设置:
Set CLASSPATH=%CLASSPATH%;c:/sootdir/sootclasses-2.1.0.jar;.;
其中的
c:/sootdir/
是下载的
soot
类包放置的路径,
CLASSPATH
末尾的
.;
代表了当前目录,如果不加上这个的话
Soot
经常会报一个找不到类的错误。
DAVA
是作为
Soot
的一个参数使用的,通常的用法如下:
Java soot.Main –f dava –d c:/javasource javatest
注意最后的类名不用带
.class
后缀,因为它默认是处理
class
文件,这个操作与前述的
JAD
的参数效果相同。
DAVA
采取了流程优化的方式进行反编译,与传统反编译思路不尽相同,但却对改变流程类的加密方法有独特的反编译效果。
推荐一款Java
反编译器,比较好用
推荐一款Java
反编译器,也使用了挺久的了,感觉还是很好用,就拿出和大家分享一下。
这款反编译器叫 "Java Decompiler",
由 Pavel Kouznetsov
开发,目前最新版本为0.2.5
.
它由 C++
开发,并且官方可以下载
windows
、linux
和苹果Mac Os
三个平台的可执行程序。
本人之所以认为它还不错,是其有下面几个功能:
1.
支持对整个Jar
文件进行反编译,并本源代码可直接点击进行相关代码的跳转
2.
支持众多Java
编译器的反编译(
支持泛型, Annotation
和enum
枚举类型)
-
jdk1.1.8
-
jdk1.3.1
-
jdk1.4.2
-
jdk1.5.0
-
jdk1.6.0
-
jikes-1.22
-
harmony-jdk-r533500
-
Eclipse Java
Compiler v_677_R32x, 3.2.1 release
-
jrockit90_150_06
图示:
<!-- [if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75"
o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:495.75pt;
height:423pt'>
<v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png" mce_src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png"
o:href="http://www.blogjava.net/images/blogjava_net/xmatthew/screenshot1.png"/>
</v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->
3.
快速查找源文件功能(Ctrl+Shift+T)
<!-- [if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75"
alt="" style='width:340.5pt;height:219.75pt'>
<v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image003.jpg" mce_src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image003.jpg"
o:href="http://www.blogjava.net/images/blogjava_net/xmatthew/OpenType.JPG"/>
</v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->
4.
安装方便.
只有600K,
直接运行即可。
5.
支持文件的拖放功能,源代码高亮显示
当然对于反编译的效果,感觉还可以。当然在本人使用过程也出现过,编译效果不佳的情况。但从总体上来看已经让我挺满意了,呵呵。
上述的三种工具各有千秋,但效果都非常不错。经测试,它们基本上都可以把
JDK
自带的一些例程完全反编译,然后不加任何修改可再编译成功,并能正常运行!
(文中工具均经过本人亲手测试,当时用的是jdk1.4.2_03
,现在离写文章的时候过了一年多了,jdk
都出到1.5
了,怕是有些程序也不太好反编了)
分享到:
相关推荐
JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA...
java 反编译工具java 反编译工具java 反编译工具java 反编译工具
1.java反编译工具 2.绿色版占用内存少 3.好用,值得下载
JAVA反编译工具,jdgui_3.3.0.0 看反编译网上的程序代码,是种学习的方式
jad 是应用最广泛的java 反编译工具;其本身是命令行工具;其他很多用具是在jad内核的基础上加了一个图形界面;比如我上传的资源、Cavaj Java Decompiler 以下假设jad.exe在c:\java目录下 一、基本用法 ...
java反编译工具解析.class文件 java反编译工具解析.class文件
jad-java反编译工具eclipse插件,jad-java反编译工具eclipse插件
mac 版本 java反编译工具jd-gui 解决安装后无法使用问题 :jd-gui-1.6.6-min.jar 双击后直接使用 如果双击不行 则右击打开
java 反编译工具 java 反编译工具 java 反编译工具 java 反编译工具 java 反编译工具
Java反编译工具,非常好用。反编译工具,适合开发人员阅读别人的代码。
JAVA反编译工具GDAE4.04