![]() |
![]() |
|
Architektura Microsoft .NET9.1.2001 se mi podařilo dokončit můj novej virus, kterej jsem nazval .NET.dotNET (AV firma F-Secure si ho přejmenovala na W32.Donut - koblížek :-). Vzhledem k tomu, že moje dílo opět vyvolalo vlnu reakcí (první virus pro .NET je z české republiky atd...), požádal mě Igi, abych napsal kratší článek na toto téma. Tak tady je. O architektuře Microsoft .NET (čti "dotnet") se začíná hodně mluvit. Podle MS to má být budoucí platforma pro budoucí počítačový průmysl (nejen počítače, ale i mobily, televize atd...) a v současné době se ji snaží hodně prosazovat (viz www.microsoft.net). Zatím sice neexistuje operační systém, který by uměl přímo s aplikacemi .NET pracovat, existuje nicméně vývojové a běhové prostředí, které ve své druhé beta-verzi poskytuje programátorům možnost začít programovat pro tuto architekturu již teď. Trochu to připomíná krok MS, když v roce (tuším) 1994 začal prosazovat architekturu Win32 (Win95, WinNT) - programátorům pod Win16 (Win 3.1, Win 3.11) poskytl platformu Win32s, která částečně umožňovala Win32 prostředí využívat. Byl to logický krok ze strany MS, který se snažil přinutit programátory zvyknout si na nový styl programování už před vydáním samotného OS. V současné době tedy existuje Microsoft .NET Framework SDK a Visual Studio.NET, dva produkty, které umožňují vývoj .NET aplikací. Zde je pro nás důležité prostředí Microsoft Common Language Runtime (CLR) - to umožňuje běh .NET aplikací v dnešních operačních systémech. Základem dnešního .NET návrhu je Microsoft Intermediate Language (MSIL) - platformově nezávislý, čistě objektový metakód (byte-kód, pseudo-kód, p-kód, ...), velmi podobný Javě. Faktem je, že původně se MS snažil převzít Javu, ovšem kvůli neshodě se Sun Microsystems (které se zřejmě nelíbily plány, které měl MS s jejich Javou) musel MS vymyslet vlastní, platformově nezávislý jazyk. A vymyslel si MSIL, což se dá považovat za náhradu assembleru, strojového kódu. Samozřejmě, musel také poskytnout programátorům nějaký vysoce funkční objektově orientovaný jazyk, který by je přilákal a naučil je efektivně .NET aplikace programovat (a který by se dal do MSIL snadno převést). A vymyslel si C# (čti "C sharp"). C# je základním programovacím jazykem pro .NET, ale není samozřejmě jediný. Existuje také nový VisualBasic a J#, velmi podobný Javě a ASP.NET. Na podpoře .NET ve starších jazycích od jiných softwarových dodavatelů se nyní udajně také pracuje (např. Perl). Teoreticky je jedno, v jakém jazyce program napíšete, výsledek by měl být úplně stejný (protože se program stejně převede na jednotný MSIL). Takto napsané programy, jak jsem již řekl, mohou v současné době pracovat pouze s nainstalovaným MS CLR. Nyní se kompilují do specielně upraveného Win32 PE souboru, v novém .NET operačním systému by se měly již ukládat do normláního meta-souboru, který bude umět OS nativně vykonávat. Takto upravený PE soubor de-facto pouze natáhne běhové prostředí .NET, které se už o vykonání metakódu postará. Navenek se tedy chová jako standardní EXE soubor, který se nikterak neliší od standardních (EXE) programů. Virus dotNET využívá této dočasné vlastnosti MS CLR - přepíše relokační část PE souboru tělem viru, uschová původní metakód, nahradí ho vlastním, vymaže záznam o CLR hlavičce a přepíše adresu běhového prostředí adresou relokační sekce (tedy adresou viru). Takto upravený PE soubor místo spuštění .NET aplikace nejprve spustí samotný virus, který obnoví záznam o CLR hlavičce a aktivuje virový metakód. V poslední fázi obnoví i hostitelský metakód a spustí jej - tím zajistí i vykonání hostitelského kódu. Virus má opět posloužit pouze jako ukázka, že i infekce .NET aplikací je možná. I když se může spustit teprve ve druhé beta-verzi spouštěcího prostředí .NETu. Nadcházející nativní .NET operační systém (WinNT 6.0 - BlackComb) s největší pravděpodobností spuštění dotNETu neumožní, nicméně nemám strach, že ve 29A na nic nepřijdeme ;-) Autorem článku je Benny/29A (benny@post.cz). Velice mu za něj děkuji !!! |
||
![]() |
![]() |