Java反編譯,小白也能變大神!揭秘編程逆向技巧,讓你輕松讀懂源代碼!
接觸過(guò) Java 語(yǔ)言的你肯定知道,程序員所書寫的是源代碼,通過(guò)編譯器可以生成字節(jié)碼,然后通過(guò)解釋器轉(zhuǎn)換為機(jī)器碼。這樣,機(jī)器就能讀懂程序員希望它干啥了。

從上圖中我們可以看到,通過(guò) javac 命令可以將源代碼編譯成字節(jié)碼,然后通過(guò) java 命令將字節(jié)碼解釋成機(jī)器碼,沒(méi)有問(wèn)題機(jī)器就運(yùn)行,這樣我們就可以看到程序結(jié)果了。
本實(shí)驗(yàn)中已經(jīng)提供給了大家一個(gè) Test.java 源文件和 Person.class 字節(jié)碼文件,如下圖所示:

我們可以執(zhí)行以下命令看一看效果:


打開(kāi) Test.java 源代碼:

從代碼中可見(jiàn),使用到了 Person 類調(diào)用了類中的方法進(jìn)行數(shù)據(jù)操作,然而提供給大家的是 Person.class,字節(jié)碼文件是無(wú)法直接打開(kāi)的。

那么問(wèn)題來(lái)了.class 字節(jié)碼文件應(yīng)該如何獲取信息呢?
沒(méi)錯(cuò)這里只提供了字節(jié)碼文件 Person.class,接下來(lái)就來(lái)告訴大家如何通過(guò)字節(jié)碼文件獲取類中成員信息。
javap 命令
我們可以通過(guò) javap 命令,來(lái)獲取源文件中的基本信息,這叫反編譯操作。
javap 命令是 JDK 自帶的反匯編器,用來(lái)解析字節(jié)碼文件。
語(yǔ)法格式:

注意:使用 javap 查看字節(jié)碼文件的內(nèi)容,必須提供類名,或者使用 Xxx.class 也可以,當(dāng)書寫為 *.class 時(shí),表示當(dāng)前目錄下的所有字節(jié)碼文件。
查看 Person 類的信息:


也可以查看 JDK 提供的 Object 類信息:


不使用選項(xiàng)參數(shù)的情況下可以查看到 public、protected 修飾的和默認(rèn)情況下的屬性和方法。
使用選項(xiàng)參數(shù) -h
查看所有選項(xiàng)信息以及各自的作用,命令如下:


使用選項(xiàng)參數(shù) -version
查看編譯器的版本信息,命令如下:


使用選項(xiàng)參數(shù) -p
查看 Person 類中所有定義的屬性和方法,命令如下:


使用選項(xiàng)參數(shù) -sysinfo
查看 Person 類的系統(tǒng)信息,命令如下:


選項(xiàng)參數(shù)就不一一講解了,大家可以自己都去試試。
最后,說(shuō)一下反編譯后的內(nèi)容我們也可以保存到指定的文件中,命令如下:


相信大家對(duì) javap 命令有了一定的認(rèn)識(shí),也會(huì)進(jìn)行了簡(jiǎn)單的使用,這個(gè)命令挺有意思吧!
當(dāng)然了,若 Person.class 文件是經(jīng)過(guò)加密處理的,那么 javap 命令將沒(méi)有用了哦~
今天的分享就到這里啦,如果你想了解更多技術(shù)干貨,關(guān)注藍(lán)橋云課不錯(cuò)過(guò)~
