[ ZuLu @ 25.05.2002. 22:44 ] @
Cao svima. Da li neko moze da mi kaze kako da pesretnem signal za gasenje racunara, i sta je to "Ring 0", kako sam razumeo to je neka dozvola koja ima veze sa presretanjem signala gasenja racunara ali ako neko moze da mi malo bolje to objasni bio bi vrlo zahvalan.
Unapred hvala!!!!
[ SEH @ 26.05.2002. 13:43 ] @
Ring0...the ring of power. Gle, na procesorskoj razini postoje 4 razine privilegija (popularno nazvane prstenovima) i odatle nazivi ring0, ring1, ring2 & ring3. OS bi trebao ovako izgledati:

Ring 0: Kernel (memory management, scheduling i sl.)
Ring 1: Sistemski servisi (Driveri, Filesystem)
Ring 2: Sistemske extenzije (SQL, mrezni servisi)
Ring 3: Korisnicke aplikacije

Ili ga je barem Intel tako dizajnirao :o)

Svaki proces koji je pokrenut u nekom prstenu moze pristupiti podacima u istoj ili nizoj razini privilegija, ili explicitno dozvoljenim sistemskim pozivima ("call gate").

Ako je pozvan neki sistemski poziv, on ce vjerojatno biti pokrenut u nekom prstenu sa vise privilegija (npr. da dozvoli aplikaciji da pise na disk koristeci write() sistemski poziv).

Direktan pristup hardveru se kontrolira u prstenu sa najvise privilegija (ring0) i najcesce je ogranicen na drivere.

Windoze koriste samo 2 prstena - ring0 i ring3. U ring0 rade driveri gdje imaju slobodan pristup portovima, memorijom (cijelom memorijom, nema vise pisanja na "nedozvoljenu" memorijsku lokaciju) i sl. Svi ostali programi u pravilu rade u ring3.

M$ je odlucio koristiti samo 2 prstena zato jer je sama operacija skakanja izmedju prstenova vrlo "skupa" u smislu procesorskih taktova, tako da bi skok ring3->ring2->ring1->ring0 bez problema funkcionirao, ali bi bogami bio jako spor.

Kao sto ste odmah i sami mogli uociti, ring0 je najzanimljiviji od svih prstenova. Virusopisci su bili ti koji su prvi otkrivali rupe OS-a koje bi se mogle iskoristiti za dobivanje ring0 privilegija.

Medju prvima su bili virusi CIH (AKA Chernobyl) I Sexy koji su modificirali IDT. Kasnije su otkriveni mnogo elegantniji nacini skakanja u ring0 i danas ih postoji mislim oko 20-ak (callgate, faultgate, intgate, trapgate,VMM, IRQ, TCB da nabrojim najpopularnije) za win9x. IDT nije vise jako preporucljiv jer postoje programi (frogsice recimo) koji je mogu zastiti od instaliranja vlastitih interrupta.

Iako ove metode vrijede samo za win9x, vec se polako mogu nazreti teznje za ulaskom u ring0 i na NT-kernel baziranim windozima. Jedini nacin za koji ja znam jest preko CALLGATE.DLL kojeg koriti Adonai virus i kojeg mozete naci u 29a #4 i, ofkors, preko vlastitih drivera (*.VXD)

Detekciju mozes koristiti preko WM_QUERYENDSESSION poruke, a sto se tice abortiranja shutdowna, znam za API AbortSystemShutdown() ali on radi samo na NT. Sjecam se da sam u DDK vidio neki VMM servis za tako nesto ali se trenutno ne mogu sjetiti kako se zove. DDK dokumentacija je ionako prilicno zbrckana, pa ako nadjem, javit cu ti.