[pso] [Tema1][win] Interceptare apeluri de sistem

Claudiu Mihail claudiu.bogdan.mihail at gmail.com
Mon Feb 28 13:25:02 EET 2011


Salut,

Revin cu o mica intrebare mai mult pentru cultura mea. Momentan incerc sa
fac interceptare la intreaga tabela de apeluri de sistem. Interceptarea
merge si se vede in DbgView ce apeluri sunt executate si si return code au
(momentan nu loghez alte date). In momentul cand dau unload la driver imi
iau un blue screen. Can interceptez doar cateva apeluri, gen NtReleaseMutant
(care se apeleaza foarte des) nu se mai intampla asta.

Realizez ca este a bit beyond the scope of the homework dar eram curios daca
cumva fac ceva teribil de gresit. Ma gandesc ca o data ce driver-ul este
unloaded adresa procedurii de interceptare devine invalida si poate mai sunt
procese care depind de ea sau ceva de genul.

Orice idee este bine venita,
Multumesc,
Claudiu

2011/2/27 Alexandru Juncu <alexandru.juncu at cs.pub.ro>

> 2011/2/26 Claudiu Mihail <claudiu.bogdan.mihail at gmail.com>:
> > Claudiu Mihail <claudiu.bogdan.mihail at ...> writes:
> >
> >>
> >>
> >> Salut,
> >>
> >> Am cateva nelamuriri in legatura cu tema 1 pe windows. Legat de
> interceptarile
> > apelurilor de sistem am inteles ca trebuie inlocuit SDT-ul (service
> descriptor
> > table) cu unul nou care sa contina si noua inregistrare, adica
> MY_SYSCALL_NO.
> > Zis si facut. Acum, legat de structura struct std, daca am inteles bine,
> atunci
> > cand vine un apel de sistem se cauta dupa index in service table adresa
> efectiva
> > a rutinei (ca se se faca jump la ea). Ca sa fac interceptarea, intuitia
> imi
> > spune ca ar trebui sa inlocuiesc adresele din service table cu adresa
> rutinei
> > mele de tratare, care in cele din urma va chema rutinele corecte, dupa
> logging
> > and stuff. Presupunand ca ce am spus pana acum este corect, intrebarea
> este cum
> > chef rutinele corecte din rutina mea de tratare? Bag niste cod de asm si
> fac
> > jump (sau call) la adresa rutinei corecte? Daca da sa inteleg ca service
> > parameter table imi da lista de bytes care reprezinta argumentele rutinei
> > apelate si in consecinta trebuie sa fac push la toti acesti bytes pe
> stiva? Daca
> > nu atunci cum ar trebui abordata problema?
> >>
> >> Intreb pentru ca in cursul doi nu este foarte detaliat explicata partea
> de
> > windows, iar in documentatia de pe net este destul de greu de gasit ceva
> foarte
> > relevant (e posibil sa nu stiu eu ce sa caut, caz in care as aprecia
> niste
> > pointeri).
> >>
> >> Thanks in advance,
> >> Claudiu
> >>
> >>
> >> _______________________________________________
> >> http://elf.cs.pub.ro/so2/wiki/resurse/lista-discutii
> >
> > Salut,
> >
> > Revin pentru a-mi corecta propriile aberatii (eventual cu altele). In
> primul
> > rand citind mai in detaliu am aflat ca atunci can se cere un apel de
> sistem dupa
> > un lung sir evenimente se ajunge la un apel al functiei
> KiSystemService(). Asta
> > aparent foloseste doua valori stocate in registrii eax si edx. Registrul
> eax
> > este indexul folosit pentru SDT pentru a accesa adresa rutinei din
> ntoskrnl.exe
> > precum si pentru a afla cati bytes are ca argumente rutina apelata.
> Asadar
> > campul spt din structura reprezinta numarul total de bytes al
> parametrilor
> > rutinei apelate. Iar argumentele efective (ca sir de bytes) se gasesc la
> adresa
> > din edx.
> >
> > Deci pentru a chema rutina mea ar trebui sa copiez argumentele rutinei de
> pe
> > "stiva user" (adress of which is stored in edx) pe "stiva kernel" si pe
> urma sa
> > fac call la rutina dorita.
> >
> > Cel putin asta am inteles so far.
> > Claudiu
> >
>
>
> Salut.
>
> Am adăugat la secțiunea de precizări Windows [1] un exemplu de
> interceptare ce se regăsește în cursul de SO2 de acum doi ani [2].
> Puteți să vă uitați pe curs pentru a vă lămuri cum funcționează
> apelurile de sistem în Windows. Sper că vă este de folos (sper că
> răspunde la întrebările lui Claudiu), dacă nu, reveniți cu întrebări.
>
> Scuze pentru răspunsul întârziat.
>
> [1] http://elf.cs.pub.ro/so2/wiki/teme/tema1?&#precizari-windows
> [2]
> http://cursuri.cs.pub.ro/~pso/index.php?section=Cursuri&file=04.%20Apeluri%20de%20sistem%20%28II%29
>
> --
> Alexandru Juncu
>
> Associate Teaching Assistant, Computer Science Dept.
> http://cs.pub.ro
> _______________________________________________
> http://elf.cs.pub.ro/so2/wiki/resurse/lista-discutii
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20110228/ddd1b632/attachment.htm>


More information about the pso mailing list