как узнать в каком уровне превилегий работает программа?

Тема в разделе "WASM.ASSEMBLER", создана пользователем asm0day01, 2 сен 2024.

  1. asm0day01

    asm0day01 Member

    Публикаций:
    0
    Регистрация:
    7 янв 2020
    Сообщения:
    132
  2. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    56
    Прочитать sid'ы Владельца и Группы.
     
  3. asm0day01

    asm0day01 Member

    Публикаций:
    0
    Регистрация:
    7 янв 2020
    Сообщения:
    132
    программно
     
  4. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    56
    GetSecurityInfo function (aclapi.h) - Win32 apps | Microsoft Learn
    ConvertSecurityDescriptorToStringSecurityDescriptorW function (sddl.h) - Win32 apps | Microsoft Learn
    SDDL for Device Objects - Windows drivers | Microsoft Learn (сравнить через strcmp\wcscmp)

    Код (C):
    1.  
    2. GetSecurityInfo(handle, SE_KERNEL_OBJECT, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION,
    3. &pSidOwner, &pSidGroup, nullptr, nullptr, &pSecurityDescriptor);
    4.  
    5. ConvertSecurityDescriptorToStringSecurityDescriptorW(pSecurityDescriptor, SDDL_REVISION_1,
    6. OWNER_SECURITY_INFORMATION, &StringSecurityDescriptorOwner, nullptr);
    7.  
    8. ConvertSecurityDescriptorToStringSecurityDescriptorW(pSecurityDescriptor, SDDL_REVISION_1,
    9. GROUP_SECURITY_INFORMATION, &StringSecurityDescriptorGroup, nullptr);
    10.  
    11. if (wcscmp(StringSecurityDescriptorOwner, TEXT("O:BA")) == 0) {}
    12. if (wcscmp(StringSecurityDescriptorOwner, TEXT("O:SY")) == 0) {}
    13.  
    14. if (wcscmp(StringSecurityDescriptorGroup, TEXT("G:BA")) == 0) {}
    15. if (wcscmp(StringSecurityDescriptorGroup, TEXT("G:SY")) == 0) {}
     
    Последнее редактирование: 4 сен 2024
  5. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    196
    IsUserAnAdmin() из Shell32.dll (без параметров) возвращает True, если запуск под админом, иначе False. Не смотря на то, что мокрые считают её устаревшей, функция благополучно дожила от XP до Win10.
     
    Mikl___ нравится это.
  6. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Там же под капотом все тот же CheckTokenMemberShip , по факту это просто обертка.

    ТС как всегда, год не ходил на васм - все по прежнему. Открыл бы для себя хотя бы чат_гпт или это бот и пишет, я хз.
     
    Mikl___ и mantissa нравится это.
  7. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    302
    примерно вот так

    Код (ASM):
    1. .386
    2. .model flat, stdcall
    3. option casemap :none
    4. include \masm32\include\windows.inc
    5. include \masm32\include\kernel32.inc
    6. include \masm32\include\user32.inc
    7. include \masm32\include\advapi32.inc
    8. includelib \masm32\lib\kernel32.lib
    9. includelib \masm32\lib\user32.lib
    10. includelib \masm32\lib\advapi32.lib
    11.  
    12. TokenIntegrityLevel equ 25
    13.  
    14. SID_AND_ATTRIBUTES STRUCT
    15.     Sid DWORD ?
    16.     Attributes DWORD ?
    17. SID_AND_ATTRIBUTES ENDS
    18.  
    19. .data
    20.     msgFormat db "Process Integrity Level: %s", 0
    21.     caption db "Process Privileges", 0
    22.     debugMsgStart db "Starting CheckIntegrityLevel", 0
    23.     debugMsgOpenToken db "OpenProcessToken result: %d", 0
    24.     debugMsgGetInfo db "GetTokenInformation result: %d", 0
    25.     debugMsgIntegrityLevel db "Integrity Level: %d", 0
    26.     debugBuffer db 256 dup(0)
    27.     resultBuffer db 256 dup(0)
    28.  
    29.     strSystem db "System", 0
    30.     strHigh db "High", 0
    31.     strMedium db "Medium", 0
    32.     strLow db "Low", 0
    33.     strUnknown db "Unknown", 0
    34.  
    35. .code
    36.  
    37. CheckIntegrityLevel proc
    38.     LOCAL hToken:HANDLE
    39.     LOCAL tkIntegrityLevel[32]:BYTE
    40.     LOCAL dwSize:DWORD
    41.     LOCAL dwIntegrityLevel:DWORD
    42.     LOCAL pSid:DWORD
    43.  
    44.     invoke OutputDebugString, addr debugMsgStart
    45.  
    46.     invoke OpenProcessToken, -1, TOKEN_QUERY, addr hToken
    47.     push eax
    48.     invoke wsprintf, addr debugBuffer, addr debugMsgOpenToken, eax
    49.     invoke OutputDebugString, addr debugBuffer
    50.     pop eax
    51.     test eax, eax
    52.     jz Failed
    53.  
    54.     mov dwSize, 32
    55.     invoke GetTokenInformation, hToken, TokenIntegrityLevel, addr tkIntegrityLevel, 32, addr dwSize
    56.     push eax
    57.     invoke wsprintf, addr debugBuffer, addr debugMsgGetInfo, eax
    58.     invoke OutputDebugString, addr debugBuffer
    59.     pop eax
    60.     test eax, eax
    61.     jz CloseHandleAndExit
    62.  
    63.     mov eax, DWORD PTR [tkIntegrityLevel]
    64.     mov pSid, eax
    65.     add pSid, 8  ; Skip over SID_IDENTIFIER_AUTHORITY
    66.     mov eax, DWORD PTR [pSid]
    67.     and eax, 0FFFFh
    68.     mov dwIntegrityLevel, eax
    69.  
    70.     push eax
    71.     invoke wsprintf, addr debugBuffer, addr debugMsgIntegrityLevel, eax
    72.     invoke OutputDebugString, addr debugBuffer
    73.     pop eax
    74.  
    75.     cmp eax, 04000h
    76.     jae SystemLevel
    77.     cmp eax, 03000h
    78.     jae HighLevel
    79.     cmp eax, 02000h
    80.     jae MediumLevel
    81.     cmp eax, 01000h
    82.     jae LowLevel
    83.     jmp UnknownLevel
    84.  
    85. SystemLevel:
    86.     mov eax, offset strSystem
    87.     jmp CloseHandleAndExit
    88.  
    89. HighLevel:
    90.     mov eax, offset strHigh
    91.     jmp CloseHandleAndExit
    92.  
    93. MediumLevel:
    94.     mov eax, offset strMedium
    95.     jmp CloseHandleAndExit
    96.  
    97. LowLevel:
    98.     mov eax, offset strLow
    99.     jmp CloseHandleAndExit
    100.  
    101. UnknownLevel:
    102.     mov eax, offset strUnknown
    103.     jmp CloseHandleAndExit
    104.  
    105. Failed:
    106.     mov eax, offset strUnknown
    107.  
    108. CloseHandleAndExit:
    109.     invoke CloseHandle, hToken
    110.     ret
    111. CheckIntegrityLevel endp
    112.  
    113. start:
    114.     call CheckIntegrityLevel
    115.    
    116.     push eax
    117.     push offset msgFormat
    118.     push offset resultBuffer
    119.     call wsprintf
    120.     add esp, 12
    121.  
    122.     invoke MessageBox, NULL, addr resultBuffer, addr caption, MB_OK
    123.  
    124.     invoke ExitProcess, 0
    125. end start
     
    Mikl___ нравится это.
  8. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    196
    забавно видеть массив cmp eax,.. для выбора соответствующих строк..

    Код (ASM):
    1.     cmp eax, 04000h
    2.     jae SystemLevel
    3.     cmp eax, 03000h
    4.     jae HighLevel
    5.     cmp eax, 02000h
    6.     jae MediumLevel
    7.     cmp eax, 01000h
    8.     jae LowLevel
    9.     jmp UnknownLevel
    10. SystemLevel:
    11.     mov eax, offset strSystem
    12.     jmp CloseHandleAndExit
    13. HighLevel:
    14.     mov eax, offset strHigh
    15.     jmp CloseHandleAndExit
    16. MediumLevel:
    17.     mov eax, offset strMedium
    18.     jmp CloseHandleAndExit
    19. LowLevel:
    20.     mov eax, offset strLow
    21.     jmp CloseHandleAndExit
    22. UnknownLevel:
    23.     mov eax, offset strUnknown
    24.     jmp CloseHandleAndExit
    25. Failed:
    26.     mov eax, offset strUnknown
    27. CloseHandleAndExit:
    28.     invoke CloseHandle, hToken
    29.     ret
    это хорошо, что здесь всего 4 возможных варианта (хотя должно быть 6 с доп.константами 5000h и 7000h),
    а если нужно будет прочекать овер 100 значений, тогда как?
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Тимур, стоит глянуть по ссылке в топик Сам себе Iczelion (2007 :)) в раздел Внутри процедуры окна, конкретно Способ шестой — последовательное приближение
     
  10. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    196
    Mikl___,
    угу.. первые(3) способа сразу в топку, т.к. это те-же яйки cmp/jump только сбоку.
    а вот табличные методы начиная с 4 уже рулят - к ним можно добавить ещё один для случая, когда на входе строго последовательное значение типа 0,1,2,3,4,..N (тупо используем его как индекс в таблице адресов).
     
    Mikl___ нравится это.
  11. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    302
    тогда ищи пути решения