V životě každého programátora dříve či později nastane situace, kdy musí sáhnout po dekompilačním nástroji, který z binární knihovny učiní čitelný kód ve vyšším programovacím jazyce. Důvody k tomu mohou být různé, i když se zveřejněním zdrojového kódu .NET Frameworku jich část ubyla. Často je ale třeba zjistit, jak věci fungují, když dokumentace chybí a nebo se prostě jenom inspirovat náhledem na to, jak to sakra udělali.

Po poměrně dlouhou dobu byla volba nástroje pro dekompilaci jasná – .NET Reflector, který před časem jako volně dostupný nástroj napsal a delší dobu vyvíjel Lutz Roeder. Nicméně tento nástroj před časem koupila firma Red Gate a poté, co se nesplnila její očekávání stran synergických efektů v podstatě zrušila jeho bezplatnou verzi. $ 35 není nijak závratná částka, ale pokud dekompilaci používáte jenom občas a nestojíte o hromadu pokročilých funkcí, mohou vás zajímat alternativy.

Našel jsem tři bezplatné a s radostí se o ně podělím. Všechny jsou postavené okolo open source knihovny Mono.Cecil

DevExtras.CodeReflect

http://www.devextras.com/decompiler/

Screenshot CodeReflect

Velice jednoduchý nástroj, rozhraním i funkcemi připomíná první verze .NET Reflectoru. Výbava je skutečně jenom velmi základní, umí načíst vybrané assemblies a postupně je procházet. Stažení je zdarma a bezproblémové, aplikaci není nutné instalovat, stačí rozbalit a spustit. Zásadně mi vadí absence vyhledávání a nemožnost dekompilovat a zobrazit celou třídu najednou – buďto to nástroj neumí a nebo nevím, jak ho k tomu donutit. Také syntax highlighting není nijak skvělý.

Aplikaci vyvíjí komerční firma, která mimo jiné vyvíjí obfuskátor, tedy nástroj, který má naopak dekompilaci zabraňovat.

ILSpy

http://wiki.sharpdevelop.net/ilspy.ashx

Screenshot ILSpy

Další jednoduchý nástroj postavený také na knihovně Mono Cecil. Vzhledově se od předchozího téměř neliší. Pokud se funkcí týče, obsahuje jich pár navíc, z nichž asi nejpodstatnější bude možnost vyhledávání v kódu. Ani v ILSpy jsem nenašel možnost pohodlně rozbalit dekompilovaný kód celé třídy, ale zase má ze všech posuzovaných asi nejlepší syntax highlighting.

ILSpy je open source, další z děťátek projektu SharpDevelop.

Telerik JustDecompile

http://www.telerik.com/products/decompiler.aspx

Screenshot JustDecompile

Firma Telerik je vývojářům známa nejvíce jako výrobce komponent pro ASP.NET Web Forms, MVC, Windows Phone… Poslední dobou se snaží proniknout i do oblasti pomocných vývojových nástrojů programy jako JustMock a JustCode. Nově nabízí též program JustDecompile, který se mi i přes poněkud svébytné uživatelské rozhraní ze třech posuzovaných programů líbí nejvíc.

JustDecompile umí všechno, co předchozí programy (i když syntax highlighting by mohl být lepší). Líbí se mi na něm zejména možnost ukládat a načítat sady knihoven, se kterým pracujete. Užitečná je též možnost vytvořit z assembly zpět projekt pro Visual Studio (C#). Nečekejte od ní zázraky, ale rozhodně se jedná o užitečnou schopnost, která se hodí zejména ve chvíli, kdy potřebujete s dekompilovaným kódem dál pracovat.

Existuje pár dalších nástrojů, ale všechny, které jsem našel, jsou buď placené a nebo ve velmi raných fázích vývoje. Pro tento okamžik jsem si pro své dekompilační potřeby vybral JustDecompile od Teleriku, ale uvidíme, co přinese budoucnost.