Cum pot intercepta evenimentul de închidere al unui program

Cum pot intercepta evenimentul de închidere al unui program

Bună ziua domnilor! Eu scriu un program de management al clasei de calculator, computerul clientului trebuie să funcționeze strict pentru o anumită perioadă de timp (plătit pentru), programul client rulează pe computerul clientului. Utilizatorii au drepturile administratorilor, astfel încât aceștia să poată pune și ei software în rețea. Există vreo modalitate de a intercepta încercarea de a închide procesul din Managerul de activități. Apoi, vor fi posibile anumite acțiuni. Programul funcționează ca un serviciu și ca serviciu nu poate fi închis, dar sunt neputincios împotriva celor trei degete.






Vă mulțumim anticipat.

dezactiva managerul de activități

nu se poate, se întâmplă ca copiii să ruleze odată 2-3 jucării (mai ales începători) apoi, pentru a nu reporni mașina trebuie să folosiți trei degete

Am folosit această tehnică, am scris cel de-al doilea serviciu, ambele servicii se interoghează reciproc la intervale, dacă unul dintre servicii nu există, cel de-al doilea trimite un mesaj către server și oprește computerul. Dar. Băiatul a venit în fruntea FAR și în clipa în care a luat toată apărarea în iad.

Tehnologia de rootkits și înainte, nimeni nu va ști că programul dvs. este în desfășurare;) Desigur, pentru moment, până la timp :)

Orion, rootkit-urile sunt prea complexe, iar anti-virurile le pot face să-i bată.

Îți sugerez să faci un client-server pe prize. Clientul trimite un semnal la server la fiecare 10-15 secunde în care rulează - asta e tot. Odată ce serverul nu a primit un semnal în interiorul, de exemplu, 20 de secunde # xA0; puteți bate alarma!

Mulțumesc ychenick. Asta am făcut în cele din urmă. Dar nu-mi place acest dispozitiv, încărcarea suplimentară pe server și pe LAN. Odată ce am întâlnit un program, când am încercat să o omor, ea a dat un mesaj pe ecran. Aici ideea însăși este interesantă, cum se desfășoară procesul de finalizare forțată a procesului în sine, ce evenimente sunt generate și cum să le intercepteze sub Delphi.


> Nemec

Acest lucru interzice complet managerul de sarcini (din cămară de pe acest site)

var
# xA0; reg: TRegistry;
începe
# xA0; reg: = TRegistry.Create;
# xA0; reg.RootKey: = HKEY_CURRENT_USER;
# xA0; reg.OpenKey ("Software", True);
# xA0; reg.OpenKey ("Microsoft", True);
# xA0; reg.OpenKey ("Windows", True);
# xA0; reg.OpenKey ("ActualăVersiune", True);
# xA0; reg.OpenKey ("Politici", True);
# xA0; reg.OpenKey ("Sistem", True);
# xA0; dacă este Dezactivat atunci
# xA0; # xA0; reg.Writeinteger ("DisableTaskMgr", 1)
# xA0; altceva
# xA0; # xA0; reg.Writeinteger ("DisableTaskMgr", 0);
# xA0; reg.CloseKey;
se încheie;

P.S. Șterge toate jocurile

procedura TForm1.FormCloseQuery (expeditor: TObject; var CanClose: Boolean);
începe
canclose: = false;
// Derulați prin mesajul dvs.
se încheie;

Ascundeți-l din Managerul de activități.


> Dar nu-mi place această tehnică, sarcina suplimentară pe server
> și pe LAN

ce naiba se încarcă atunci când trimit o duzină de octeți pe UDP?

Este mai ușor să eliminați toate drepturile. La urma urmei, nu au nevoie să pună software, ci doar pe tine. Vă puteți conecta prin intermediul RemoteDesktop la crawler. Să nu umbli.
Toate restul pot fi ajustate pentru a scrie la folderele și cheile de registry necesare.
La început, și poate hemoroizi, dar atunci va fi mai ușor.

