菠蘿大象
用心思考,用心寫作
首頁
新隨筆
聯(lián)系
管理
隨筆-67 評(píng)論-522 文章-0 trackbacks-0
在Eclipse中反編譯Class文件完全詳解
Java
是開源的,是免費(fèi)的,我們強(qiáng)烈鄙視所有不公開源代碼的東東。比如,對(duì)
class
文件進(jìn)行加密混淆的類文件,一般情況下,我們是看不到其源代碼的。本文將對(duì)此進(jìn)行詳細(xì)闡述,說明如何隨心所欲的反編譯看源碼,體驗(yàn)一下其中的樂趣。(本文最后面有相關(guān)資源下載)
目前在
Java
開發(fā)工具中,
Eclipse
可謂是占據(jù)著絕對(duì)的優(yōu)勢(shì),在平常使用中,大家都會(huì)有意無意的查看一下所調(diào)用
JAR
包的源代碼,這時(shí)如果沒有引入源文件的話,將會(huì)看不到結(jié)果。大象以
dom4j-
1.6.1
.jar
為例來進(jìn)行說明,打開
demo
項(xiàng)目(請(qǐng)?jiān)?span lang="EN-US">dom4j
分類中查找),找到
com.demo.database.DataBaseConnect
類,按住
Ctrl
鍵,再用鼠標(biāo)點(diǎn)擊
Element
,
如圖:
dom4j
是開源的,可以在
sourceforge.net
下載到它的完整版,里面當(dāng)然包含源代碼。大象想說的是,在做開發(fā)的時(shí)候,需要用到大量的
JAR
包,你不可能每個(gè)都去
down
一個(gè)源碼下來,而且我們用不到這么多的源碼,只是在需要的時(shí)候,看下其中的代碼,解決一時(shí)的問題。
大象通過查看網(wǎng)上其他人的研究成果再結(jié)合自己的分析,總結(jié)了一些經(jīng)驗(yàn),現(xiàn)在整合起來和大家分享一下。
1、安裝
jadclipse
插件
選擇插件時(shí),本人曾經(jīng)使用過網(wǎng)上評(píng)論非常好的
Jode
開發(fā)的
Eclipse
插件,不過效果不是很好,對(duì)有些加密的類不能反編譯,后來發(fā)現(xiàn)很多人用
jadclipse
,結(jié)果試驗(yàn)了一下,很不錯(cuò)的說。
使用
jadclipse
插件一定要注意
Eclipse
版本。
jadclipse_
3.2.4
,它對(duì)應(yīng)的是
Eclipse3.2
版,
jadclipse_3.3.0
可以用于
Eclipse3.3M6
以上版。
大家千萬不要把
jadclipse_3.3.0放到
Eclipse3.2
中,也不要把
jadclipse_3.2.4
放到
Eclipse3.3
中,
這樣做是沒什么任何效果滴!大象全部都測(cè)試過!
下面來說下安裝過程,其實(shí)很簡(jiǎn)單,網(wǎng)上也有相關(guān)的資料。將
jadclipse
插件(版本自己選擇)直接
copy
到
Eclipse
目錄中的
plugins
文件夾下,然后打開
Eclipse
,選擇"窗口"
-"
首選項(xiàng)"
-"
常規(guī)"
-"
編輯器"
-"
文件關(guān)聯(lián)",點(diǎn)擊文件關(guān)聯(lián)中的
*.class
,下面就會(huì)看到"
JadClipse Class File Viewer"
,選中它,點(diǎn)擊缺省值,點(diǎn)擊
OK
,將它設(shè)置為默認(rèn)的類查看器。如圖:
另外在用
jadclipse
的時(shí)候,一定要加入
jad.exe
這個(gè)程序,如果只有插件而沒有
jad
,那么還是不能反編譯成功,會(huì)顯示如下所示的錯(cuò)誤,因此我們還要安裝
jad
。
2、安裝
jad
可以在
http://www.kpdus.com/jad.html#download
這個(gè)地址下載到最新的
jad
,而且有不同平臺(tái)的版本,本文后面也有相關(guān)下載。將下載的壓縮包解壓后復(fù)制
jad.exe
至你的
%JAVA_HOME%\bin
目錄下,這樣做的好處是使用方便。然后在
Eclipse
中設(shè)置一下,選擇
”
窗口
”-“
首選項(xiàng)
”-“Java”-“JadClipse”
,在
path to decompiler
中輸入
jad.exe
的絕對(duì)路徑。這樣做是為了保證反編譯的效果。大象做過測(cè)試,只要將
jad.exe
放入
%JAVA_HOME%\bin
目錄下,就沒問題了,這個(gè)地方不設(shè)置也沒關(guān)系,不過本人還是建議大家設(shè)置一下,其它地方不用管。其實(shí)大象也不知道該怎么弄,就讓它保持默認(rèn)值好了。
^_^
到這里,我們的工作就做完了,現(xiàn)在再來按住
Ctrl
,用鼠標(biāo)點(diǎn)擊
Element
,怎么樣?看到源代碼了嗎?貼上部分反編譯代碼,如圖:
使用
jad
對(duì)絕大部分的加密混淆
class
文件都能很好的做到反編譯,目前大象還沒遇到失敗的情況,大家也可以多測(cè)試一下。
jadclipse插件體積很?。ㄖ挥?0幾K),和jad完美結(jié)合。大象強(qiáng)烈推薦!
現(xiàn)在有人會(huì)說了,這樣一個(gè)一個(gè)的看太麻煩了,我需要一次把一個(gè)
JAR
包下的所有
class
文件反編譯成
java
源文件。這樣的想法是可行的,還是使用
jad
工具。
3、批量反編譯
因?yàn)橹拔覀円呀?jīng)將
jad
加入到了
%JAVA_HOME%\bin
中,只要配置了環(huán)境變量,我們就可以在命令行中方便的使用。在這里,大象還是以
dom4j-
1.6.1
.jar
為例來說明具體的操作步驟。
解壓
dom4j-
1.6.1
.jar
和
jaxen-1.1-beta-7.jar。
為了方便,我將
JAR
包解壓放到
F
盤根目錄,在
cmd
中,進(jìn)入到
F
盤根路徑下,輸入命令:
jad -o -r -s java -d src org/**/*.class
我解釋一下這些參數(shù)的含義:
-o
:覆蓋舊文件,而且不用提示確認(rèn)。
-r
:重新加載生成包結(jié)構(gòu)。
-s
:定義輸出文件的擴(kuò)展名。
jad
為默認(rèn)擴(kuò)展名,我們反編譯后當(dāng)然是要
.java
源文件了。
-d
:輸出文件的目錄。
src
表示反編譯后的所有文件都放在
src
目錄下。
org/**/*.class
:
org
是解壓后的文件夾的名字,整個(gè)表示
org
目錄下的所有
class
文件。你也可以寫成這樣
**/*.class
,這表示當(dāng)前目錄及其子目錄下所有的
class
文件(包含所有的子目錄)。
反編譯
dom4j-
1.6.1
.jar
必須得有
jaxen-1.1-beta-7.jar
,因?yàn)?span lang="EN-US">dom4j
里面有對(duì)
xpath
的調(diào)用,而這些東西都是引用
jaxen
里的
API
,如果不加則會(huì)有這樣的錯(cuò)誤:
到此,關(guān)于反編譯的內(nèi)容全部說完了,不過我還想補(bǔ)充一點(diǎn),有可能
JAR
包中的
class
文件不是老外的,而是我們自己寫的,里面可能會(huì)有中文的情況,這時(shí),雖然反編譯通過了,但里面卻是
gb2312
形式的
unicode
編碼,因此我們還得做一個(gè)工作,將這些編碼轉(zhuǎn)換成中文。
大象使用
ant
腳本來完成這個(gè)工作,內(nèi)容比較簡(jiǎn)單,加了注釋,應(yīng)該很好明白,腳本文件名為
build.xml
,它放在
src
目錄下,和反編譯所得的包處在同一層。
<?
xml version="1.0" encoding="GBK"
?>
<
project
name
="decompile"
basedir
="."
default
="native2ascii"
>
<!--
定義輸出目錄
-->
<
property
name
="build"
value
="build"
/>
<!--
清除輸出目錄
-->
<
target
name
="clean"
>
<
delete
dir
="${build}"
/>
</
target
>
<!--
創(chuàng)建輸出目錄
-->
<
target
name
="init"
depends
="clean"
>
<
mkdir
dir
="${build}"
/>
</
target
>
<!--
編碼轉(zhuǎn)換 reverse="true"為反向轉(zhuǎn)換
-->
<
target
name
="native2ascii"
depends
="init"
>
<
native2ascii
reverse
="true"
src
="${basedir}"
encoding
="gb2312"
dest
="${basedir}/${build}"
/>
</
target
>
</
project
>
有一個(gè)地方需要補(bǔ)充一下,在
native2ascii
元素中,
src
和
dest
這兩個(gè)屬性表示著路徑。如果反編譯后,
src
目錄下,有多個(gè)不同的文件夾,這時(shí)使用
ant
來轉(zhuǎn)換編碼,請(qǐng)先想好要對(duì)哪些文件進(jìn)行反編碼;如果按上面的寫法,將會(huì)把
src
目錄下的所有文件夾中的所有文件進(jìn)行反編碼。假設(shè),現(xiàn)在有
com
和
org
兩個(gè)文件夾(其實(shí)是兩個(gè)包),我只需要對(duì)
com
中的文件進(jìn)行反編碼,那么可以這樣改寫:
src
=
"${basedir}/com"
dest
=
"${basedir}/${build}/com"
其它的都不變。在
cmd
中進(jìn)入到
src
路徑下,輸入
ant
,回車??梢钥吹饺缦陆Y(jié)果:
通過上面這些操作,class文件已經(jīng)對(duì)我們完全公開,想怎么看就怎么看,呵呵~~~~寫這些,是覺得對(duì)開發(fā)工作可能會(huì)有一定的幫助,如果看后能夠?qū)δ愎ぷ骰蚴菍W(xué)習(xí)起到哪怕一點(diǎn)點(diǎn)的作用,大象就感到很滿足了;如果你早就了解這些,或是認(rèn)為寫得不好,還請(qǐng)不要扔磚頭,扔蕃茄,更不要對(duì)大象口誅筆伐,人身攻擊,就當(dāng)看了一篇白話文好了。大家如果有什么好的建議或是意見,歡迎提出來一起討論,一起學(xué)習(xí)。
本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請(qǐng)注明出處。
點(diǎn)擊下載:
dom4j-1.6.1.jar
jaxen-1.1-beta-7.jar
點(diǎn)擊下載:
jadclipse_
3.2.4.jar
jadclipse_3.3.0.jar
點(diǎn)擊下載:
jad.exe
build.xml
posted on 2008-09-06 23:05
菠蘿大象
閱讀(43597)
評(píng)論(7)
編輯
收藏
所屬分類:
Eclipse
評(píng)論:
#
re: 在Eclipse中反編譯Class文件完全詳解 2008-09-08 23:48 |
Java_do
不錯(cuò)學(xué)習(xí)一下
回復(fù)
更多評(píng)論
#
re: 在Eclipse中反編譯Class文件完全詳解 2008-09-09 09:44 |
lvq810
一直都是用的jad
回復(fù)
更多評(píng)論
#
re: 在Eclipse中反編譯Class文件完全詳解 2010-08-26 11:31 |
可笑
說是java都該開源,自己寫這那點(diǎn)東西,也要加水印,文檔不錯(cuò),不鄙視你,但是可憐你
回復(fù)
更多評(píng)論
#
re: 在Eclipse中反編譯Class文件完全詳解 2010-08-26 12:07 |
菠蘿大象
@可笑
你可憐我?呵呵,我不需要你的可憐,這真像你的ID一樣,可笑,我加水印礙你什么事了?我把自己的經(jīng)驗(yàn)無償拿出來分享,在自己的作品上加上自己的logo,也做錯(cuò)了?我看是不方便你吧!
回復(fù)
更多評(píng)論
#
re: 在Eclipse中反編譯Class文件完全詳解 2011-05-25 14:04 |
路人錢
@可笑
@可笑
@可笑
對(duì)你有幫助就好啦,人家加水印關(guān)你什么事,不想看可以不看!找刺呢你!這個(gè)寫的很好,對(duì)于初學(xué)的我有很大幫助,多謝啦!
回復(fù)
更多評(píng)論
#
re: 在Eclipse中反編譯Class文件完全詳解 2012-12-06 11:42 |
聆聽隨風(fēng)
請(qǐng)教LZ eclipse 4.2.0 安裝后木有反應(yīng)啊 why??
回復(fù)
更多評(píng)論
#
re: 在Eclipse中反編譯Class文件完全詳解
2012-12-11 08:47 |
菠蘿大象
@聆聽隨風(fēng)
eclipse 3.3以后的,都要用jadclispse_3.3.0.jar這個(gè)插件,我現(xiàn)在用的3.6版也是用的這個(gè)插件,我在3.7.2上也試過是可以的,4.2現(xiàn)在都說問題很多,沒有試過。
回復(fù)
更多評(píng)論
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
一個(gè)很實(shí)用的Eclipse小工具——Easy Explore
在Eclipse中反編譯Class文件完全詳解
詳解Eclipse+MyEclipse完全綠色版制作方法
<
2008年9月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
隨筆分類
(67)
Concurrency(3)
Database(4)
dom4j&jdom(3)
Eclipse(3)
Flex(4)
Hibernate(2)
Java(11)
jBPM(1)
jQuery(5)
Linux(1)
mybatis-generator(3)
Spring3(11)
Struts2(9)
隨筆(7)
隨筆檔案
(67)
2015年9月 (1)
2015年8月 (1)
2015年7月 (1)
2015年5月 (1)
2015年4月 (1)
2015年3月 (3)
2015年2月 (1)
2015年1月 (2)
2014年8月 (1)
2014年6月 (2)
2014年5月 (2)
2014年4月 (3)
2014年3月 (1)
2014年2月 (1)
2014年1月 (2)
2013年12月 (3)
2013年11月 (2)
2013年10月 (2)
2013年9月 (2)
2012年5月 (1)
2012年4月 (2)
2011年8月 (1)
2011年6月 (1)
2011年5月 (3)
2010年9月 (1)
2010年8月 (1)
2010年7月 (1)
2010年6月 (1)
2010年5月 (2)
2010年4月 (4)
2010年3月 (2)
2010年2月 (7)
2008年9月 (2)
2008年8月 (6)
搜索
積分與排名
積分 - 780847
排名 - 54
最新隨筆
1.?由Struts2Action代理和googlecode-jsonplugin產(chǎn)生的一個(gè)IllegalArgumentException異常問題
2.?在CentOS系統(tǒng)中同步時(shí)間
3.?全局唯一ID生成器淺析
4.?用Java實(shí)現(xiàn)MJD轉(zhuǎn)UTC
5.?修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三)
6.?修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(二)
7.?修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(一)
8.?Quartz Spring與Spring Task總結(jié)
9.?常用的MySQL復(fù)雜查詢語句寫法
10.?常用的MySQL語句寫法
11.?淺談Java兩種并發(fā)類型——計(jì)算密集型與IO密集型
12.?使用XStream注解實(shí)現(xiàn)Java對(duì)象與XML互相轉(zhuǎn)換的代碼示例
13.?淺談volatile變量的理解
14.?淺談Java共享變量
15.?m2eclipse安裝小貼士
最新評(píng)論
1.?re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(一)
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--半湖思絮
2.?re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(一)
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--菠蘿大象
3.?re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(一)
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--donghc
4.?re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(一)
@donghc
maven不是這樣玩的呀,我的run是打包后用的,你仔細(xì)看了第三篇的內(nèi)容么?在IDE里直接啟動(dòng)StartUp就行了,這個(gè)類是用來測(cè)試的
--菠蘿大象
5.?re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(一)
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--donghc
閱讀排行榜
1.?使用jackson對(duì)Java對(duì)象與JSON字符串相互轉(zhuǎn)換的一些總結(jié)(59334)
2.?在Eclipse中反編譯Class文件完全詳解(43597)
3.?Quartz Spring與Spring Task總結(jié)(38575)
4.?使用XStream注解實(shí)現(xiàn)Java對(duì)象與XML互相轉(zhuǎn)換的代碼示例(33138)
5.?Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(二)(32454)
評(píng)論排行榜
1.?Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(五)(69)
2.?Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三)(47)
3.?Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(一)(35)
4.?Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(二)(27)
5.?Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三)(26)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 菠蘿大象
主站蜘蛛池模板:
亚洲色大成WWW亚洲女子
|
日本免费高清一本视频
|
亚洲国产精品无码AAA片
|
亚洲av无码日韩av无码网站冲
|
亚洲欧洲久久精品
|
久久精品国产亚洲AV未满十八
|
男男AV纯肉无码免费播放无码
|
337p日本欧洲亚洲大胆艺术
|
亚洲国产AV无码一区二区三区
|
无人影院手机版在线观看免费
|
亚洲性在线看高清h片
|
午夜亚洲国产精品福利
|
无码午夜成人1000部免费视频
|
亚洲精品国产精品乱码不99
|
韩日电影在线播放免费版
|
av无码国产在线看免费网站
|
亚洲综合另类小说色区色噜噜
|
人妖系列免费网站观看
|
免费看韩国黄a片在线观看
|
精品国产成人亚洲午夜福利
|
好爽又高潮了毛片免费下载
|
亚洲国产第一站精品蜜芽
|
午夜精品免费在线观看
|
亚洲中文无码线在线观看
|
最近的免费中文字幕视频
|
国产精品亚洲专一区二区三区
|
亚洲高清最新av网站
|
久久久久久亚洲精品影院
|
精品剧情v国产在免费线观看
|
免费无遮挡无码视频在线观看
|
国产黄色一级毛片亚洲黄片大全
|
国产免费AV片在线观看
|
亚洲人AV永久一区二区三区久久
|
国产成人亚洲精品
|
亚洲 自拍 另类小说综合图区
|
亚洲人成网站色7799
|
国产精品亚洲αv天堂无码
|
久久精品国产这里是免费
|
亚洲一区二区三区在线观看精品中文
|
久久免费视频精品
|
亚洲av永久中文无码精品综合
|