Servicii de programare descrise aici
în Windows (voi folosi, de asemenea, termenul
„Service“, care este echivalent cu termenul „serviciu“),
un exemplu de utilizare
descarca drivere sau rootkit-uri.
La începutul sistemului de operare funcționează Services Manager (SCM
Manager) date .Schityvaya din registru (numele
serviciu, modul de încărcare, tipul de șofer, etc.)
este o bază de date de management
Servicii. Voi descrie unele dintre caracteristicile, cu
care pot fi utilizate pentru a gestiona servicii.
Trebuie mai întâi să creați o relație cu această
Baza de date (baza de date SCM), apoi trece
Index Baza de date pentru unele funcții
servicii gestionate.
Așa cum am spus, primul lucru pe care trebuie să
a crea o legătură cu datele CSM de bază. pentru a face acest lucru,
este funcția OpenSCManager.
SC_HANDLE OpenSCManager (LPCTSTR lpMachineName, LPCTSTR
lpDatabaseName, DWORD dwDesiredAccess);
LPCTSTR lpMachineName - pointer la un șir de caractere,
încheiată la zero, indicând numele
computerul local. această opțiune
Acesta poate fi setat la NULL.
LPCTSTR lpDatabaseName- pointer la un șir de caractere,
Terminate la zero, care conține numele
de bază poate fi deschisă opțiunea dannyh.Etot
sluduet, de asemenea, setat la NULL.
DWORD dwDesiredAccess - acest parametru conține
steaguri, înseamnă dreptul de acces la baza de date
dannyh.Ya nu va lista toate steagurile în
acest articol va lua în considerare numai
posibilitate de servicii de programare, care sunt necesare
pentru a descărca rootkit-uri.
SC_MANAGER_ALL_ACCESS - un standard de drepturi de acces la baze de date.
SC_MANAGER_CONNECT - permite conectarea la CSM bază de date.
SC_MANAGER_CREATE_SERVICE- permite crearea de noi
Servicii.
Crearea unei conexiuni la CSM bază de date, puteți gestiona
Servicii.
Funcția OpenService este folosită pentru a obține
descriptor de servicii. Rețineți că această funcție nu este
creează un serviciu este folosit pentru a crea servicii
CreateService, și deschide deja creat anterior
serviciu.
SC_HANDLE OpenService (SC_HANDLE hSCManager, LPCTSTR
lpServiceName, DWORD dwDesiredAccess);
SC_HANDLE hSCManager - indicatorul returnat
Funcția OpenSCManager.
LPCTSTR lpServiceName - numele serviciului fiind deschis.
Drepturile dwDesiredAccess- DWORD cu care putem
serviciu deschis. Iată câteva dintre ele:
SERVICE_ALL_ACCESS- sunt permisiuni standard.
SERVICE_START-autorizează lansarea serviciului.
SERVICE_STOP-stop permite serviciului.
Această funcție returnează un pointer
serviciu deschis. Am înțeles, putem
gestionează serviciul în conformitate cu
se aplică regula.
Este nevoie de această funcție pentru a crea un serviciu (serviciu).
SC_HANDLE CreateService (SC_HANDLE hSCManager, LPCTSTR
lpServiceName, LPCTSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType,
DWORD dwStartType, DWORD dwErrorControl, LPCTSTR lpBinaryPathName, LPCTSTR
lpLoadOrderGroup, LPDWORD lpdwTagId, LPCTSTR lpDependencies, LPCTSTR
lpServiceStartName, LPCTSTR lpPassword);
Primul parametru (hSCManager) indică
indicatorul returnat de funcția OpenSCManager.
Următorii doi parametri indicați
șir de caractere care conține un nume pentru serviciu, și
un nume care va fi utilizat
interfață cu utilizatorul. următor
parametru conține steaguri,
definirea drepturilor de acces la serviciu. aici
Ei folosesc aceleași steaguri ca și în funcția
OpenService. În cele mai multe cazuri, veți avea nevoie de
setarea acestui pavilion în SERVICE_ALL_ACCESS. parametru
dwServiceType determină tipul produs
serviciu. În acest caz, trebuie să instalați
l în SERVICE_KERNEL_DRIVER, care, la rândul său,
Aceasta înseamnă că serviciul va rula
nivel driver-nucleu. valoarea Altele
Aceasta înseamnă că va fi fișierul driver
sisteme, etc. Parametrul DwStartType este foarte important, deoarece
definește modul de început al serviciului. În nostru
caz, ar trebui să fie setat
SERVICE_BOOT_START sau SERVICE_AUTO_START, ceea ce înseamnă
practic aceeași - lansarea serviciului în
lansarea sistemului de operare.
Parametrul DwErrorControl indică modul în care
erori de procesare care apar în nostru
caz, ar trebui să fie setat SERVICE_ERROR_NORMAL.
Urmatoarea optiune - lpBinaryPathName - un pointer la
zero, șir terminat indicând
calea completă către conducătorul auto (în acest caz,
rootkit), care va gestiona serviciul.
Următoarele setări trebuie să mângâi
setat la NULL, deoarece ele nu sunt importante în această
caz.
Pentru a porni serviciul, există o funcție
StartService.
BOOL StartService (SC_HANDLE hService, DWORD
dwNumServiceArgs, LPCTSTR * lpServiceArgVectors);
SC_HANDLE hService - indicatorul de serviciu a revenit
Funcția CreateService sau OpenService. parametru
dwNumServiceArgs conține un număr de parametri,
specificate în lpServiceArgVectors matrice. În acest
matrice specifică parametrii care
Acestea vor fi transferate la serviciu. Rețineți că serviciile
șoferii nu folosesc această opțiune,
Prin urmare, ultimii doi parametri în nostru
evenimentul ar trebui să fie setat la NULL. Dacă funcția
a fost executat cu succes, se întoarce
valoare non-zero. Funcția pentru a opri
nici un serviciu, dar poate fi ușor să scrie cu
folosind funcții ControlService:
BOOL ControlService (SC_HANDLE hService, DWORD dwControl,
LPSERVICE_STATUS lpServiceStatus);
Parametrul DwControl conține steaguri de
în cazul în care să specificați ce să facă cu
serviciu. Dacă trebuie să înceteze lucrul
serviciu, puteți instala în
SERVICE_CONTROL_STOP. Cu această funcție, și poate
mai convenabil să se oprească și să înceapă
serviciu. De exemplu, pentru a întrerupe funcționarea serviciului,
Amplasat în dwControl SERVICE_CONTROL_PAUSE și
să continue să lucreze în SERVICE_CONTROL_CONTINUE.
Parametrul lpServiceStatus - pointer la structura
SERVICE_STATUS, în cazul în care se înregistrează starea curentă
serviciu. Setați-l la NULL, dacă nu
importantă este starea actuală a serviciului. aceasta
funcția returnează o valoare non-zero, atunci când
implementarea cu succes.
Am enumerat toate funcțiile necesare pentru
rootkit-urile de descărcare (drivere) .Pentru închidere
DT structura CSM utilizând funcția
CloseServiceHandle. Este nevoie de doar
opțiune - DT CSM, și anume Descrierea returnat de
Funcția OpenSCManager.
Toate aceste funcții este suficient pentru
descărcați și executarea rootkit-urilor. I de mai jos
Exemple de utilizare a acestor funcții.
#define rootkitname "myrootkit" //
Noi cerem numele rootkit nostru
BOOL StopRootkit (SC_HANDLE hService) // Declară
opri și porni funcția de service
BOOL StartRootkit (SC_HANDLE hService) //
int main ()
SC_HANDLE hManager, hService; // manere
baza de CSM și servicii
LPVTSTR rootkpath = "C: \ myrootkit.sys"; //
calea completă către rootkit nostru
hManager = OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS); // crearea
conexiune cu baza de date SCM
în cazul în care (hManager) // dacă totul este în ordine
hService = CreateService (hManager, rootkitname, rootkitname, SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER, SERVICE_BOOT_START, SERVICE_ERROR_NORMAL, \ rootkpath,
NULL, NULL, NULL, NULL, NULL, NULL); // crearea
servicii, gestionarea rootkit nostru
dacă (hService) // ok?
StartService (hService, NULL, NULL); // Start
a crea un serviciu, a lansat astfel nostru
rootkit
>
if (StopRootkit (hService)) // daca
oprire a avut succes,
StartRootkit (hService); // apoi re
lansare
>;
CloseServiceHandle (hManager); // close
DT SCM (DB SCM).
>
BOOL StopRootkit (SC_HANDLE hService)
BOOL OK = true;
if (hService)
ok = ControlService (hService, SERVICE_CONROL_STOP, NULL); // apel
ControlService funcția SERVCE_CONTROL_STOP de pavilion,
if (! ok) // stopând astfel
muncă de serviciu
OK = false;
>;
>;
întoarce OK;
>
BOOL StartRootkit (SC_HANDLE hService)
BOOL OK = true;
if (hService)
ok = ControlService (hService, SERVICE_CONTROL_START, NULL); // apel
ControlService funcția SERVCE_CONTROL_START de pavilion,
if (! ok) // începe serviciul cu amyM
OK = false;
>;
>;
întoarce OK;
>
Acest exemplu demonstrează exact ceea ce am
Am scris mai sus. Puteți adăuga
verificări suplimentare pentru
preveni posibilele erori.
Arată acest articol unui prieten: