Java 反編譯工具哪家強?
點擊上方藍色字體,選擇“標星公眾號”
優(yōu)質文章,第一時間送達
大家都知道,將源代碼轉換成二進制執(zhí)行代碼的過程叫“編譯”,比如將C源代碼編譯成.exe可執(zhí)行文件;那么把二進制執(zhí)行代碼轉換成源代碼的過程就叫“反編譯”,比如把exe轉換為C源代碼就叫“反編譯”。
由于主流的C的編譯器都進行了代碼的優(yōu)化,因此把C編譯生成的exe文件反編譯成C代碼非常困難。但是像Java、.net這樣基于虛擬機技術的編程語言則反編譯非常容易,Java平臺下有Jad、Jode、JD等反編譯器,.net平臺下則有Reflector等反編譯器,他們的反編譯質量非常高,甚至和源代碼幾乎沒什么差別。
2、反編譯得到的是源代碼嗎?
反編譯得到的代碼是非常接近于源代碼,但是或多或少與源代碼有一些差異的,比如一些表達式被優(yōu)化掉了,比如,下面的源代碼:
int i=1+1;
學過《編譯原理》的同學知道有“常量優(yōu)化”這個編譯優(yōu)化算法,因此上邊的源代碼一般會被優(yōu)化為:int i=2;
由于在編譯過程中已經(jīng)進行了優(yōu)化,把“1+1”這個原始的信息丟掉了,因此反編譯出來的代碼只能是:
int i=2;
可以看到反編譯得到的代碼和源代碼是有區(qū)別的。
比如:andriod中
download = (Button)findViewById(R.id.xiaz);
被優(yōu)化成了download = (Button)findViewById(0x7f070018);
3、程序可以反編譯豈不是很不安全?
可以采用代碼混淆等技術來加大反編譯的難度,和降低反編譯代碼的可讀性,但是完全避免反編譯是不可能的。
4、反編譯器的原理是什么?
由于Java、.net這樣的基于虛擬機技術的語言平臺,都是采用了Byte Code的二進制結構,因此很容易將ByteCode轉化為“抽象語法樹”(簡稱AST,《編譯原理》這門課中的概念),然后采用反編譯器就可以將AST轉換為代碼了。
JD-GUI是屬于Java Decompiler項目(JD項目)下個的圖形化運行方式的反編譯器。
JD-Eclipse屬于Java Decompiler項目(JD項目)下個Eclipse插件化運行方式的反編譯插件。
JD-IntelliJ屬于Java Decompiler項目(JD項目)下個Intellij插件化的運行方式的反編譯插件。
JD分為JD-GUI、JD-Eclipse/JD-Intellij兩種運行方式,JD-GUI是以單獨的程序的方式運行,JD-Eclipse/JD-Intellji則是以一個Eclipse/IDEA插件的方式運行。
Java Decompiler項目”旨在開發(fā)一些工具,以便反編譯和分析Java 5以及更高本的Java的“字節(jié)代碼”。
JD-Core是一個庫,是一個從一個或多個“.class”文件中重建Java源代碼的庫。JD-Core可用于恢復丟失的源代碼并探索運行時Java的源代碼。支持Java 5的新功能,例如注釋,泛型或類型“枚舉”。JD-GUI和JD-Eclipse包括JD-Core庫。
XJad是基于Jad核心的Java源程序反編譯軟件,內(nèi)置Jad1.5.8e2;
可處理多個*.class文件,可以處理文件夾內(nèi)的所有文件,甚至可以處理*.jar文件;
帶有多頁面文本編輯器,也可集成在資源管理器中,隨時點擊右鍵都可進行操作;
支持java語法的高亮顯示;
使用說明:
========
1、打開一個或者多個*.class文件,XJad反編譯后,重命名為*.java文件,
保存至當前文件夾,并在編輯器中打開查看;
2、打開一個文件夾,XJad將該文件夾下所有*.class文件進行反編譯,并保存至該文件夾下,
依據(jù)包路徑信息生成文件夾路徑,如com.spring.framework.*,
將建立com\spring\framework的文件夾結構;
3、打開一個*.jar文件,XJad將該Jar文件中的所有*.class文件解壓縮到臨時目錄并進行反編譯,
并將源文件帶包路徑信息保存至當前文件夾下名稱為“~” + *.jar 的文件夾中;
① 單個文件反編譯

反編譯好之后,會在原來的.class所在文件夾下生成一個同名的.java源碼文件:

且XJad會自動打開反編譯后生成的源碼文件:

② 整個文件夾反編譯,可以選擇一個文件夾,XJad會把該文件夾下的所有.class文件全部反編譯好。
比如,我的D盤新建一個文件夾,F(xiàn)indPassword,里面只有個FindPasswordController.class文件

然后選擇 反編譯文件夾:

確定之后:

提示已經(jīng)反編譯成功,我們現(xiàn)在到 D:\FindPassword 里查看,里面已經(jīng)生成了一個按層次結構排行的源碼文件包了

點進去看一下,文件夾里有剛反編譯好的源碼文件了:

記事本打開看一下,源碼正常,只是沒有了注釋了

③ jar包反編譯

確定之后

反編譯之后,會在jar包所在的文件下,生成一個以“~”開頭的源碼文件夾:

打開進去看一下:

好了,JD-GUI 和 XJad的使用介紹到此介紹了。
版權聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:
https://blog.csdn.net/chenchunlin526/article/details/78259682
粉絲福利:Java從入門到入土學習路線圖
??????

??長按上方微信二維碼 2 秒
感謝點贊支持下哈 





