Посмотреть значение регистра с помощью MessegeBox без invoke

Тема в разделе "WASM.WIN32", создана пользователем URA, 10 июл 2011.

  1. URA

    URA New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2011
    Сообщения:
    1
    как посмотреть значение регистра с помощью MessegeBox без invoke?
     
  2. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    что это за бред)))
     
  3. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    Код (Text):
    1. _imp__NtRaiseHardError proto ErrorStatus:NTSTATUS, \
    2.     NumberOfParameters:ULONG, \
    3.     UnicodeStringParameterMask:ULONG, \
    4.     Parameters:PVOID, \
    5.     ValidResponseOptions:ULONG, \
    6.     Response:PULONG
    7.  
    8. MSGBOX macro TitleU, TextU
    9.     push MB_OK
    10.     push TitleU
    11.     push TextU
    12.     mov ecx,esp
    13.     push eax    ; Response.
    14.     push esp
    15.     push 0
    16.     push ecx
    17.     mov eax,dword ptr [_imp__NtRaiseHardError]
    18.     push 3
    19.     push 3
    20.     mov eax,dword ptr [eax + 1]
    21.     push STATUS_SERVICE_NOTIFICATION
    22.     mov edx,esp
    23.     Int 2Eh
    24.     mov eax,dword ptr [esp + 4*6]
    25.     add esp,4*10
    26. endm
    Както так :)
     
  4. 0xJace

    0xJace New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2010
    Сообщения:
    54
    Так все значительно проще. Вместо invoke класть просто всё в стек, и вызвать MessageBox через call. It's terrible!
     
  5. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    А invoke то чем не угодил?
     
  6. gale

    gale New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2020
    Сообщения:
    12
    Здравствуйте.
    Код (Text):
    1. .386
    2. .model flat
    3. includelib ntdll.lib
    4. extern _imp__NtRaiseHardError@24:dword
    5. .code
    6. start:
    7.     push 0
    8.     push 0
    9.     push 0
    10.     mov ecx,esp
    11.     push eax
    12.     push esp
    13.     push 0
    14.     push ecx
    15.     mov eax,_imp__NtRaiseHardError@24
    16.     push 3
    17.     push 3
    18.     mov eax,[eax+1]
    19.     push 40000018h
    20.     mov edx,esp
    21.     int 2eh
    22.     mov eax,[esp+24]
    23.     add esp,40
    24.     ret
    25. end start
    Окно messagebox не отображается на экране. Ось windows xp 32-bit.
     
  7. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.871
  8. gale

    gale New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2020
    Сообщения:
    12
    Мне не нужна куча способов. Мне нужен один способ: в windows xp 32-bit с помощью вызова функции NtRaiseHardError отобразить на экране окно MessageBox.
     
  9. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.871
    Код (ASM):
    1. .686P
    2. .model flat
    3. include windows.inc
    4. include ntstatus.inc
    5. .code
    6. start: xor eax,eax
    7.        sub esp,((Num+Num1)*2+3) and 0FFFFFFFCh;временный буфер под TitleText
    8. ;и MessageText делаем кратным 4
    9.        lea edi,[esp];lea edi,MessageBuffer
    10.        mov esi,offset MessageText
    11.        mov ecx,Num+Num1
    12. @@:    lodsb;TitleText и MessageText в буфер
    13.        stosw
    14.        loop @b
    15. ; заполняем UNICODE_STRING (первый параметр)
    16.        sub edi,Num1*2
    17.        push edi;указатель на TitleText в буфере
    18.        push (Num1-1)*20002h+2
    19. ; заполняем UNICODE_STRING (второй параметр)
    20.        sub edi,Num*2
    21.        push edi;указатель на MessageText в буфере
    22.        push (Num-1)*20002h+2
    23. ; третий параметр, содержащий uType для MessageBox
    24.        push MB_ICONASTERISK or MB_OK
    25.        sub edi,8
    26.        push edi;указатель на UNICODE_STRING, указывающую на TitleText в буфере
    27.        sub edi,8
    28.        push edi;указатель на UNICODE_STRING, указывающую на MessageText в буфере
    29.        sub edi,0Ch; три параметра по 4 байта
    30.        push offset x;куда функция запишет выбранный юзером ответ (если тип,
    31. ;переданный в следующем параметре, предполагает выбор ответа пользователем)
    32.        push ecx;0; варианты ответов
    33.        push edi;указатель на массив параметров
    34.        push 3;общее число параметров
    35.        push 00000011b;маска, единичные биты которой соответствуют тем
    36. ;параметрам, которые имеют тип PUNICODE_STRING, а нули - остальным параметрам
    37.        mov al,0B6h;ID NtRaiseHardError для WinXP
    38.        push STATUS_SERVICE_NOTIFICATION;статус ошибки
    39.        mov edx,esp
    40.        int 2Eh
    41.        add esp,((Num+Num1)*2+3) and 0FFFFFFFCh +13*4;удаляем буфер и чистим
    42. ;стек от переданных параметров
    43.        retn
    44. .data
    45. MessageText db  'Win32 Assembly with MASM is Great!',0
    46. Num = $-MessageText
    47. TitleText db 'Iczelion Tutorial #2:MessageBox',0
    48. Num1 = $-TitleText
    49. x dd 0
    50. end start
     
  10. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    490
  11. gale

    gale New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2020
    Сообщения:
    12
    Mikl___,
    ошибка в скобках.
    Код (ASM):
    1. add esp,((Num+Num1)*2+3 and 0FFFFFFFCh)+13*4
    Всё было бы хорошо, если б не одно но: при запуске, когда появляется окно, первые 2 секунды курсор мыши в виде стрелки и песочных часов (OCR_APPSTARTING).
     
  12. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.871
    gale,
    нет никакой ошибки,
    Код (ASM):
    1. Num+Num1 <-- длина строк в Char
    2. (Num+Num1)*2<-- длина строк в WChar
    3. (((Num+Num1)*2+3) and 0FFFFFFFCh) <-- к числу кратному 4
    4.  +13*4 <-- чистим стек от переданных параметров
     
  13. Ahimov

    Ahimov Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    71
    gale

    А для чего вам ?

    Вывод таким способом сообщений нужен в очень спец. случаях. Этот сервис выводит статусный код ошибки без необходимости подгрузки гуя(gui).

    В примере выше который должен бсодить не эксплойт, а соотв. управляющий код.

    Если сервис не работает, то необходимо посмотреть статусный код. Тем более что интерфейс сервисный, есть прототипы их вызова. Или это копипаста?
     
  14. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    184
    [​IMG]
     
    Mikl___ нравится это.