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

Alexandru Juncu alexandru.juncu at cs.pub.ro
Sun Feb 27 16:31:16 EET 2011


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


More information about the pso mailing list