Procyon je balík nástrojů pro generování a analýzu zdrojového kódu. Hlavní části (knihovny) jsou Core framework, Reflection framework, Expression framework, Compiler toolset a Java decompiler.
Je nutno podotknout, že dekompilace je poměrně náročná operace a vyžaduje hodně vypočetního času procesoru. Dekompilace velkého projektu může na průměrném stroji trvat několik jednotek až desítek minut.
Použití
Pokud je stažen již zkompilovaný procyon-decompiler.jar , lze si spuštěním tohoto programu vypsat nápovědu:
java -jar procyon-decompiler.jar -?
Nebo je možné se rovnou pokusit dekompilovat nejaký soubor. Pro vyzkoušení funkčnosti lze vyzkoušet dekompilovat standardní knihovny javy jako například java.lang.String. Soubor pro dekompilaci se zadává jako parametr programu.
java -jar procyon-decompiler.jar java.lang.String
V případě použití dekompilátoru v terminálech, které neposkytují obarvení textu (vyznačení syntaxe) bude uživatel značně ochuzen. Proto se doporučují terminály s možností zabarvování textu a pokud přesto detekce ANSI selže, je možné toto vynutit přidáním argumentu -DAnsi=true.
java -DAnsi=true -jar procyon-decompiler.jar java.lang.String
Balík Procyon umožňuje také dekompilaci celých .jar souborů. K tomu je potřeba přidat dekompilátoru argumet -jar, oznamující typ přícozího souboru a dále je možné si výsledek uložit do vybraného umístění.
java -jar procyon-decompiler.jar -jar soub.jar -o out
Decompiler API
Tolik k použití již hotového řešení dekompilace. Dále se podíváme na způsob použití balíku Procyon v kódu. V kódu je totiž potřeba Decompiler API, které však obsahuje pouze dvě metody.
public static void decompile( final String internalName, final ITextOutput output ); public static void decompile( final String internalName, final ITextOutput output final DecompilerSettings settings );
Prvním parametrem funkce decompile je proměnná typu String, která požaduje v textovém tvaru identifikaci souboru pro dekompilaci. Identifikace může být definována buď adresou v souborovém systému nebo adresu v Java notaci k standardní knihovně (např.: java.lang.String). Druhý parametr je výstup metody v datovém typu ITextOutput, který je definován v rámci balíku Procyon. Poslední parametr je volitelný a je jím možno nastavit některé parametry dekompilace. V následujícím příkladu lze vidět jednoduché použití této funkce s výstupem na terminál.
final DecompilerSettings settings = DecompilerSettings.javaDefaults(); try (final FileOutputStream stream = new FileOutputStream("path/to/file"); final OutputStreamWriter writer = new OutputStreamWriter(stream)) { Decompiler.decompile( "java/lang/String", new PlainTextOutput(writer), settings ); } catch (final IOException e) { // handle error }
Zdroje:
https://bitbucket.org/mstrobel/procyon
https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
https://bitbucket.org/mstrobel/procyon/wiki/Decompiler%20API
Žádné komentáře:
Okomentovat