Thread access

Тема в разделе "WASM.BEGINNERS", создана пользователем GeNeZiS, 13 июл 2010.

  1. GeNeZiS

    GeNeZiS New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    135
    Приветствую вас.
    Каким образом я могу узнать привелегии потока? (ринг3)
    Благодарю за внимание
     
  2. google

    google New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2007
    Сообщения:
    140
  3. GeNeZiS

    GeNeZiS New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    135
    ответ был найден. если кому интересно вот код:
    Код (Text):
    1. ;################################################################################################################
    2. ; GetPrivelegedThread - получение хендла привелегированного потока в explorer.exe
    3. ;   IN: hProcess - указатель на процесс
    4. ;       dwProcID - ID процесса
    5. ;   OUT:    возвращает хендл потока или 0 в случае ошибки
    6. ;################################################################################################################
    7. GetPrivelegedThread proc uses edi esi ebx hProcess, dwProcID : DWORD
    8.         LOCAL   lpSysInfo    : DWORD
    9.         LOCAL   dwSize       : DWORD
    10.         LOCAL   hDuplicate   : DWORD
    11.         LOCAL   lpObjectType : DWORD
    12.  
    13.  
    14. ; -------- получение сис. инфы     
    15.         mov lpSysInfo, 0
    16.        
    17.         lea eax, dwSize
    18.         xinvoke ZwQuerySystemInformation, 16, 0, 0, eax
    19.        
    20. @@:
    21.         add dwSize, 1000h
    22.        
    23.         .IF (lpSysInfo != 0)
    24.             xinvoke LocalFree, lpSysInfo
    25.         .ENDIF
    26.        
    27.         xinvoke LocalAlloc, LPTR, dwSize
    28.         mov lpSysInfo, eax
    29.        
    30.         xinvoke ZwQuerySystemInformation, 16, lpSysInfo, dwSize, 0
    31.         cmp eax, 0C0000004h ; STATUS_INFO_LENGTH_MISMATCH
    32.         jz  @B
    33.        
    34.        
    35. ; -------- перебор хендлов процесса  
    36.         mov edi, lpSysInfo
    37.         assume  edi : ptr SYSTEM_HANDLE_INFORMATION_EX
    38.         mov ecx, [edi].NumberOfHandles      ; кол-во хендлов
    39.         add edi, 4
    40.  
    41.         assume  edi : ptr SYSTEM_HANDLE_INFORMATION
    42.         xor edx, edx
    43.        
    44. _enum_handles:
    45.         mov eax, dword ptr [edi].ProcessId
    46.         cmp eax, dwProcID
    47.         jnz _next_struct
    48.        
    49.         push    edx
    50.         push    ecx
    51.        
    52.        
    53. ; -------- хендл обьекта
    54.         xor ebx, ebx
    55.         mov bx, word ptr [edi].Handle
    56.        
    57.         lea eax, hDuplicate
    58.         xinvoke ZwDuplicateObject, hProcess, ebx, 0FFFFFFFFh, eax, 0, 0, 0
    59.         test    eax, eax
    60.         jnz _next_handle
    61.        
    62.        
    63. ; -------- получение типа обьекта
    64.         xinvoke ZwQueryObject, hDuplicate, 2, 0, 0, offset dwBytes
    65.         cmp eax, 0C0000004h ; STATUS_INFO_LENGTH_MISMATCH
    66.         jnz _next_handle
    67.        
    68.         xinvoke LocalAlloc, LPTR, dwBytes
    69.         mov lpObjectType, eax                  
    70.                            
    71.         xinvoke ZwQueryObject, hDuplicate, 2, lpObjectType, dwBytes, offset dwBytes
    72.         test    eax, eax
    73.         jnz _free_mem
    74.        
    75.         mov eax, lpObjectType
    76.         mov esi, [eax + 4]  ; OBJECT_TYPE_INFORMATION.TypeName
    77.                        
    78. ; -------- проверка типа на Thread
    79.         lodsw
    80.         cmp al, 'T'
    81.         jnz _free_mem
    82.        
    83.         lodsw
    84.         cmp al, 'h'
    85.         jnz _free_mem
    86.        
    87.        
    88. ; -------- проверка привелегий потока
    89.         cmp dword ptr [edi].GrantedAccess, 2
    90.         jnz _free_mem
    91.        
    92.        
    93. ; -------- поток найден !!
    94.         xinvoke LocalFree, lpObjectType
    95.         jmp _free_memory
    96.  
    97. _free_mem:
    98.         xinvoke LocalFree, lpObjectType
    99.        
    100. _next_handle:
    101.         pop ecx
    102.         pop edx
    103.        
    104. _next_struct:
    105.         cmp edx, ecx
    106.         jae @F
    107.        
    108.         inc edx
    109.         add edi, 16
    110.         jmp _enum_handles
    111.  
    112. @@:
    113.         xor ebx, ebx
    114. _free_memory:
    115.         xinvoke LocalFree, lpSysInfo
    116.         xchg    eax, ebx
    117.         ret
    118. GetPrivelegedThread endp