Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Критический системный процесс

423
21 августа 2002 года
Quasi
98 / / 20.01.2000
Как сделать своему приложению такой приоритет, что бы диспетчер задач не смог его завершить, как, например, процесс LSASS.EXE (Windows XP build 2600)?
483
23 августа 2002 года
DED_MOROZ
67 / / 20.03.2000
Пользовательское приложение можно убить всегда. LSASS не убивается потому что это СЕРВИС(или служба). Поэтому ищи про написание сервисов, но скажу сразу, что окошки(формы) сервиса не видны, потомы что сервисы выполняются на другом Desktop-е.
Аноним
LSASS не убивается не потому, что это служба, а потому что это системный процесс. Юзер может остановить службу, запущенную с правами юзера, но службу, запущенную с правами системы, может остановить только система.
423
26 августа 2002 года
Quasi
98 / / 20.01.2000
Как я понимаю, мне ни как не запустить процесс с таким приоритетом, т.к. все системные службы (сервисы)запускаются ещё до логинивания юзера.
А кто-нить тогда знает как спрятать процесс от димпетчера задач WinNT, маскировка типа krnl32.exe не канает, вроде это нереально:((
54K
21 октября 2010 года
Stoneman
6 / / 28.02.2010
Поднимаю тему, так как возникла схожая задача. Необходимо сделать защищенный, т.е. не дать возможность грохнуть его из диспетчера. Подскажите куда копать?
7
21 октября 2010 года
@pixo $oft
3.4K / / 20.09.2006
Переименовать процесс в соответствии с одним из системных,логично же
303
21 октября 2010 года
makbeth
1.0K / / 25.11.2004
Ага. И запустить из под SYSTEM.

А вообще, система не даст прибить только критический процесс, прибив который, придет гарантированный каюк системе. В этом направлении и надо работать :)
54K
21 октября 2010 года
Stoneman
6 / / 28.02.2010
Цитата: makbeth
Ага. И запустить из под SYSTEM.
А вообще, система не даст прибить только критический процесс, прибив который, придет гарантированный каюк системе. В этом направлении и надо работать :)



Есть мысли как создать такой процесс/сервис? Или где можно про это прочитать?

8.2K
21 октября 2010 года
bagie2
299 / / 26.10.2008
Цитата:
Есть мысли как создать такой процесс/сервис? Или где можно про это прочитать?



Код:
format PE GUI 5.0

include 'win32wx.inc'


.code
        entry $

        xor eax,eax
        push eax
        invoke RtlAdjustPrivilege,20,1,0,esp  ; RtlAdjustPrivilege(SE_DEBUG_PRIVILEGE,TRUE,FALSE,OldPrivilege)
        ;cmp eax,0xC0000061 ; STATUS_PRIVILEGE_NOT_HELD
        ;je @f

        mov eax,esp
        mov dword [eax],TRUE
        invoke NtSetInformationProcess,-1,29,eax,4  ; NtSetInformationProcess(GetCurrentProcess(),ProcessBreakOnTermination,TRUE,4)
        pop eax

        ; BSOD...
        invoke NtTerminateProcess,-1,0 ; NtTerminateProcess(GetCurrentProcess(),0)

.data

        data import

                library ntdll,'NTDLL.DLL'

                import ntdll,\
                       RtlAdjustPrivilege,'RtlAdjustPrivilege',\
                       NtSetInformationProcess,'NtSetInformationProcess',\
                       NtTerminateProcess,'NtTerminateProcess'

        end data


если этот процесс прибить то система вывалится в BSOD со статусом 0xF4: CRITICAL_OBJECT_TERMINATION

ах, да, дельфи
Код:
program criticalprocess;

uses
  Windows, SysUtils;

const
  ntdll = 'NTDLL.DLL';

type
  NTSTATUS = ULONG;
  HANDLE = ULONG;
  PROCESS_INFORMATION_CLASS = ULONG;

const
  STATUS_SUCCESS            = $00000000;
  STATUS_PRIVILEGE_NOT_HELD = $C0000061;

const
  SE_DEBUG_PRIVILEGE = 20;

const
  ProcessBreakOnTermination = 29;
               
function RtlAdjustPrivilege(Privilege: ULONG; Enable: BOOL;
  CurrentThread: BOOL; out OldPrivilege: BOOL): NTSTATUS; stdcall; external ntdll;
function NtSetInformationProcess(ProcessHandle: HANDLE;
  ProcessInformationClass: PROCESS_INFORMATION_CLASS;
  ProcessInformation: Pointer; ProcessInformationLength: ULONG): NTSTATUS; stdcall; external ntdll;

var
  Status: NTSTATUS;
  Enabled: BOOL;
begin

  Status := RtlAdjustPrivilege(SE_DEBUG_PRIVILEGE, True, False, Enabled);

  case (Status) of

    STATUS_SUCCESS:
    begin
      Enabled := True;
      NtSetInformationProcess(HANDLE(-1),
        ProcessBreakOnTermination,  @Enabled, SizeOf(Enabled));
    end;

    STATUS_PRIVILEGE_NOT_HELD:
    begin
      MessageBox(0, 'Debug privilege needed.', nil, MB_ICONERROR);
      Exit;
    end;

  else
    MessageBoxW(0, PWideChar(WideString(Format('NTSTATUS: 0x%.8X', [Status]))), nil, MB_ICONERROR);
    Exit;
  end;

  MessageBoxW(0, 'Do not terminate!', 'Warning!', MB_ICONWARNING);
end.
303
22 октября 2010 года
makbeth
1.0K / / 25.11.2004
Эй-эй... Я бы на месте пользователей такой программы, отрывал бы руки автору по самую ж... что там у него вместо головы :/
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог