Имперсонация на MASM

Тема в разделе "WASM.BEGINNERS", создана пользователем ATX, 18 мар 2007.

  1. ATX

    ATX New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    145
    Всем здрасьте!
    У меня такой вопрос к уважаемым гуру - как будет выглядеть код на MASMe (из статьи - Ваш друг имперсонация):

    - Проверка прав -
    ;-----------------------------------------------------------------------------
    ; Функция CheckTokenMemberShip находится в advapi32.dll
    ; Если используется для имперсоницированного токена (token), не возвратит
    ; правильного результата

    SECURITY_BUILTIN_DOMAIN_RID equ 20h
    DOMAIN_ALIAS_RID_ADMINS equ 220h
    SECURITY_NT_AUTHORITY equ 5

    ; на выходе: eax - булевое значение
    is_caller_admin proc near
    pushad
    @SEH_SetupFrame
    <jmp is_caller_admin_end>

    @pushvar <dd ?>
    pop eax
    and dword ptr [eax], 0
    push eax
    push eax
    align 4
    call $+24
    db 0ffh, 25h, 60h
    db 1 ; создаем SID администратора
    db 2
    db 0, 0, 0, 0, 0, SECURITY_NT_AUTHORITY
    dd SECURITY_BUILTIN_DOMAIN_RID
    dd DOMAIN_ALIAS_RID_ADMINS
    add dword ptr [esp], 3
    push 0 ; проверяем токен выполняющегося треда
    call CheckTokenMembership ; for admin SID

    pop eax
    mov eax, dword ptr [eax]

    is_caller_admin_end:
    @SEH_RemoveFrame
    mov dword ptr [esp.Pushad_eax], eax
    popad
    retn
    is_caller_admin endp

    Заренее спасибо!
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Да так и будет. А что тебя смущает???
     
  3. ATX

    ATX New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    145
    Вот ошибки выведенные MASMом при компиляции:
    Log.asm(53) : error A2008: syntax error : @SEH_SetupFrame
    Log.asm(54) : error A2008: syntax error : jmp is_caller_admin_end
    Log.asm(56) : error A2008: syntax error : @pushvar
    Log.asm(77) : error A2008: syntax error : @SEH_RemoveFrame
    Log.asm(78) : error A2006: undefined symbol : Pushad_eax

    Как мне адаптировать вышеприведенный код под MASM?
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    @pushvar - объяви макрос.
    call @1
    dd xxxx

    pushad_eax - тоже непонятно что делает. Да и вообще он не определен. Вообще, приведи пример всех этих макросов - может сами макросы не нравятся масму.

    И вообще, выкинь нафиг ты эти макросы. Этот код писал извращенец! Согласен, профессионал, но извращенец :) Если не можешь написать без макросов, скажи - попробую помочь чем смогу.

    А еще проще - посмотри в MSDN описание CheckTokenMembership и вызывай ее сам. Все остальное в этом коде, как например установка сеха, - мусор!

    Код мржно представить так:
    Код (Text):
    1. is_caller_admin proc    near
    2.         pushad
    3.         call @F
    4.         dd 0
    5. @@:  pop eax
    6.         and dword ptr [eax], 0
    7.         push eax
    8.         push eax
    9.         align 4
    10.         call $+24
    11.         db      0ffh, 25h, 60h
    12.         db      1                       ; создаем SID администратора
    13.         db      2
    14.         db      0, 0, 0, 0, 0, SECURITY_NT_AUTHORITY
    15.         dd      SECURITY_BUILTIN_DOMAIN_RID
    16.         dd      DOMAIN_ALIAS_RID_ADMINS
    17.         add dword ptr [esp], 3
    18.         push 0                          ; проверяем токен выполняющегося треда
    19.         call CheckTokenMembership       ; for admin SID
    20.  
    21.         pop eax
    22.         mov eax, dword ptr [eax]
    23.  
    24.         mov dword ptr [esp+7*4], eax
    25.         popad
    26.         retn
    27. is_caller_admin endp