.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ů.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal a Symfony. Obojí také školím spolu se základy SEO. Jsem Acquia Certified Developer a Site Builder a napsal jsem několik knih o Drupalu. Ve volných chvílích cestuji a podnikám výlety. Více se dozvíte na mém firemním webu.

reklama

Komentáře k článku

Přidat komentář

Filtered HTML

  • Povolené HTML značky: <a href hreflang> <em> <strong> <cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <p> <br>
  • Řádky a odstavce se zalomí automaticky.
  • Web page addresses and email addresses turn into links automatically.

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Poslední komentáře
reklama
reklama
Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

Knihy o Drupalu

Kniha Drupal 8 Kniha Drupal 7 333 tipů a triků pro Drupal
Více na KnihyPolzer.cz

@maxiorel na Twitteru

Maxiorel na Twitteru