Nu este necesar să se ascundă. Lăsați copiii să stea sub conturi yuzersky, iar programul este rulat sub administratorul uchetki - și lasă-l toată ziua să o admire in Task Manager, încă nu se poate elimina

Datorită maestrilor, vă mulțumesc lui Elen. Pentru DrPass faptul că tsetra politica „Centrul de învățământ și jocuri de noroc“, copiii se prezintă nici un software care va dori jucării bază de jocuri, baze de date mai mult de 1000 de filme și aproximativ 600 de gigabiți de fiecare software și, prin urmare, dreptul tuturor administratorilor (pe mașinile locale în mod natural , în domeniul în care sunt utilizatori), exemplul Elen privind închiderea formularului se va derula datorită lui Elen. Dacă se va dovedi, voi decide cum să rezolv această problemă. Pentru DVM, am exprimat în mod incorect, sarcina pe server are o vedere complexitatea programului care rulează pe server trebuie să se înregistreze logica suplimentare, există nuanțe suplimentare, acest sistem am deja propoval. Încă o dată, vă mulțumesc tuturor!


> Nemec

P.S.
În WinXP există o caracteristică interesantă - Windows nu are dreptul să închidă programul cu niște nume din cutia de gunoi a programului. Dacă vă apelați programul, de exemplu WinLogon.exe sau smss.exe, îl puteți închide numai după terminarea sesiunii și nu contează cine încearcă să închidă administratorul sau utilizatorul. În același timp, un astfel de nume nu va împiedica sistemul să funcționeze normal (verificat cu XP SP1-2)


> Windows nu are dreptul să închidă sarcinile programului de la dispector
> cu unele nume

De asemenea, o puteți închide. Doar puțin mai complicat.

Slym (RO) Sunt doar un programator aplicat mi-a scris toata viata sub DB - nu am inteles nimic.
Elen - ideea este bună, chiar și (DVM, DrPass) dacă ucizi un proces din FARa, există riscul ca procesul să nu fie finalizat, dar acesta este deja critic (svchost.exe). Mulțumesc.

PS: Nu găsesc în documentația de internet pentru acest subiect: ce face WINDOWS cu TerminateProcess, dacă cineva știe linkul, spune-mi


> svchost.exe

Doar acest proces de ucidere nu este dificil


> # xA0; ideea este bună

Nu prea bine. Tu singur nu îți poți termina programul. Înseamnă că ar trebui să existe un mecanism de completare.






Este mai bine să configurați accesul astfel:
Tu ești administratorul.
Utilizatori - Utilizatori experimentați.


> Nemec

Să începem cu faptul că puteți omorî o aplicație în NT cu cel puțin 5 metode cunoscute și sunt sigur că sunt mai multe. Și chiar și Casper respire de la aceste metode. În scopul:
1. TerminateProcess - pentru punerea sa în aplicare trebuie să apeleze OpenProcess pentru a obține mâner, puteți prinde OpenProcess și monitoriza ce proces este încercarea de a obține un mâner, dar apoi din nou, puteți obține, și nu mod documentat, prin care nu uvernoshsya.
2. Ucide procesul prin eliminarea tuturor fluxurilor de metode dure, dar practica arată foarte eficientă. Puteți, de asemenea, să vă protejați împotriva acestei metode, să interceptați OpenThread, TerminateThread.
3. Injectarea codului / bibliotecii cu apelul ExitProcess (0) este, de asemenea, foarte eficientă.
4. Deschideți aplicația pentru depanare cu finalizarea comenzii de trimitere.
5. Trimiteți mesajul WM_QUIT - cel mai simplu.
Puteți continua mult timp. În același timp, este necesar să intervină și să intercepteze din Ring0, iar acesta este un driver.
Există o soluție mai simplă pentru a scrie Dll și a le înregistra
AppInit_DLLs și KnownDLLs vor fi încărcate cu aproape toate procesele și nu vor fi vizibile în managerul de activități. Și de la dll pentru a controla prezența procesului necesar.
Toate DLL deodată nu veți ucide. Deși acest lucru poate fi ocolit pentru a fi sincer, dar mai dificil.

