2014-12-07 146 views
1

我想使用Storyyeller/Krakatau反編譯器反編譯文件。我已經下載了相關文件並將其放置在一個文件夾中。我嘗試使用命令提示符使用以下語法反編譯文件。如何使用Storyyeller/Krakatau反編譯.class和jar文件

===反編譯===

用法:

python Krakatau\decompile.py [-nauto] [-path PATH] [-out OUT] [-r] [-skip] 
target 

PATH:目錄,罐,或zipfiles的可選列表搜索 班喀拉喀託會嘗試。以自動檢測並添加包含核心語言類的 jar,但您可以通過 -nauto選項禁用該選項。對於多個罐子,您可以傳遞分號 分離的罐子列表或多次傳遞-path選項。

OUT:要寫入源文件的目錄名稱。默認爲 當前目錄。如果名稱以.zip或.jar結尾,則輸出將是一個 zip文件。

-r:反編譯目錄中的目標(遞歸)中找到的所有.class文件

-skip:繼續在錯誤。如果在反編譯特定方法時發生錯誤,回溯將作爲註釋打印在源文件中。如果在類級別進行反編譯時發生 錯誤,則不會發送源文件 ,並且會向控制檯打印錯誤消息。

目標:要反編譯的類名或jar名稱。如果指定了jar,jar中的所有類將被反編譯。如果指定了-r,則該目錄應爲 。

但我總是得到錯誤。我不明白上面的語法。

用一個簡單的例子,請解釋這句法

python Krakatau\decompile.py [-nauto] [-path PATH] [-out OUT] [-r] [-skip] 
target 

+0

使用此URL下載反編譯器https://github.com/Storyyeller/Krakatau – 2014-12-07 06:10:14

回答

2

用Krakatau反編譯的最簡單和普通的方法是反編譯jar。

假設您在當前目錄中有一個名爲Luyten.jar的jar文件,並且您想對jar中的每個類進行反編譯並將其輸出到目錄temp。然後,你會做這樣的事情

pypy -O Krakatau\decompile.py -skip -out temp Luyten.jar 

根據您是否已經安裝了JDK,並在那裏,你可能需要明確傳遞的路徑參數的JRE的位置。例如

pypy -O Krakatau\decompile.py -skip -out temp -path "C:\Program Files (x86)\Java\jre7\lib\rt.jar" Luyten.jar 

如果您想在jar中反編譯特定的類,可以將jar添加到路徑並指定classname。如果您需要像前面的示例中那樣指定rt.jar的路徑,則可以多次傳遞-path參數或用分號分隔單個時間。例如反編譯只有類com.beust.jcommander.FuzzyMap $艾奇,

pypy -O Krakatau\decompile.py -skip -out temp -path Luyten.jar com.beust.jcommander.FuzzyMap$IKey 

您也可以反編譯是一個罐子外的類文件,但它是一個很多更惱人的,因爲你必須確保目錄佈局是正確的。您需要指定相對於將找到類的位置的根目錄。

例如,假設你有位於./Foo/Bar/com/beust/jcommander/FuzzyMap$IKey.class

pypy -O Krakatau\decompile.py -skip -out temp -path Foo/Bar com.beust.jcommander.FuzzyMap$IKey 

在這種情況下,一個類文件,目錄必須匹配完全合格類名。一個常見的錯誤是嘗試使用錯誤的根目錄進行反編譯。關於jar的好處是擁有正確的目錄結構是自動的。

+1

感謝您的解決方案,並感謝您花費寶貴的時間銻。 – 2014-12-07 09:43:14

+0

這個反編譯器不好one.it doenst產生正確的輸出 – 2014-12-07 09:43:55

+0

@NirangaSandaruwan有什麼問題?缺乏復甦?對於未混淆的代碼,你可能會對Procyon感到高興,但如果你想要反編譯混淆代碼,那麼Krakatau的代碼是最好的。 – Antimony 2014-12-07 10:21:13