Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2013, 14:33   #1
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию Как запретить убивать процесс через диспетчер задач?

У касперского и Eset такая защита.
Как такое реализовать в Delphi? Если есть статьи, буду рад почитать

Последний раз редактировалось bakanaev; 23.05.2013 в 18:16.
bakanaev вне форума Ответить с цитированием
Старый 23.05.2013, 15:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как вариант:http://www.programmersforum.ru/showt...Process&page=2
Иначе драйвер пиши.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.05.2013, 15:44   #3
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Как вариант:http://www.programmersforum.ru/showt...Process&page=2
Иначе драйвер пиши.
Спасибо за ответ! Как всегда все по делу)
Если не сложно, пару ссылок на тему драйверов которые позволят не убивать через диспетчер. Просто для ознакомления
bakanaev вне форума Ответить с цитированием
Старый 23.05.2013, 16:04   #4
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Цитата:
Сообщение от bakanaev Посмотреть сообщение
Спасибо за ответ! Как всегда все по делу)
Если не сложно, пару ссылок на тему драйверов которые позволят не убивать через диспетчер. Просто для ознакомления
Надо писать программу, уровня ядра, т.е. с правами системы (собственно анивирусы так и работают, именно для этого и надо перезапускать компьютер после установки/удаления, чтобы при загрузке ядра файлы запускались/очищались).
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 23.05.2013, 16:57   #5
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Stilet, попробовал ваш код
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
   function CreateNoKillProcess(EXEProg:pchar):boolean;
const
 ACL_REVISION = 2;
var
 ACL      : _ACL;
 SD       : _SECURITY_DESCRIPTOR;
 SA       : _SECURITY_ATTRIBUTES;
 si       : _STARTUPINFOA;
 pinfo       : PROCESS_INFORMATION;

 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;
procedure TForm1.FormCreate(Sender: TObject);
begin
CreateNoKillProcess('c:\windows\notepad.exe');
end;

end.
Вылетает с
Цитата:
Access violation at address 7C82F284 in module 'kernel32.dll'. Write of address 005A8344.
Если обвязать через try except end;
Код:
try
  CreateProcess(nil,EXEProg,@sa,@sa,false,0,nil,nil,si,pinfo)
  except
    ShowMessage('CreateProcess'+#13#10+SysErrorMessage(GetLastError));
  end;
Получаем
Цитата:
CreateProcess
Операция успешно завершена
Прошу вашей помощи
bakanaev вне форума Ответить с цитированием
Старый 23.05.2013, 19:51   #6
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

bakanaev, я точно не уверен, но всё же сравните параметры нужные для CreateProcess и те, что вы ей передаёте.

Можно сделать, два процесса, которые будут открывать друг друга в случае закрытия. Но это криво, и не подходит для обычных программ.

Последний раз редактировалось Kix.IV; 23.05.2013 в 19:55.
Kix.IV вне форума Ответить с цитированием
Старый 23.05.2013, 21:37   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
пару ссылок на тему драйверов
Ничем не могу помочь, про драйвера слишком сакрально. Тут нужно по-любому начинать с основ этой "кухни".
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.07.2013, 13:28   #8
Stertor
Заблокирован
 
Регистрация: 17.07.2013
Сообщений: 104
По умолчанию

Не нужен драйвер. Запретить убивать процесс можно юзермодным перехватом ZwOpenProcess/zwTerminateProcess, естественно из библиотеки. Поищите в сети исходники ms-rem, как раз на делфи.
Stertor вне форума Ответить с цитированием
Старый 18.07.2013, 14:15   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Пользуйтесь библиотекой EasyHook.
Там вам и уровень ядра и что угодно в системе можно похукать.
Человек_Борща вне форума Ответить с цитированием
Старый 19.07.2013, 14:12   #10
Stertor
Заблокирован
 
Регистрация: 17.07.2013
Сообщений: 104
По умолчанию

хватит страдать ерундой:
http://ms-rem.narod.ru/hook/ApiHook1/apihook.htm
Stertor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заблокировать пуск, Диспетчер задач т.д? Rebel123 Общие вопросы Delphi 17 04.12.2011 18:13
Как скрыть процесс из диспетчера задач? detalik Общие вопросы Delphi 13 21.10.2011 23:51
Запретить завершение сервиса(даже через диспетчер) Alter Win Api 13 12.08.2009 00:41
Как сделать диспетчер задач? dagma Свободное общение 3 16.01.2009 18:35
Как вкючить Диспетчер задач Windows Ronni10 Windows 12 22.01.2008 18:54