Delete system dll | Win 7 x86

Тема в разделе "WASM.NT.KERNEL", создана пользователем RW, 30 июн 2010.

  1. RW

    RW New Member

    Публикаций:
    0
    Регистрация:
    12 июн 2010
    Сообщения:
    9
    Пытаюсь удалить системную dll из system32 в windows 7 x86, использую ZwDeleteFile, в ответ - болт. При попытке сделать это из xp live cd получаю тоже самое. Подскажите в чем проблема. Спасибо.
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Чо, так и пишет - STATUS_BOLT ?
     
  3. RW

    RW New Member

    Публикаций:
    0
    Регистрация:
    12 июн 2010
    Сообщения:
    9
    STATUS_ACCESS_DENIED
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    DACL посмотри на файл. Начиная с Vista удаление и модификация некоторых системных файлов разрешена только коду, выполняемому от имени TrustedInstaller. Т.е. по факту даже учётка админа не поможет удалить такой файл. Сделано грамотно, кстати, как раз для установщиков типа службы Windows Installer. В твоём случае достаточно будет поменять/добавить запись в DACL для того пользователя, под которым ты будешь удалять файл (или для всех пользователей, но я бы так делать не стал).
     
  5. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Код (Text):
    1. bool GetOwnership (LPCSTR p)
    2. {
    3.          HANDLE hToken=NULL;
    4.          PTOKEN_USER ptuUser=NULL;
    5.          DWORD dwSize=NULL;
    6.          SECURITY_DESCRIPTOR sdSID;
    7.          int bWasEnabled;
    8.          bool ret1=false,ret2=false;
    9.  
    10.  
    11.          RtlAdjustPrivilege(SE_TAKE_OWNERSHIP_PRIVILEGE,TRUE,FALSE,(PBOOLEAN)& bWasEnabled);
    12.          OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken);
    13.          ptuUser=(PTOKEN_USER)malloc(0x200);
    14.  
    15.          GetTokenInformation(hToken,(TOKEN_INFORMATION_CLASS)1,ptuUser,0x200,& dwSize);
    16.  
    17.          InitializeSecurityDescriptor (&sdSID,SECURITY_DESCRIPTOR_REVISION);
    18.          SetSecurityDescriptorOwner (&sdSID,ptuUser->User.Sid,false);
    19.          CloseHandle(hToken);
    20.          ret1=SetFileSecurityA(p,OWNER_SECURITY_INFORMATION,&sdSID);
    21.          if (!ret1) return false;
    22.          ret2=SetFileSecurityA(p,DACL_SECURITY_INFORMATION,&sdSID);
    23.          if (!ret2) return false;
    24.          return true;
    25. }
     
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    punxer
    Владельца файла менять не обязательно.
     
  7. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    x64
    Прав на изменение DACL'а нет => овладевание необходимо.
     
  8. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Sol_Ksacap
    Да, верно, это я погорячился.
     
  9. RW

    RW New Member

    Публикаций:
    0
    Регистрация:
    12 июн 2010
    Сообщения:
    9
    punxer
    Спасибо, работает. =) Прийдется юзать юзермод.
     
  10. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    То же самое без проблем делается и из ядра, если необходимо.