Dekompilátory pro .NET a obrana proti nim

Jak z Dll nebo Exe získat zdrojový kód v C#? Snadno – stačí Anakrino a pár kliknutí myší.
Kdopak se to dívá?

Když se Java dočkala většího rozšíření, brzy se objevila spousta dekompilátorů (k nejznámějším patří například Mocha), které dokázaly převést javový bytecode zpátky do zdrojového textu. Bylo jen otázkou času, kdy se podobná věc přihodí i .netu.

První krok, který se zřejmě nabízí, je disassembler ILDASM dodávaný s .NET SDK. Ten ukáže názvy metod, třídy, jmenné prostory, zdrojový kód samotný ale u release buildů neukazuje. Dá se s ním však docela dobře poznat, jak je aplikace strukturovaná, a více méně lze odhadnout základy algoritmu. Není to ovšem nic pro normálního uživatele.

O něco příjemnější práce je s aplikací Reflector for .NET Lutze Roedera, pořád ale jde o hlavně o prohlížeč tříd a disassembler, nikoli o dekompilátor hodný toho jména.

I na ty ale přišla řada. První a patrně nejznámější z nich je Anakrino. Když se mi poprvé dostal do ruky, docela mi zatrnulo. To jsou opravdu všechny mé zdrojové kódy přístupné? Opravdu to tak vypadá – zkuste si zkompilovat program a na výsledné EXE nebo DLL se podívejte Anakrinem. Můžete (podobně jako v Reflectoru) listovat třídami a dívat se na proměnné. Navíc je tu ale možnost převést vnitřek metod do zdrojového textu – volitelně v c# nebo MC+ (managed c++). Zdrojové kódy programu jako na dlani!

Na druhý pohled to ale není tak hrozné. Anakrino sice ukazuje zdrojáky, ty jsou ale do určité míry poškozené. Především ukazuje jen zdrojový kód jedné metody (takže není možné snadno vzít kompletní zdrojové kódy, provést v nich úpravu a znovu je zkompilovat). Názvy proměnných si Anakrino vymýšlí (typicky local1, local2 atd). Samozřejmě že ve zdrojáku nejsou žádné komentáře. Pokud kompilátor provedl různé optimalizace, k původnímu tvaru se už také nedostanete (například konstanty jsou často umístěny přímo v textu – namísto odkazu na konstantu v dané třídě). Některé metody se Anakrinu dekompilovat nepodařilo – často se vyskytly problémy s aplikacemi, které byly napsány v managed c++ místo v c# nebo vs.net.

Anakrino není jediné – další dekompilátory se začaly objevovat jako houby po dešti. Kouzelné je, že velkou část z nich najdete na webu firem prodávajících různé ochranné programy, které mají proti těmto dekompilátorům váš kód bránit. Je to podobné jako stará (a jistě nepravdivá) pomluva o tom, že viry píší antivirové firmy. Z dalších dekompilátorů stojí za zmínku I+ Decompiler od I+ Software nebo Salamander od RemoteSoftu (ten poskytuje dokonce online verzi, takže můžete vesele dekompilovat bez toho, že byste měli na svém stroji .NET runtime).

Principy obrany

První a nejúčinnější obranou je zamezení fyzického přístupu ke kódu. Vytvářejte své programy jako webové aplikace, pokud je to jen trochu možné. Pořádně zabezpečte server před průnikem a downloadem .dll souborů. Dbejte o pravidelné záplatování bezpečnostních děr. Pokud nemůžete použít webovou aplikaci, ale můžete napsat program jako aplikaci client server, přeneste maximální množství "masa" do vrstvy business logiky a do databázové vrstvy, kterou umístíte na server, jenž pořádně zabezpečíte. Přistupujte k nim například přes web services – pokud se někdo dostane k prezentační vrstvě, nemusí to tolik bolet a nemůže páchat nepřístojnosti na vašich datech.

Pokud vaše aplikace pro běh ve webovém prohlížeči není vhodná – a podobných scénářů je pořád celá řada – vyzkoušejte některý z programů, které sníží užitečnost dekompilovaného kódu. Takové programy existují a obvykle se označují slovem obfuscator (volně lze přeložit jako "zmatkovač"). Pro svou činnost používají různé strategie – například přejmenovávání názvů metod a členských proměnných na nic neříkající názvy obsahující často netisknutelné znaky (takže vám pak dekompilátor místo volání metody LoadSecureData ukáže dfsfASDFcvxdv). Jiné se pokoušejí dekompilátory zmást tím, že využívají konstrukce možné v IL ale neplatné v c# – například v IL je možné mít dvě proměnné se stejným jménem a různým typem (XX jako integer a současně XX jako string), v c# to možné není.

