Windows szolgáltatás belülről
programozási szolgáltatások itt leírt
A Windows (én is használják a kifejezést
„Service”, amely egyenértékű a „szolgáltatás”),
Egy használati példa az
letöltés illesztőprogramok vagy rootkitek.
Elején az operációs rendszer fut Services Manager (SCM
A menedzser) .Schityvaya adatokat a nyilvántartás (név
szolgáltatás, a berakodás módja, hogy milyen típusú meghajtó, stb)
ez egy adatbázis-kezelő
szolgáltatásokat. Fogom leírni néhány jellemzője, a
amelyet fel lehet használni szolgáltatások kezelésére.
Ehhez először létre kell hozni egy kapcsolatot ezzel
adatbázis (SCM adatbázis), majd át
Index Adatbázis bizonyos funkciók
menedzselt szolgáltatások.
Mint mondtam, az első dolog, amit meg kell
kapcsolatot hozzon létre a bázis SCM adatokat. Ehhez
az OpenSCManager funkciót.
SC_HANDLE OpenSCManager (LPCTSTR lpMachineName, LPCTSTR
lpDatabaseName, DWORD dwDesiredAccess);
LPCTSTR lpMachineName - mutató egy húr,
megszűnik nulla, nevének
a helyi számítógépen. ezt a lehetőséget
Meg lehet NULL.
LPCTSTR lpDatabaseName- mutató egy húr,
nullavégű, nevét tartalmazó
nyitható alap dannyh.Etot opció
sluduet is NULL.
DWORD dwDesiredAccess - ez a paraméter tartalmaz
zászlók, az a jog, a hozzáférést az adatbázishoz
dannyh.Ya nem sorolja fel az összes zászlókat
Ebben a cikkben fogom csak úgy
lehetőségét programozási szolgáltatások, amelyek szükségesek
letölteni rootkitek.
SC_MANAGER_ALL_ACCESS - egy szabványos adatbázis hozzáférési jogokat.
SC_MANAGER_CONNECT - lehetővé teszi, hogy csatlakozni az adatbázishoz SCM.
SC_MANAGER_CREATE_SERVICE- lehetővé teszi az új
szolgáltatásokat.
Kapcsolat létrehozásához az adatbázis SCM kezelheti
szolgáltatásokat.
OpenService funkció használni ahhoz, hogy
szolgáltatás leíró. Megjegyzendő, hogy ez a funkció nem
létrehoz egy szolgáltatás létrehozásához használt szolgáltatás
CreateService, és megnyitja a már korábban létrehozott
szolgáltatás.
SC_HANDLE OpenService (SC_HANDLE hSCManager, LPCTSTR
lpServiceName, DWORD dwDesiredAccess);
SC_HANDLE hSCManager - mutató visszatért
OpenSCManager funkciót.
LPCTSTR lpServiceName - a szolgáltatás neve, hogy kinyissák.
DWORD dwDesiredAccess- jogokat, amellyel tudunk
nyilvános szolgáltatás. Íme néhány közülük:
SERVICE_ALL_ACCESS- szabványos engedélyeket.
SERVICE_START-beindítását engedélyezi a szolgáltatást.
SERVICE_STOP-stop lehetővé teszi a szolgáltatást.
Ez a függvény egy mutatót
kinyitotta szolgáltatás. Megértettük, tudjuk
kezelheti a szolgáltatás összhangban
A szabályt kell alkalmazni.
Ez a funkció létrehozásához szükséges szolgáltatás (service).
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);
Az első paraméter (hSCManager) azt jelzi,
A mutató a függvény visszatérési OpenSCManager.
A következő két paraméter jelzi,
string, amely nevét a szolgáltatást, és
egy nevet, amely felhasználható
felhasználói felület. következő
paraméter tartalmazza zászlók,
hozzáférési jogok meghatározása a szolgáltatást. itt
Ők ugyanazt a zászlók a funkció
OpenService. A legtöbb esetben, akkor meg kell
állításával ezt zászló SERVICE_ALL_ACCESS. paraméter
dwServiceType határozza meg a típusát előállított
szolgáltatás. Ebben az esetben meg kell telepíteni
azt SERVICE_KERNEL_DRIVER, ami viszont
Ez azt jelenti, hogy a szolgáltatás fut
kernel szintű vezető. mások érték
Ez azt jelenti, hogy ez lesz a vezető fájl
rendszerek, stb DwStartType paraméter nagyon fontos, mert
meghatározza azt az utat a kezdete a szolgáltatás. A mi
esetben azt kell beállítani
SERVICE_BOOT_START vagy SERVICE_AUTO_START, ami azt jelenti,
Gyakorlatilag ugyanaz - szolgáltatás elindításához
a dob az operációs rendszer.
DwErrorControl paraméter jelzi az utat,
feldolgozási hibák fordulnak elő a mi
esetben meg kell állítani SERVICE_ERROR_NORMAL.
Következő lehetőség - lpBinaryPathName - egy pointert
nulla végződő karaktersorozat jelzi
a teljes elérési utat a vezető (ebben az esetben,
rootkit), amely kezeli a szolgáltatást.
A következő beállításokat kell pat
NULL, mert ezek nem fontosak ebben
ügyben.
Ahhoz, hogy indítsa el a szolgáltatást, akkor a függvény
StartService.
BOOL StartService (SC_HANDLE hService, DWORD
dwNumServiceArgs, LPCTSTR * lpServiceArgVectors);
SC_HANDLE hService - service mutató visszatért
CreateService funkció vagy OpenService. paraméter
dwNumServiceArgs tartalmaz számos paramétert,
megadva a tömbben lpServiceArgVectors. ebben
array meghatározza azokat a paramétereket,
Ők kerül át a szolgáltatást. Megjegyezzük, hogy szolgáltatások
vezetők nem használja ezt a lehetőséget,
ezért a két utóbbi paraméter a mi
az esemény kell NULL. Ha a függvény
kivégezték sikeresen visszatér
értéke nem nulla. Funkció megállítani
ha nincs szolgáltatás, de lehet egyszerűen írjon
felhasználásával ControlService funkciók:
BOOL ControlService (SC_HANDLE hService, DWORD dwControl,
LPSERVICE_STATUS lpServiceStatus);
DwControl paraméter tartalmazza sás
ahol megadhatja, hogy mit kell csinálni
szolgáltatás. Ha kell abba a munkát
szolgáltatást, akkor telepítse a
SERVICE_CONTROL_STOP. Ezzel a funkcióval, és
sokkal kényelmesebb, hogy hagyja abba, és kezdje
szolgáltatás. Például, ha szüneteltetni a szolgáltatás működtetéséhez,
Állítsa be dwControl SERVICE_CONTROL_PAUSE és
munka folytatásához SERVICE_CONTROL_CONTINUE.
Paraméter lpServiceStatus - mutatót a struktúra
SERVICE_STATUS, ahol a jelenlegi állapot kerül rögzítésre
szolgáltatás. Állítsd NULL, ha nem
fontos az aktuális állapotát a szolgáltatást. ezt
a függvény egy nem nulla értéket
sikeres végrehajtásához.
Már szerepel az összes szükséges funkciót
rootkitek letöltés (Drivers) .A zárás
DT SCM szerkezet segítségével a funkciót
CloseServiceHandle. Ez mindössze
lehetőség - DT SCM, azaz leírás által visszaadott
OpenSCManager funkciót.
Mindezek a funkciók elegendő
töltse le és végrehajtása rootkitek. Az alábbi I.
Példák az ezen függvények használatát.
#define rootkitname "myrootkit" //
Arra kérjük a nevét a rootkit
BOOL StopRootkit (SC_HANDLE hService) // állapítsa
stop és start funkció Service
BOOL StartRootkit (SC_HANDLE hService) //
int main ()
SC_HANDLE hManager, hService; // fogantyúk
SCM bázis és a szolgáltatás
LPVTSTR rootkpath = "C: \ myrootkit.sys"; //
a teljes elérési utat a rootkit
hManager = OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS); // Létrehozunk
összefüggésben az SCM adatbázis
if (hManager) // ha minden rendben van,
hService = CreateService (hManager, rootkitname, rootkitname, SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER, SERVICE_BOOT_START, SERVICE_ERROR_NORMAL \ rootkpath,
NULL, NULL, NULL, NULL, NULL, NULL); // Létrehozunk
szolgáltatások, kezelni a rootkit
if (hService) // oké?
StartService (hService, NULL, NULL); // Start
A szolgáltatás létrehozásához, ezzel elindítjuk
rootkit
>
if (StopRootkit (hService)) // ha
megálló sikeres volt,
StartRootkit (hService); // majd újra
indít
>;
CloseServiceHandle (hManager); // bezár
DT SCM (DB SCM).
>
BOOL StopRootkit (SC_HANDLE hService)
BOOL ok = true;
if (hService)
OK = ControlService (hService, SERVICE_CONROL_STOP, NULL); // hívás
ControlService funkció SERVCE_CONTROL_STOP zászló, a
if (! ok) // így megállás
szolgáltatási munkát
ok = false;
>;
>;
visszatérés ok;
>
BOOL StartRootkit (SC_HANDLE hService)
BOOL ok = true;
if (hService)
OK = ControlService (hService, SERVICE_CONTROL_START, NULL); // hívás
ControlService funkció SERVCE_CONTROL_START zászló, a
if (! ok) // indítsa el a szolgáltatást amyM
ok = false;
>;
>;
visszatérés ok;
>
Ez a példa azt mutatja, csak amit
Írtam fent. Felveheti
további ellenőrzések
megakadályozzák az esetleges hibákat.
Itt található az ezt a cikket egy ismerősének: