Конференция "WinAPI" » Как запустить процесс с привилегиями System
 
  • SCL © (14.12.08 10:16) [0]
    Как запустить процесс от пользователя System и с привилегиями Системы (как некоторые антивирусы)
  • Игорь Шевченко © (14.12.08 13:05) [1]
    1. Процесс всегда можно увидеть
    2. Процесс всегда можно убить
    3. Систему безопасности в Windows разрабатывали умные люди.
  • Leonid Troyanovsky © (14.12.08 16:31) [2]

    > SCL ©   (14.12.08 10:16)  

    > Как запустить процесс от пользователя System

    Ну, например, через Schedule, если оно от лица System,
    то и все им пущеннные будут таковыми.

    --
    Regards, LVT.
  • МистерТ (15.12.08 16:53) [3]
    Это называется системная служба или сервис.
    Но права там далеко не системные.
  • Eraser © (15.12.08 18:02) [4]
    > Как запустить процесс с привилегиями System

    вызвать CreateProcess из приложения с правами и привилегиями System.
  • Fighter (03.01.09 04:48) [5]
    Гдето на работе валялся асемблерный исходник который такое делат. доберусь до работы и если вспомню напишу.  Вспоминается что там используется функция GetKernelObjectSecurity которая получает SecurityDescriptor. потом следует танец с бубном и CreateProcess
  • apic (29.01.09 12:20) [6]
    Fighter, ждем тебя! Мне тоже интересно...
  • Eraser © (29.01.09 16:54) [7]
    > [6] apic   (29.01.09 12:20)

    можешь не ждать, а купить книгу Руссиновича, там все описано и даже готовое решение есть http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
  • user00 (10.04.09 19:27) [8]
    Запустить файл как сервис
  • имя (11.04.09 06:39) [9]
    Удалено модератором
  • Игорь © (12.04.09 10:33) [10]
    Вот держи убогую хрень написанную мной

    RunAsSystem под 2000, 2003, XP, Vista

    http://www.onlinedisk.ru/file/118954/
  • Riply © (29.04.09 16:23) [11]
    > [10] Игорь ©   (12.04.09 10:33)
    > Вот держи убогую хрень написанную мной

    Ну не совсем уж и убогая :)

    Смотрела бегло, но сразу обратила внимание, на то что ты меняешь секюрити у winlogon.
    Конечно это никуда не годится, надо искать другой путь.
    (Вариант временно изменить и потом вернуть обратно тож плох).
    Так что, если конечно интерес не пропал, дерзайте дальше :)
    P.S.
    Есть там еще ошибки, но они меркнут в сравнении с описанной выше :)
  • Игорь © (29.04.09 17:13) [12]
    Вот доделанный вариант, PACL winlogon'у назад возвращаеться

    function _RunAsSystem_1(ApplicationName: string; CommandLine: string): Boolean;
    var
     SI: STARTUPINFO;
     PI: PROCESS_INFORMATION;
     PSD: PPSecurity_Descriptor;
     ppDacl: PACL;
     hProcess, hToken: Cardinal;
    begin
     Result:= False;
     hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION, False, GetWinlogonPID);
     if hProcess <> 0 then
     begin
       try
         OpenProcessToken(hProcess, MAXIMUM_ALLOWED, hToken);
         if hToken <> 0 then
         begin
           if GetSecurityInfo(hToken, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, @ppDacl, nil, PSD) = ERROR_SUCCESS then
           begin
             if SetSecurityInfo(hToken, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, nil, nil) = ERROR_SUCCESS then
             begin
               CloseHandle(hToken);
               hToken:= 0;
               OpenProcessToken(hProcess, MAXIMUM_ALLOWED, hToken);
               if hToken <> 0 then
               begin
                 try
                   if ImpersonateLoggedOnUser(hToken) then
                   begin
                     ZeroMemory(@SI, SizeOf(SI));
                     SI.cb:= SizeOf(SI);
                     if CreateProcessAsUser(hToken, PChar(ApplicationName), PChar(CommandLine), nil, nil, False, CREATE_DEFAULT_ERROR_MODE, nil, nil, SI, PI) then
                       Result:= True;
                     RevertToSelf;
                   end;
                   SetSecurityInfo(hToken, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, ppDacl, nil);
                 finally
                   CloseHandle(hToken);
                 end;
               end;
             end;
             LocalFree(DWORD(ppDacl));
             LocalFree(DWORD(PSD));
           end;
         end;
       finally
         CloseHandle(hProcess);
       end;
     end;
    end;

  • trix (13.09.09 00:45) [13]
    Запустить как сервис. =)
  • СовестьДМ © (13.09.09 02:19) [14]
    Удалено модератором
 
Конференция "WinAPI" » Как запустить процесс с привилегиями System
Есть новые Нет новых   [134434   +28][b:0][p:0.002]