Docela zajímavé obfuscátory vyrábí WiseOwlSoftware (Demeanor for .NET), Remote Soft (Salamander .NET obfuscator) nebo Lesser Software (LSW DotNet-IL-Obfuscator). Obfuscatory jsou věc nákladná a nikdy neochrání kód na 100 % – pokud někomu stojí za to si váš kód odkrokovat v debuggeru, dovnitř se stejně dostane. Mohou ale účinně fungovat proti různým začátečníkům a "takyhackerům", kteří jen tupě zkouší nástroje, jež našli na některém "c00l zecurity sajtu".

Důsledky a shrnutí

Existence dekompilátorů nijak zvlášť nezasahuje vývojáře webových aplikací, protože k jejich kódu se normální uživatel nedostane. Dekompilátory jsou ale velkou hrozbou pro vývojáře klasických GUI aplikací – jistě by se vám příliš nelíbilo, kdybyste naprogramovali nějaký balíkový software a vaše konkurence by po zakoupení jediné krabice měla přístup k vašim kompletním zdrojovým kódům. Totéž platí pro výrobce komponent (i pro webové aplikace). Většina licenčních ujednání sice reverse engeneering zakazuje, ale zkuste si honit nějakého čínského programátora...

Je zřejmé, že odhodlanému útočníkovi se SoftICE nebo podobným debuggerem neodolá ani většina aplikací napsaných v céčku, vše je ale otázka poměřování nákladů a přínosů. Obávám se, že dokud nebude k dispozici nějaký opravdu solidní obfuscator pro IL, příliš mnoho komerčních balíkových aplikací pro desktop neuvidíme.

A ještě jedna zajímavost na závěr. Podle vyjádření Erica Gunnersona, člena vývojového týmu C# , uvažoval Microsoft o vypuštění vlastního obfuscatoru. Z těchto plánů ale prozatím sešlo.

A co vy? Je váš kód v bezpečí?

Diskuze (14) Další článek: Hewlett-Packard získal podporu pro návrh převzetí Compaqu

Témata článku: Software, Google, Programování, Solidní stroj, Erica, Podobná věc, Obrana, Lutz, Reversi, Disassembler, Pomluva, Java Runtime, Salamander


Určitě si přečtěte

Vybíráme nejlepší monitory: Od úplně levných až po displeje na rozmazlování očí

Vybíráme nejlepší monitory: Od úplně levných až po displeje na rozmazlování očí

** Vybrali jsme nejlepší monitory na práci i pořádné hraní ** Nejlevnější monitor s kvalitním panelem nestojí ani tři tisíce ** Rozlišení 4K a větší obrazovka už není nedostupný luxus

David Polesný | 31

David Polesný
Monitory
Elon Musk podpořil Signal jako náhradu WhatsAppu. Aplikaci okamžitě zavalili uživatelé
Markéta Mikešová
WhatsAppElon MuskFacebook
Fedora 33 prostě funguje. Linux si zaslouží dobýt laptop, je to ale asi opět marné

Fedora 33 prostě funguje. Linux si zaslouží dobýt laptop, je to ale asi opět marné

** Desktopový Linux funguje a vypadá stále lépe ** Fedora 33 není výjimkou ** Ve stínu Windows a macOS tu vyrostly skvělé alternativy

Jakub Čížek | 167

Jakub Čížek
FedoraOperační systémyLinux
Vážně dnes ještě někdo krade Adobe? Video můžete stříhat zdarma v Resolve a fotky i vektory zvládne Affinity

Vážně dnes ještě někdo krade Adobe? Video můžete stříhat zdarma v Resolve a fotky i vektory zvládne Affinity

** Kde jsou ty doby, kdy měl skoro každý doma Photoshop ** Photoshop a Premiere Pro od kamaráda nebo z warezu ** Dnes už to nemá smysl, existuje totiž hromada laciných alternativ

Jakub Čížek | 92

Jakub Čížek
Grafický editorStřih videa
Dalším gigabitovým hráčem bude ČEZ. Internet již poskytuje prvním zákazníkům
Lukáš Václavík
Poskytovatelé internetuPřipojení k internetu
Týden Živě: On fakt dnes ještě někdo stahuje filmy z Ulož.to?

Týden Živě: On fakt dnes ještě někdo stahuje filmy z Ulož.to?

** Kauza Ulož.to a proč my dva už (moc) newarezíme ** Windows 10X existují, ale nabízí se otázka proč ** Nissan ukázal vizi kanceláře v podobě karavanu

Jakub Čížek, Vladislav Kluska | 152

Jakub ČížekVladislav Kluska
Týden ŽivěVideo