![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Убийство процесса
Out © (2006-11-16 09:24:00)Здравствуйте! Может сможет подсказать кто решение такой вот проблемы: надо что бы при попытке убить процесс через диспетчер задач (как крайний случай) или любым другим способом программа писала время убийства в лог файл.
Вопрос: Как отловить момент уничтожения процесса?
user51 (2006-11-17 11:45:00) [1]у себя я сделал сервис(сервис назвал так чтобы юзер думал что это служебная программа типа igfxsvrc.exe) который считает время. он в свою очередь запускает из себя программу которая отображает количество бабок и соедененн с ней через сокет. юзера сдуру убивают эту прогу. Сервис проверяет наличие этой проги путем поиска окон, если ее нет то запускает заново. В свою очередь эта прога проверяет запущен сервис если нет то перезапускает его. Процессы можно также убивать из фара и тотала. А если юзера работают без прав администратора то сервис они никак не остановят.
BiN (2006-11-16 20:58:00) [2]
> Чапаев © (16.11.06 19:26) [22]
А я уже собрался ему про настройку SACL-а процесса рассказывать...
Чапаев (2006-11-16 19:26:00) [3]> [21] BiN © (16.11.06 17:14)
Э... [10]. Человеку надо отслеживать пребывание юзер за компом. Единственное, что тут есть смысл программировать -- чтение системных логов...
BiN (2006-11-16 17:14:00) [4]
> Чапаев © (16.11.06 13:00) [20]
>
> Да автор в очередной раз аудит изобретает... Хотя настройка
> аудита -- дело админское, а не программистское...
В данном случае администратору без программиста будет очень непросто настроить аудит доступа к процессу.
Чапаев (2006-11-16 13:00:00) [5]Да автор в очередной раз аудит изобретает... Хотя настройка аудита -- дело админское, а не программистское...
Elen (2006-11-16 12:58:00) [6]
> Чапаев
О-о-о. Вот отсюда автору и нужно было начинать свой вопрос, типа - "Моя прога делает...! Что делать если ей приделают коньки и она их отбросит?"
Чапаев (2006-11-16 12:49:00) [7]> [17] Elen © (16.11.06 12:14)
Не, [4] говорит о некоем "перехвате из службы". А я бы писал службу, которая все нужные действия выполняет без всяких лишних программ...
Elen (2006-11-16 12:14:00) [8]
> Не лучше ли простенький сервис сделать?
Дык я и не спорю. [4]. но и [14] тоже я применяю с успехом
Чапаев (2006-11-16 12:06:00) [9]> [15] Чапаев © (16.11.06 12:05)
он же и логоны отслеживать может...
Чапаев (2006-11-16 12:05:00) [10]> [10] Out © (16.11.06 10:55)
Такая программа работает даже у прошаренного полшьзователя. Аудитом бородатые сибирские хакеры называют сие. И не надо изобретать велосипед.
> ее диспетчер убрать позволит только админу.
Не лучше ли простенький сервис сделать?
Elen (2006-11-16 11:34:00) [11]Запусти свою прогу этой функцией : Укажи там екзешник и ее диспетчер убрать позволит только админу.
function CreateNoKillProcess(EXEprog:pchar):Boolean;
const
ACL_REVISION = 2;
begin
result:=false;
// Èíèöèàëèçàöèÿ ñòðóêòóðû ACL (Access Control List)
//  ñëó÷àå óäà÷è ó íàñ áóäåò ACL, íå ñîäåðæàùàÿ íè îäíîãî ýëåìåíòà
// çàùèòû, ò.å. çàïðåùàþùàÿ äîñòóï ê îáúåêòó âñåì.
if not InitializeAcl(ACL,SizeOf(_ACL),ACL_REVISION)
then; //ShowMessage('InitializeAcl'+#13#10+SysErrorMessage(GetLastError));
// Ïðîâåðÿåì ACL íà êîððåêòíîñòü (íå îáÿçàòåëüíî)
if not IsValidAcl(ACL) then exit;
// Èíèöèàëèçàöèÿ ñòðóêòóðû SD (Security Descriptor)
// Ïîñëå èíèöèàëèçàöèè SD áóäåò ðàçðåøàòü äîñòóï ê îáúåêòó äëÿ âñåõ
if not InitializeSecurityDescriptor(@SD,SECURITY_DESCRIPTOR_REVISION)
then ;//ShowMessage('InitializeSecurityDescriptor'+#13#10+SysErrorMessage(GetLastError));
// Äîáàâëÿåì ê îïèñàòåëþ áåçîïàñíîñòè íàø ACL
// Òåïåðü SD çàïðåùàåò äîñòóï âñåì
if not SetSecurityDescriptorDacl(@SD,true,@ACl,true)
then ;//ShowMessage('SetSecurityDescriptorDacl'+#13#10+SysErrorMessage(GetLastError));
// Îïÿòü ïðîâåðêà íà êîððåêòíîñòü ñòðóêòóðû
if not IsValidSecurityDescriptor(@SD) then exit;
// Çàïîëíÿåì ñòðóêòóðó SA (Security Attributes)
ZeroMemory(@sa,SizeOf(sa));
sa.nLength:=SizeOf(sa);
sa.bInheritHandle:=false;
// Ññûëêà íà íàø äåñêðèïòîð áåçîïàñíîñòè
sa.lpSecurityDescriptor:=@SD;
// Íó è íàêîíåö, ñîçäàåì íîâûé ïðîöåññ ñ íîâûìè àòðèáóòàìè áåçîïàñíîñòè
ZeroMemory(@si,SizeOf(si));
si.cb:=SizeOf(si);
if not CreateProcess(nil,EXEProg,@sa,@sa,false,0,nil,nil,si,pinfo)
then ;//ShowMessage('CreateProcess'+#13#10+SysErrorMessage(GetLastError));
result:=true
end;
//**************************************************************************
Out (2006-11-16 11:24:00) [12]
> Так тебе нужно запретить убивать из диспетчера
Я бы рад, но... как ?!
Elen (2006-11-16 11:15:00) [13]
> Out
Так тебе нужно запретить убивать из диспетчера
Сергей М. (2006-11-16 10:59:00) [14]
> Out © (16.11.06 10:55) [10]
Представь себе - ты идешь по улице, и тебе неожиданно на голову падает кирпич.
Кирдык, как говорится, подкрался незаметно)
Вопрос на засыпку - сможешь ли ты ПОСЛЕ наступления кирдыка "родных и близких известить, что сын ваш больше не вернется" ?)
Out (2006-11-16 10:55:00) [15]Я наверное неправильно выразился... )
Работает программа, которая отслеживает время работы пользователя за компом. И если вдруг находится прошаренный пользователь способный прибить процесс этой программы через диспетчер задач, то программа, прежде чем покинуть бренную память компа, дожна написать об этом в лог-файл
Сергей М. (2006-11-16 10:32:00) [16]
> Как отловить момент уничтожения процесса?
Точно так же как момент создания процесса - разницы тут никакой нет.
см.
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1163174628&n=5
Орион (2006-11-16 10:19:00) [17]> [7] Elen © (16.11.06 10:17)
угу, вот только интересно, что же там за программа, ради которой нужно так извращаться :)
Elen (2006-11-16 10:17:00) [18]
> Орион
Ну а других вариантов не знаю... кроме перехвата
Орион (2006-11-16 10:15:00) [19]> [5] Elen © (16.11.06 10:11)
бедная система...))
Elen (2006-11-16 10:11:00) [20]
> программа писала время убийства в лог файл
-+1 сек. будет достаточно? если да то в таймере СнапШот процессов делать и сверять