Почему не понижается уровень целостности у файла?

Тема в разделе "WASM.BEGINNERS", создана пользователем 2Hard2Forget, 27 сен 2019.

Метки:
  1. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    Я хочу запустить файл с низким уровнем целостности , который обычно имеет средний уровень целостности. То есть понизить уровень целостности у файла
    Код (C++):
    1. #include <Windows.h>
    2. // one can also use Winternl.h if needed
    3. //#include <Winternl.h> // for UNICODE_STRING and SYSTEM_INFORMATION_CLASS
    4. #include <stdio.h>
    5. #include <tchar.h>
    6. #define LOW_INTEGRITY_SDDL_SACL_W L"S:(ML;;NW;;;LW)"
    7. #include<list>
    8. #include<iterator>
    9. #include<iostream>
    10. #include<windows.h>
    11. #include<stdio.h>
    12. #include <tlhelp32.h>
    13. #include <Psapi.h>
    14. #include<lm.h>
    15. #include<aclapi.h>
    16. #include<sddl.h>
    17.  
    18. void SetLowLabelToFile()
    19. {
    20.     // The LABEL_SECURITY_INFORMATION SDDL SACL to be set for low integrity
    21.     DWORD dwErr = ERROR_SUCCESS;
    22.     PSECURITY_DESCRIPTOR pSD = NULL;
    23.  
    24.     PACL pSacl = NULL; // not allocated
    25.     BOOL fSaclPresent = FALSE;
    26.     BOOL fSaclDefaulted = FALSE;
    27.     LPWSTR *pwszFileName = NULL;
    28.     const char* temp= "C:\\Users\\Elvin\\Documents\\testIntegrity\\jr.txt";
    29.     const char* msg = "C:\\Users\\Elvin\\Documents\\testIntegrity\\jr.txt";
    30.     int len = strlen(msg) + 1;
    31.     wchar_t *w_msg = new wchar_t[len];
    32.     memset(w_msg, 0, len);
    33.     MultiByteToWideChar(CP_ACP, NULL, msg, -1, w_msg, len);
    34.  
    35.     int k = 0;
    36.     if (ConvertStringSecurityDescriptorToSecurityDescriptorW(LOW_INTEGRITY_SDDL_SACL_W, SDDL_REVISION_1, &pSD, NULL))
    37.     {
    38.         k = GetLastError();
    39.         if (GetSecurityDescriptorSacl(pSD, &fSaclPresent, &pSacl,
    40.             &fSaclDefaulted))
    41.         {
    42.             k = GetLastError();
    43.             // Note that psidOwner, psidGroup, and pDacl are
    44.             // all NULL and set the new LABEL_SECURITY_INFORMATION
    45.             dwErr = SetNamedSecurityInfoW(w_msg,
    46.                 SE_FILE_OBJECT, LABEL_SECURITY_INFORMATION,
    47.                 NULL, NULL, NULL, pSacl);
    48.              k = GetLastError();
    49.         }
    50.         LocalFree(pSD);
    51.     }
    52. }
    53.  
    54. int main()
    55. {
    56.     SetLowLabelToFile();
    57.  
    58.     return 0;
    59. }
    Но проблема в том, что уровень не понижается(проверил в Process Explorer).
    То есть я хочу,чтобы после того, как отработал код ниже,я запустил этот же txt файл и его уровень целостности уменьшился до Low(обычный запуск - Medium).
    Первые два GetLastError возвращают 0, но последний выкидывает ошибку 1008, которая означает , что "была сделана попытка сослаться на токен, который не существует",
    но путь до файла валидный, поэтому причина ошибки не понятна, можете помочь исправить?
     
  2. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Если сделать через icacls.exe путь к файлу /setintegritylevel:L
    ? Т.е. запустить через WinExec вот эту прогу
    Или нужно обязательно программно установить атрибуты?
    --- Сообщение объединено, 28 сен 2019 ---
    И да, почему изначально не задавать путь в юникод-формате? Зачем эти пляски с конвертированием char ?
     
  3. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    К сожалению , мне нужно сделать это программно ,поэтому консольная icacls не подойдет. А по поводу char- просто ещё не разобрался с widechar
     
  4. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    WCHAR * temp= L"C:\\Users\\Elvin\\Documents\\testIntegrity\\jr.txt";
    или LPWSTR x = L"тут путь".

    Так то хз, я не понимаю сути вашей задачи. Зачем устанавливать на файл низкий low il ? Блокнот (или чем вы будете открывать) работает, обычно ,с медиум и ясное дело, откроет файл.
     
  5. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    Вопрос решился