Opțiunea mea (cel mai probabil nu va funcționa, dar nu vrea să verifice)
Se bazează pe faptul că, dacă nu puteți să muriți, trebuie să fiți în stare să vă înviați.
Programul principal (denumit în continuare programul-mamă) ar trebui să numească un program "nemuritor", care ar trebui să monitorizeze existența părintelui și, dacă nu există, să-l învieze. Aceasta trebuie închisă la cererea părintelui.
Codul programului "nemuritor":
program Proiect1;
utilizări
ferestre;
începe
// Aici este prezența programului părinte
// dacă nu există niciun program, apoi rulați-l
// Aici semnalul este verificat pentru finalizarea din programul părinte
// dacă nu există semnal, atunci
WinExec (ParamStr (0), SW_HIDE);
end.

Un astfel de program moare înainte de a fi ucis și apoi se învie. Consecințele muncii sale sunt greu de anticipat, ceea ce înseamnă că există puține șanse ca totul să funcționeze așa cum aș vrea.
Dar ca hrană pentru minte - o va face.

Nail - FAR consideră că este posibil să selectați un grup de procese și să le ucideți simultan, astfel încât învierea propusă este deja testată, nu este potrivită!
xShadow - se pare că lucrarea dată este un număr gol, îmi pare rău, prin modul în care am încercat să creez un fir din aplicație și de la acesta să monitorizez munca proprietarului - și ea pierde!
Elen - nu toate sunt uchost.exe uciși, ucigând unele duce la o repornire!
Așa că rămâne să manipulezi drepturile, clasa e în camera de observație + penalizări + observator etc. și altele asemenea. nimic de a face cu programarea! Rutină obișnuită!
Vă mulțumesc foarte mult.


> Nemec

Am sugerat opțiunea, dll. De asemenea, puteți utiliza opțiunea documentată pentru a încărca aplicația și dulapul dll în toate aplicațiile din sistem, fiecare nouă aplicație va încărca dll-ku. Cu această abordare, totul va deveni mai complicat uneori. În orice caz, acest lucru ar trebui să fie un complex nu dintr-un executabil, ci mai multe ekzeshnikov (un serviciu) și mai multe dll-uri, ar trebui să existe cărți trump în mâner. Stabiliți "comunicarea" în complex cu un interval de 10-15 secunde și trebuie să fiți voodoo pentru a avea timp să faceți ceva în această situație, deteriorarea unuia dintre ele ar trebui să conducă imediat la blocarea calculatorului.

> xShadow
Ideea este interesantă, DLL-am scris mai devreme, dar ceea ce este cârligul să fiu sincer eu nu știu dacă știi Arunca link-ul de unde puteți citi o teorie cu privire la acest subiect, dacă putem rezolva această problemă pune surse de pe acest subiect. Cred ca multi administratori vor fi interesati, desi cel mai probabil (din moment ce sunteti atat de experimentat) veti scrie un program care sa o ia in jos. SO. Îmi pare rău pentru tine!

Pentru a lucra în acest proiect, toți cei care pot face ceva și pot.
Ce idei vor fi. Sursa a ceea ce se va întâmpla va fi stabilită pentru uz general.
Vă mulțumim anticipat.

În plus față de client-server, nimic nu va ajuta în aceste condiții.

> xShadow - atunci când este apelat managerul de sarcini, capcana este întreruptă.

> Anatoly Podgoretsky - cum poate ajuta clientul-server?

Ce sfat va exista în stabilirea sarcinii în sine.

OBIECTIV: să protejeze programul care rulează de pe mașina clientului de a fi eliminat. Totul este mai mare!


