我正在使用 JD-GUI來反編譯Java JAR文件,但是問題是它留下了許多錯誤,例如重複的變量,我必須自己修復並檢查程序是否仍然存在可以正常工作(如果我正確地糾正了錯誤)。
我也嘗試了Fernflower,但是如果缺少依賴項,則會留下空白類。
我想知道哪個反編譯器:
- 給出的錯誤量最少
- 對混淆的混淆程度最高。
我正在使用 JD-GUI來反編譯Java JAR文件,但是問題是它留下了許多錯誤,例如重複的變量,我必須自己修復並檢查程序是否仍然存在可以正常工作(如果我正確地糾正了錯誤)。
我也嘗試了Fernflower,但是如果缺少依賴項,則會留下空白類。
我想知道哪個反編譯器:
我對遲到的答复表示歉意。
我一直在研究新的開源 Java反編譯器。隨時檢查它。
我還沒有針對任何混淆的代碼對其進行過測試,但是我看到它可以反編譯JD-GUI無法處理的許多方法。請注意,這是一個正在進行的工作,我相信您會找到很多無法反編譯的代碼。
舊條目不足
JAD 前段時間,每個人選擇的反編譯器都是jad。目前,該項目已經失效(此外,它不是開源的),但是您仍然看到很多人在引用它。
Java DeObfuscator 也是一個較舊的工具來自fileoffset.com,但仍然或多或少有效。該界面在大型項目中使用起來比較笨拙,但是該工具是開源。
JODE JODE是一個包含反編譯器和Java優化器的java軟件包。該軟件包可在GNU GPL下免費獲得。它已經有一段時間沒有更新了。
AndroChef 用於反編譯Android程序和Java文件的專有工具,在此可用。像 DJ Decompiler一樣,花錢買其他替代品也不值得。
Candle 是Brad Davis的開源反編譯器。我說的是完整性,但是離功能的完善還很遙遠。
現代工具
JD-Gui 可能是Java反編譯工具中使用最廣泛的工具之一,因為它易於使用並提供了圖形用戶界面,可快速打開並檢查類文件或JAR。您可以在此處找到它。
FernFlower 非常新穎且很有前途的分析Java反編譯器(已成為IntelliJ 14的組成部分)。
這是一個命令行工具。這個可以顯示Unicode參數及其全名。
從此處下載。這是一個命令行工具。該代碼可以顯示Unicode參數及其全名。
請注意,默認情況下,它還已經集成在IntelliJ中。
CFR
免費,並且開源。該程序旨在反編譯現代Java功能,包括Java 12開關表達式,Java 8 lambda(Java beta 103更改前後),Java 7 String開關等,儘管它們本身都是用Java 6編寫的。
也是命令行工具。
Procyon
開放源代碼,並且旨在處理Java 8功能(lambdas,::運算符)。需要運行Java 7。
Krakatau Krakatau很有趣,因為它是用Python編寫的。它目前包含三個工具:用於Java類文件的反編譯器和反彙編器以及用於創建類文件的彙編器。
尚不支持Java 8功能。
Soot
Soot是用於分析和轉換Java和Android應用程序的框架,最初是由麥吉爾大學的Sable Research Group開發的。它不是很常用作“反編譯器”,因為它還定義了中間字節代碼語言。
Recaf
Java字節碼編輯器和反向程序旨在直觀使用的工程工具。它可以通過多個反編譯器(CFR,FernFlower,Procyon)或以表格佈局的形式顯示字節碼,以允許顯示標準反編譯器無法識別的類元素。 Recaf使用上下文相關的菜單與類,方法和字段進行交互,從而允許用戶搜索用例,重命名項並以反彙編格式編輯定義。
它支持jar,war,類,並從正在運行的Java進程中提取類。
它完全用Java編寫,並且完全是開源。
Konloch的字節碼查看器
高級輕量級Java字節碼查看器,GUI Java反編譯器,GUI字節碼編輯器,GUI Smali,GUI Baksmali,GUI APK編輯器,GUI Dex編輯器,GUI APK反編譯器,GUI DEX反編譯器,GUI Procyon Java反編譯器, GUI Krakatau,GUI CFR Java反編譯器,GUI FernFlower Java反編譯器,GUI DEX2Jar,GUI Jar2DEX,GUI Jar-Jar,Hex Viewer,代碼搜索器,調試器等。
完全用Java編寫,它是開源。
它使用FernFlower,Procyon和CFR進行反編譯,使它成為使用最先進的反編譯器的出色視覺工具:
Enigma
最初用於反混淆Minecraft版本。內部使用Procyon。
有趣的是,反編譯器和Java的反混淆器是Minecraft周圍的改裝場景的結果,Minecraft是用Java實現的最受歡迎的遊戲之一。
資料來源: http://blog.macuyiko.com /post/2015/a-quick-look-at-java-decompilers.html
我無法說出哪個是最好的,但是如 SO問題所示,那裡有一些Java反編譯器。這些反編譯器似乎都沒有嘗試主動處理混淆,並且許多項目都被放棄了。
我沒有嘗試過 Krakatau,但是聽起來這可能對您有所幫助
嘗試看看Bytecode Viewer https://github.com/Konloch/bytecode-viewer它具有使用5種不同的反編譯器進行反編譯的選項:
首先,存在此處缺少類的Fernflower問題修復程序。您可以對agaricusb表示感謝。
到目前為止,Fernflower仍然是最好的Java反編譯器,即使它在過去幾年都沒有維護過。我最近嘗試聯繫作者,但還是沒有運氣。
對於AndroChef Java Decompiler,經作者許可,它使用Fernflower作為引擎。仍然不確定是使用補丁/修改版還是GUI。
@ mike-strobel開發的Procyon反編譯器似乎不錯,但是Fernflower仍然具有巨大的優勢,能夠反編譯約95個占我應用程序的百分比(約3000個班級),而procyon只能處理60%(2014年1月檢查)。
我正在使用 https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine這是IntelliJ的反編譯器,它反編譯JD所在的代碼-GUI失敗。
這是下載的非官方鏡像: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/
我想向您推薦 AndroChef Java Decompiler AndroChef Java Decompiler成功地反編譯了混淆的Java 6和Java 7 .class和.jar文件。