Java程式碼在編譯(Compile)之後並不會產生出可直接被機器執行的機器碼(Machine Code),因為Java程式是透過Java虛擬機(Java Virtual Machine, JVM)執行的,所以Java程式碼在編譯時會把程式編譯成JVM看得懂的Java bytecode。Java bytecode的格式類似組合語言,由於形式非常固定,因此很容易就可以被反編譯(Decompile)回Java程式碼,而且反編譯之後的程式碼和原始的Java程式碼可以非常的相近。
網路上能找到的Java反編譯工具還蠻多種的,有些要付費,有些則不用。筆者會推薦使用JD-GUI,因為它非常的輕量,而且操作起來很方便,免費又跨平台。
JD-GUI
JD-GUI可到官網直接下載。官網除了JD-GUI之外,另提供了Eclipse的插件(JD-Eclipse)能讓Eclipse擁有反編譯Java程式的能力。
JD-GUI的用法十分簡單,開啟JD-GUI之後,再選擇要反編譯的Jar或是Class檔案。