Architektura Microsoft .NET

9.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 !!!