[pso] [Tema1] Structura std

Octavian Voicu octavian.voicu at gmail.com
Fri Mar 19 19:21:21 EET 2010


2010/3/19 Eugen <pupicutz2000 at gmail.com>:
>> Pentru mai multe informatii vezi [1], descrierea
>> KeAddSystemServiceTable [2] si trap.asm, sursa dispatcherului de
>> system calls pentru windows [3].
>
> Vroiai sa adaugi niste linkuri aici ?

Da, scuze, s-au pierdut pe drum link-urile:

[1] http://www.honeynet.org/node/438
[2] http://koala.cs.pub.ro/lxr/wrk/ntos/ke/miscc.c#L729
[3] http://koala.cs.pub.ro/lxr/wrk/ntos/ke/i386/trap.asm

> Ce inseamna id-ul system call-ului ? Numarul apelului de sistem ?
Da, prin id m-am referit la numarul apelului de sistem.

> ls e atunci dimensiunea vectorului de handlere ?
Da, exact.

> Trebuie sa adaugam o noua tabela in vectorul de tabele continand o singura
> noua intrare?
> sau sa modificam tabela curenta deja existenta,
> sau sa o copiem undeva adaugam intrarea si apoi sa o readaugam folosind
> KeAddSystemServiceTable ?
> Si cu shadow ce facem ?

Uitati de KeAddSystemServiceTable. Vi l-am dat ca link doar ca sa
intelegeti ce inseamna campurile din service table descriptor.
Descrierea metodei explica ce face fiecare parametru, primii 4
parametrii fiind exact campurile din struct std. Link-urile va ajuta
sa intelegeti mai bine cum functioneaza mecanismul de system calls pe
windows, dar nu va trebuie neaparat pentru tema.

Ce trebuie sa faceti voi e sa clonati KeServiceDescriptorTable[0], dar
clona sa aiba mai multe intrari pentru a fi loc de apelul
MY_SYSCALL_NO. Step-by-step:

- Alocati un service descriptor table (SDT) al vostru
- Alocati un service table (ST) si un service parameter table (SPT) al
vostru dar de dimensiune MAX(KeServiceDescriptorTable[0].ls,
MY_SYSCALL_NO + 1); MY_SYSCALL_NO e oricum ales sa fie mai mare decat
KeServiceDescriptorTable[0].ls, deci in principiu dimensiunea tabelei
va fi MY_SYSCALL_NO + 1 (e zero based, de acolo acel +1)
- Copiati intrarile originale din ST si SPT in tabelele duplicat
- Initializati SDT-ul vostru cu pointerii la ST si SPT alocate de voi
si LS (dimensiunea tabelei) cu MY_SYSCALL_NO + 1

Ultimul pas, inlocuiti KeServiceDescriptorTable[0] si
KeServiceDescriptorTableShadow[0] cu adresa SDT-ului alocat de voi. E
important sa faceti acest pas abia dupa ce tabela voastra e complet
functionala, altfel o sa aveti blue screen-uri intr-o veselie. De
asemenea, e nevoie de dezactivarea protectiei la scriere:

WPOFF();
// replace KeServiceDescriptorTable[0]
// replace KeServiceDescriptorTableShadow[0]
WPON();

WPOFF si WPON sunt definite in sci_win.h

In functia de unload a modulului, reveniti la
KeServiceDescriptorTable[0] si KeServiceDescriptorTableShadow[0]
originale (pe care le salvati inainte sa le inlocuiti).

Sper sa va lamureasca acest mesaj :)

Octavian


More information about the pso mailing list