Skip to content

Dekompilácia Javy a .NET

Stlačte F3 na preloženom súbore a uvidíte zdrojový kód namiesto bajtov. Robia to dva pluginy — jeden pre Javu (.class, .jar, .apk, .dex) a jeden pre .NET (.dll, .exe, .winmd, .netmodule) — a správajú sa rovnako, preto táto stránka pokrýva oba. Každý sa dá samostatne vypnúť alebo odstrániť v Konfigurácia ▸ Pluginy….

Archív sa ukáže ako strom svojich tried, jednotlivá trieda ako jeden súbor. Dekompilovať do zdrojov v ponuke Príkazy výsledok zapíše a umiestni do panela, takže v ňom môžete hľadať, porovnávať a kopírovať ako v každom inom priečinku so zdrojmi.

Engine si nainštalujete sami

Žiadny dekompilátor nie je pribalený a nič sa za vás nesťahuje. Je to zámer z dvoch dôvodov: JD-Core, najznámejší dekompilátor Javy, je pod GPLv3 a nemohol by byť dodávaný vnútri aplikácie pod Apache-2.0 — a enginy sa zlepšujú, takže ich výmena by nemala vyžadovať novú verziu Peach Commandera.

Priečinok s enginmi… v prehliadači otvorí priečinok, kam patria. Tamojší README menuje každý engine a jeho licenciu.

Java CFR, Vineflower, Procyon, jadx (pre androidí .dex a .apk) a javap pre čistý bajtkód
.NET ILSpy a monodis pre IL

Skontrolovať enginy spustí pri každom engine príkaz na zistenie verzie a rozlíši tri veci: nainštalované a funkčné, nenainštalované, a nainštalované, ale nedá sa spustiť — nástroj Javy bez JDK je prítomný a napriek tomu sa nespustí, a odhalí to až skutočné spustenie.

Engine je opísaný dátami, nie kódom, takže si môžete pridať vlastný:

[cfr]
kinds  = class, jar
tool   = java
args   = -jar {engine} {input}
engine = ~/Library/Application Support/PeachCommander/decompilers/cfr.jar
output = stdout

Ak súbor zvládne viac enginov, použije sa prvý dostupný, pokiaľ si jeden nevyberiete. Ak sú nainštalované dva, Porovnať ukáže oba výsledky vedľa seba — hodí sa, keď jeden engine pri metóde vzdá to, čo druhý zvládne.

Hľadanie v preloženom kóde

Prehľadať všetky triedy prechádza dekompilovaný text namiesto bajtov, takže v JAR-e nájdete textový literál alebo názov metódy.

Dekompilácia počas hľadania v obsahu naprieč mnohými súbormi je samostatný prepínač, v predvolenom stave vypnutý: vytvoriť text môže znamenať spustiť engine raz na každú triedu, čo na pomalom stroji nie je rozumné míňať na hľadanie. Hlavný dialóg hľadania sa pýta zvlášť; tu sa to takisto odmieta.

Vyrovnávacia pamäť a limity

Výsledky sa ukladajú do vyrovnávacej pamäte, pretože dekompilovať tú istú triedu dvakrát je čisté čakanie. V predvoľbách je, koľko dní sa výsledky uchovávajú, a limit veľkosti vyrovnávacej pamäte; Vymazať vyrovnávaciu pamäť ju vyprázdni a oznámi, koľko sa uvoľnilo.

Dva časové limity chránia pred enginom, ktorý neskončí: jeden pre jednu triedu či typ, jeden pre celý archív. Oba prijímajú 0, čo znamená „použiť predvolenú hodnotu enginu“.