題:
什麼是好的Java反編譯器和反混淆器?
user56
2013-03-29 20:44:07 UTC
view on stackexchange narkive permalink

我正在使用 JD-GUI來反編譯Java JAR文件,但是問題是它留下了許多錯誤,例如重複的變量,我必須自己修復並檢查程序是否仍然存在可以正常工作(如果我正確地糾正了錯誤)。

我也嘗試了Fernflower,但是如果缺少依賴項,則會留下空白類。

我想知道哪個反編譯器:

  • 給出的錯誤量最少
  • 對混淆的混淆程度最高。
只是好奇,您期望除混淆器將提供哪些功能?除了手動重命名變量外,我看不到對某些代碼進行反混淆的任何方法。
七 答案:
Mike Strobel
2013-05-30 19:26:11 UTC
view on stackexchange narkive permalink

我對遲到的答复表示歉意。
我一直在研究新的開源 Java反編譯器。隨時檢查它。
我還沒有針對任何混淆的代碼對其進行過測試,但是我看到它可以反編譯JD-GUI無法處理的許多方法。請注意,這是一個正在進行的工作,我相信您會找到很多無法反編譯的代碼。

首先,您會在其他答案中看到他的反編譯器是Procyon。其次,儘管我通常不屑一顧,“看看我的圖書館能做到這一點!”答案,這將是一個錯誤。上面鏈接到的Strobel的[自述](https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler)值得仔細閱讀。它本身可能是一個“很棒”的答案,但是對於SE來說,它可能太長了。
+10000這確實是很棒的工作,它只是反彙編了一個類,在JD-GUI只得到其中的一半之後,我花了幾個小時試圖重建它。
即使我個人討厭+1註釋,但我不得不說,您在其中有一個不錯的項目,該項目對我有幫助。保持!
@Signus謝謝,很高興我的工作對您有用:)。
Alexandre Dumont
2016-08-26 02:49:18 UTC
view on stackexchange narkive permalink

舊條目不足

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。

可以在此處找到更多最新的fork

有趣的是,反編譯器和Java的反混淆器是Minecraft周圍的改裝場景的結果,Minecraft是用Java實現的最受歡迎的遊戲之一。

資料來源: http://blog.macuyiko.com /post/2015/a-quick-look-at-java-decompilers.html

該答案可能需要更新。截至2019年3月,似乎正在積極開發JD-Gui.https://java-decompiler.github.io/
我有一些Java 7代碼,正在嘗試為其編寫某些方面。內置的intellij反編譯器在某些情況下具有錯誤的變量名,並且可以忽略代碼塊。 JD-Gui顯示了這些塊,還顯示了看起來更準確的變量名。它還同時顯示了舊版本的JD-Gui與舊版本之間的差異。如果您要進行一些嚴重的反轉,則值得一看。
amccormack
2013-03-29 23:20:27 UTC
view on stackexchange narkive permalink

我無法說出哪個是最好的,但是如 SO問題所示,那裡有一些Java反編譯器。這些反編譯器似乎都沒有嘗試主動處理混淆,並且許多項目都被放棄了。

我沒有嘗試過 Krakatau,但是聽起來這可能對您有所幫助

  • 自述文件中:“ Krakatau反編譯器對大多數Java反編譯器採用了不同的方法。可以將其更多地視為輸入語言為Java字節碼且目標語言為目標語言的編譯器。是Java的源代碼。Krakatau接受任意字節碼,並嘗試將其轉換為等效的Java代碼,這使其對較小的混淆是健壯的,儘管它具有不重建“原始”源的缺點,導致輸出的可讀性比模式差匹配的反編譯器將為模糊的Java類生成。”
這實際上是反彙編程序的輸出。反編譯器反編譯為Java輸出。 (PS。我是開發商)
JD-GUI是目前最好的Java反編譯器之一,但是在反編譯代碼之前,必須將其與Bytecode上的反混淆器結合使用。我知道的Java最佳反混淆器來自那些正在被黑客入侵的http://www.rune-server.org或http://www.moparscape.org/smf或http://www.moparisthebest.org/smf Runescape Game的社區,該社區完全用Java編寫並且高度混淆。
Konloch
2014-11-19 17:45:58 UTC
view on stackexchange narkive permalink

嘗試看看Bytecode Viewer https://github.com/Konloch/bytecode-viewer它具有使用5種不同的反編譯器進行反編譯的選項:

  • FernFlower
  • Procyon
  • CFR
  • Krakatau
  • JD-GUI
Vladimir Protasov
2014-03-04 02:10:49 UTC
view on stackexchange narkive permalink

首先,存在此處缺少類的Fernflower問題修復程序。您可以對agaricusb表示感謝。

到目前為止,Fernflower仍然是最好的Java反編譯器,即使它在過去幾年都沒有維護過。我最近嘗試聯繫作者,但還是沒有運氣。

對於AndroChef Java Decompiler,經作者許可,它使用Fernflower作為引擎。仍然不確定是使用補丁/修改版還是GUI。

@ mike-strobel開發的Procyon反編譯器似乎不錯,但是Fernflower仍然具有巨大的優勢,能夠反編譯約95個占我應用程序的百分比(約3000個班級),而procyon只能處理60%(2014年1月檢查)。

您的應用程序是“本機” Java還是從Android格式轉換而來?如果是前者,我將非常有興趣了解您的二進製文件,以了解Procyon與Fernflower相比在何處發生故障。
@MikeStrobel這是“本機” Java應用程序。它僅供內部使用,因此無論如何我都無法共享。
您是否有機會給我發送一封電子郵件,描述您遇到了哪些問題?我一直很想听聽Procyon如何進行改進。我的聯繫信息在項目的BitBucket網站上。
-1
David Kennedy
2018-06-29 20:24:15 UTC
view on stackexchange narkive permalink

我正在使用 https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine這是IntelliJ的反編譯器,它反編譯JD所在的代碼-GUI失敗。

這是下載的非官方鏡像: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

Atanas
2013-10-27 16:15:14 UTC
view on stackexchange narkive permalink

我想向您推薦 AndroChef Java Decompiler AndroChef Java Decompiler成功地反編譯了混淆的Java 6和Java 7 .class和.jar文件。

用ANDROCHEF支付注意! AndroChef只是廢棄的fernflower反編譯器的包裝,不要浪費您的錢!


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...