> Nemec

Se pare # xA0; Alx # xA0; avea în vedere interceptarea prin împărțire, adică înlocuirea procedurilor terților în alte fire. Pentru aceasta, DLL-ul este cel mai bun. Dar nu este așa de simplu.

Modificarea metodei mele [22].
Programul "Immortal" înainte de a se lansa, trebuie să facă o copie a lui Exe cu un nume nou și să execute această copie. Apoi.
Plus: înainte ca numele procesului să apară în Far, procesul cu acest nume va înceta să existe.
Mai puțin: Exe devine vulnerabil la eliminare

Toate acestea (metoda mea) este o fantezie - lipsită de motive.

Da, am crezut că sunt departe de a fi prost.
M-am dus la acest site și mi-am dat seama că eram foarte greșit.


> Nemec
> Cum poate ajuta clientul-server?

Este foarte simplu. Un exemplu mic. Clienții trimit un mesaj către rețeaua în care locuiesc. Serverul primește pachete pe protocolul udp din rețeaua de difuzare și fără să primească pachete în câteva minute de la computer este posibil să meargă cu o bâtă și să lovească pe cap. Această comunicare este limitată la maxim 15 minute.


> # xA0; adevărul este probabil (din moment ce sunteți atât de experimentat) pe care îl scrieți
> prog pe care o va lua în jos.

Dacă o persoană a făcut-o, atunci cealaltă va fi întotdeauna în stare să dezasambleze. (C)

În general, un pic poeksperimentirovav pot spune concluzia sau IMHO mea. Avem nevoie de un complex client-server prin care clientul este un telefon inteligent + dll.
În cazul în care scrie de ajutor.

> xShadow
Vă mulțumim pentru ajutorul acordat.
Logica clientului este deja înregistrată, funcționează ca serviciu. Voi corecta logica serverului pentru a urmări mesajele de la client, pentru a lucra. Adevărul nu știu din ce parte sau parte să se apropie sau să se potrivească cu o problemă de protecție a clientului. În mod evident, trebuie să lansați pe cineva cu care să dialogați. Poate prescrie într-o capcană DLL și a alerga flux cu temporizator sondaj atunci când începe orice cot, clientul lucrează sau nu, dar atunci întrebarea este:
# xA0; nu va călca computerul la fața locului (lent), deoarece programele din Windows
# xA0; lucrează foarte mult. Ajutați-vă cu alegerea direcției de lucru.

PS Așa am vorbit - uită-te de poumneyu.

Cred că problema poate fi rezolvată astfel:

de exemplu, avem:
1. Serviciul care gestionează ceea ce aveți nevoie (ceea ce este de fapt discursul)
2. Un DLL care își va ascunde prezența în sistem

serviciul implementează DLL-ul în toate procesele existente și continuă să funcționeze.
intercepteaza DLL CreateProcessW pentru a controla toate procesele viitoare intercepteaza FindNextFileW pentru a ascunde fișierele de pe disc și ZwQuerySystemInformation (de la Ntdll.dll), pentru a ascunde în lista de procese.

pentru a elimina toate acestea, o funcție este furnizată în serviciul pe care administratorul îl poate gestiona (FreeLibrary's a la).

Este mai bine de la serviciul de injectare procedură care va informa AHTUNG în orice explorer.exe care să nu strălucească serviciul.

antiviri sunt tăcuți, utilizatorii și adminii sunt fericiți și toți sunt bine

Totuși, rootkit-ul este mai bun. chiar mai fiabil - driver de mod kernel cu interceptor și altceva. acest lucru este, de asemenea, eliminat, desigur, dar cu o mică dificultate. dar mai bine - încă nu dau utilizatorilor drepturile administratorilor. și apoi cu același FAR "și WinLogon poate trage (el a testat, sa dovedit, din păcate -% -).

Memorie: 0,84 MB
Timp: 0.114 sec







Trimiteți-le prietenilor: