NtWow64ProtectVirtualMemory?

Тема в разделе "WASM.X64", создана пользователем super_huevo, 31 май 2011.

  1. super_huevo

    super_huevo New Member

    Публикаций:
    0
    Регистрация:
    29 май 2011
    Сообщения:
    17
    Что-то не могу понять как менять атрибуты доступа для выделенной памяти из 32-битного процесса для 64-битного.

    [​IMG]

    Нужна функция аналогичная NtProtectVirtualMemory.
    Но вот беда - в Wow64 ntdll.dll её нет.

    Как быть?
     
  2. super_huevo

    super_huevo New Member

    Публикаций:
    0
    Регистрация:
    29 май 2011
    Сообщения:
    17
    Интригует функция NtWow64CallFunction64.
    По названию, хочется верить, что с помощью неё можно вызвать 64-битную функцию в контексте целевого процесса. Если так, то как организуется передача аргументов для этой функции? Через стек? В каком формате?
     
  3. super_huevo

    super_huevo New Member

    Публикаций:
    0
    Регистрация:
    29 май 2011
    Сообщения:
    17
    x64 кодеры!? Вы где?
     
  4. super_huevo

    super_huevo New Member

    Публикаций:
    0
    Регистрация:
    29 май 2011
    Сообщения:
    17
    Нашел тут кое-что.

    http://help.madshi.net/madCodeHook3.htm

    Вроде у него реализована работа с 64-битными процессами через Wow64.
    Но смущает использование драйвера:

    И в итоге нихуя не понятно как реализована работа с памятью 64-битных процессов. Через его драйвер или через Wow64.

    Кто-нибудь покупал madCodeHook 3? Можете глянуть как там что. А то сорцы этого гуано стоят 2k EUR.
    // Отписал пока автору. Жду ответа
     
  5. super_huevo

    super_huevo New Member

    Публикаций:
    0
    Регистрация:
    29 май 2011
    Сообщения:
    17
    Так. Я не понял. А вообще существуют в природе hook-движки чтобы можно было хукать функции из 32-битного процесса в 64-битном?
    Я решил почитать про MS Detours 3.0 Professional: http://research.microsoft.com/en-us/projects/detours/, но там об это ни слова.
     
  6. super_huevo

    super_huevo New Member

    Публикаций:
    0
    Регистрация:
    29 май 2011
    Сообщения:
    17
    О. Появилась такая мысль:

    Похукать какую-нибудь функцию в ntdll.dll удалённого процесса.
    И спровоцировать её вызов из 32-битного приложения используя одну из Wow64-функций.
    Но в этом случае - встаёт вопрос - какую функцию хукать или какую функцию вызывать для провокации ?

    Вообще, возможно ли такое, чтобы ядерный сервис передавал управление в usermode код, при межпроцессовом взаимодействием ?
     
  7. Marazm

    Marazm Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    95
  8. super_huevo

    super_huevo New Member

    Публикаций:
    0
    Регистрация:
    29 май 2011
    Сообщения:
    17
    Marazm
    Это сурово. =)
    Спасибо. Кажется то, что нужно.
     
  9. super_huevo

    super_huevo New Member

    Публикаций:
    0
    Регистрация:
    29 май 2011
    Сообщения:
    17
    Ответил автор madshi:

    То есть для правильного инжектинга либе надо 64-битный исполняемый файл, а чтобы инжектить код из родительского процесса в дочерний нужен драйвер. Какой кошмар. =/
     
  10. Xml

    Xml New Member

    Публикаций:
    0
    Регистрация:
    18 май 2011
    Сообщения:
    54
    неужели спай настолько суперхуёв что сложно спортировать?
     
  11. super_huevo

    super_huevo New Member

    Публикаций:
    0
    Регистрация:
    29 май 2011
    Сообщения:
    17
    Xml
    Немного не понял.
    Что именно портировать? o0 ...

    Код отвечающий за инфектинг новых и дочерних процессов? Если рассматривать сложность задачи, то в случае только с 32-битным кодом, тут с два варианта (инжект из 32-битного приложения в 32-битное). В случае с поддержкой x64, объём кода увеличивается в 4 раза:
    x86 -> x86
    * x86 -> x64
    * x64 -> x86
    * x64 -> x64

    С учётом того, что ни в одной hook-engine либе такое не реализовано, то да, видимо, задача не особо тривиальна.
     
  12. super_huevo

    super_huevo New Member

    Публикаций:
    0
    Регистрация:
    29 май 2011
    Сообщения:
    17
    Marazm
    Да, действительно. Оно работает.
    Достаточно просто написать x64 шеллкод с вызовом функции NtProtectVirtualMemory из 64-битной версии ntdll.dll (причём она уже загружена в адресное пространство 32-битного процесса, функционирующем в окружении Wow64). Ну и вызвать его в 32-битном процессе с использованием Heaven's Gate. Таким образом можно изменять атрибуты страниц виртуальной памяти, находящейся за пределами 4 ГБ в удалённом процессе.

    [​IMG]