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