Сискол к Win32.sys из WOW64 не отрабатывает

Тема в разделе "WASM.BEGINNERS", создана пользователем PaperMoon, 5 окт 2017.

  1. PaperMoon

    PaperMoon New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2017
    Сообщения:
    16
    Я пытаюсь сделать сисколл из x86 процесса через Heaven's Gate т.е.

    Код (ASM):
    1. mov r10,rcx
    2. mov eax,1403h
    3. syscall
    4. ret
    из wow64 процесса к win32k апи:

    Код (C):
    1. NtUserRegisterRawInputDevices
    Код который вызывает сисколы прекрасно работает с сисколами ntoskrnl.exe, однако видимо для win32k.sys требуется ещё какая-то работа. При этом сискол к
    Код (C):
    1. NtUserRegisterRawInputDevices
    возвращает STATUS_SUCCESS, однако я не получаю событий WM_INPUT. При этом если вызывать через ntdll, то всё работает нормально. Какая дополнительная работа необходима для проведения сисколлов из wow64 к win32k.sys апи? User32.dll уже инициализирован в приложении при вызове, создано окно.
     
  2. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    А где Инди? Что он молчит? Он же кернел хакер
     
  3. PaperMoon

    PaperMoon New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2017
    Сообщения:
    16
    Ну один косяк я сам исправил, нужно было подсунуть адрес который выровнен по x64 границе. Но всё равно в итоге кидает в ответ 1 в eax. Щас накачу виртуалку попытаюсь в кернеле БП поставить на NtUserRegisterRawInputDevices, и посмотреть что именно ей не нравится
     
  4. PaperMoon

    PaperMoon New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2017
    Сообщения:
    16
    Разобрался. К выше добавленному, забыл выровнить стек
     
  5. vx1d

    vx1d Member

    Публикаций:
    0
    Регистрация:
    13 дек 2016
    Сообщения:
    118
    а как инициализировал user32.dll (из system32)?
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    > сисколл из x86 процесса через Heaven's Gate т.е.

    Смотрим архитектурные маны, конкретно обработку syscall:

    if CS.L != 1..
    then #UD

    Это значит что исполнение данной инструкции возможно лишь в 64 моде. Из под wow инструкция приведёт к исключению ILLEGAL_INSTR.

    > NtUserRegisterRawInputDevices возвращает STATUS_SUCCESS, однако я не получаю событий WM_INPUT.

    Эта апи не приводит к вызову кернел нотифи. Тоесть вначале нужно помотреть что за апи https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-registerrawinputdevices

    А только потом задавать вопросы. И незачем лезть в ядро гуя, если при вызове сервиса косяк со стеком.