.NET Reflector: když chcete zobrazit zdrojový kód aplikace pro .NET

Na internetu najdete množství disassemblerů pro Win32 i pro platformu .NET Framework. Ne každý je však tak snadno ovladatelný a ne každý dovede zobrazit přímo zdrojový kód načtené aplikace. Použijete-li .NET Reflector, můžete otevřít jakékoli EXE či DLL pro .NET a krom jiných si prohlédnout i jeho zdrojový kód.

Reklama

Že jsou k dispozici různé disassemblery, které rozeberou zkompilovanou aplikaci na binární kód, je známá věc už z doby před Windows. My se v dnešním článku podíváme na dekompilátor a analyzátor kódu určeného pro platformu .NET. Program .NET Reflector nám umožní procházet zdroje a vlastnosti vybraného zkompilovaného souboru pro .NET, typicky EXE nebo DLL. Kromě obvyklého prohlížení řetězců, ikonek a obrázků zabudovaných do spustitelných souborů dovede zpracovat i programový kód a zobrazit jej ve formě zdrojového kódu.

Nejprve dovolte trošku teorie pro nezasvěcené. Každá aplikace určená pro .NET, ať už ji píšete v jazyku C#, VB.NET, F# nebo jiném, je při kompilaci nejprve převedena do kódu CIL (Common Intermediate Language), což je speciální jazyk určený pro .NET nebo prostředí Mono. Je nezávislý na platformě a právě díky tomu mimo jiné máme tolik jazyků podporujících .NET. Jsou prostě nejprve převedeny do CIL, který je standardizován a veřejně zdokumentován.

Kód CIL se dále převádí do byte-kódu a výsledné sestavení pro .NET je předáváno kompilátoru JIT, jehož výstup je následně předán procesoru počítače ke zpracování. Trošku komplikovaný proces s několika fázemi. Nás ale zajímá proto, že teoreticky každý kód sestavený IL Assemblerem do CIL může být opětovně rozložen pomocí nástroje nazývaného IL Disassembler nebo ildasm. Ten je dostupný například jako součást Visual Studia a umožní vám procházet základní strukturu aplikací pro .NET.

.NET Reflector

.NET Reflector a zobrazený IL

Program .NET Reflector funguje podobně jako IL Disassembler, ale nezastavuje se jen u převodu sestaveného balíčku do jazyka CIL. Získaný zdrojový kód aplikace si můžete nechat převést do jazyka, se kterým běžně pracujete, tedy například do C#, VB.NET nebo do F#. Nezávisle na tom, v jakém jazyku byla aplikace původně nakódována.

Toho mimochodem využívá i nový nástroj od Microsoftu s kódovým značením Roslyn. Tak, jak byl představen letos na BUILDu, vám ve Visual Studiu vám umožní označit část kódu C# a poté jej vložit do jiného projektu pomocí funkce „Vložit jako VB” (Paste as Visual Basic), případně obráceně.

Jak použít .NET Reflector a prohlédnout si aplikaci pro .NET

.NET Reflector nevyžaduje instalaci. Stáhněte si jen balíček s programem, rozbalte jej někde na disk a spusťte Reflector.exe (v balíčku je i verze pro příkazový řádek). Poté klasicky funkcí File >  Open Assembly otevřete nějaký sestavený EXE pro .NET. Ve stromové struktuře Reflectoru vám přibude další položka s názvem otevřeného assembly, které si můžete začít procházet.

V části odpovídající názvu otevřeného programu pak najdete například zdrojové kódy pro jednotlivá okna programu, využívá-li Windows Forms. Zde se již dostanete k jednotlivým funkcím definovaným v prohlížené části programu. Na ně pak stačí kliknout a v pravé části .NET Reflectoru se vám zobrazí jejich zdrojový kód.

.NET Reflector

.NET Reflector se zdrojovým kódem v jazyku C#

V nástrojové liště .NET Reflectoru najdete rozbalovací nabídku, s jejíž pomocí si můžete vybranou část zdrojového kódu nechat zobrazit v některém z podporovaných jazyků, čili v IL, Visual Basicu, C#, F# a dalších.

.NET Reflector

.NET Reflector s převodem kódu do Visual Basicu

Zobrazený zdrojový kód je interaktivní, takže se jím můžete proklikávat na definice použitých objektů a tříd. Příklad: Jestliže ve zdrojovém kódu vidíte například použití OleDbConnection, můžete se prokliknout nejen na jeho definici, ale například i na definici pro otevření databázového spojení, které je uvedeno dále v kódu.

.NET Reflector

.NET Reflector - převod do F# se úplně nezdařil

Jak se bránit disassembleru

Jak vidíte, prohlížení kódu aplikací pro .NET je velice jednoduché a zvládne jej v podstatě každý. Jestliže tvoříte aplikace pro .NET a není vám tato skutečnost lhostejná, můžete použít nějaké specializované nástroje pro zamaskování původního kódu, nebo zkusit jednoduchý trik popsaný třeba v článku How to prevent ILDASM from disassembling my .NET code.

Do vaší aplikace stačí přidat jmenný prostor System.Runtime.CompilerServices a následně ještě doplnit atribut [assembly: SuppressIldasmAttribute()]. Dlužno dodat, že toto vám zabrání sestavené EXE otevřít v IL Disassembleru, ale .NET Reflector na tuto úpravu nehledí.

Kde stahovat .NET Reflector

Program .NET Reflector si můžete stáhnout ve zkušební čtrnáctidenní verzi z jeho domovských stránek www.reflector.net. Jde tedy o placený produkt existující ve třech variantách odstupňovaných podle podpory integrace do Visual Studia a ladění i bez zdrojových kódů rozebírané aplikace. Ceny se pohybují od 35 do 95 dolarů.

Reklama

Přidat komentář