Можешь объяснить, как функционирует функция ZwMapViewOfSection?

Привет! Я начинающий исследователь вредоносного ПО. У меня есть опыт в реализации различных функций, связанных с чтением физической памяти и повышением привилегий. Однако меня беспокоит, как именно осуществляется переход в защищенный режим BIOS и почему чтение возможно только через mmapiospace, mmapviewofsection или с использованием отладочной платы. Например, программное обеспечение для прошивки BIOS на процессорах Xeon 2697v3 записывает данные в первые адреса ОЗУ для перепрошивки BIOS, что зависит от особенностей некоторых материнских плат. Как именно осуществляется доступ к физической памяти в ядре Windows? Не могли бы вы порекомендовать книги по этой теме?
  • 24 сентября 2024 г. 16:43
Ответы на вопрос 2
Функция `ZwMapViewOfSection` является частью Windows API и используется для отображения секции (раздела) в виртуальном адресном пространстве процесса. Эта функция позволяет процессу получить доступ к данным, которые находятся в разделе, который был создан ранее, например, с использованием функции `ZwCreateSection`. Это важный механизм для работы с файлами и межпроцессным взаимодействием (IPC) в Windows.

Вот краткое описание того, как функционирует `ZwMapViewOfSection`:

1. **Создание секции:** Сначала необходимо создать секцию, которая будет содержать данные, используя `ZwCreateSection`. Это позволяет определить, как данные будут загружаться и использоваться.

2. **Отображение секции:** После создания секции можно использовать `ZwMapViewOfSection` для отображения этой секции в виртуальное адресное пространство текущего процесса или другого процесса. Указанные параметры относят к размеру отображаемого пространства и защищенности.

3. **Передача прав доступа:** Функция позволяет задавать права доступа к отображаемой области, что может быть полезно для настройки уровня безопасности доступа к этим данным.

4. **Работа с данными:** После вызова `ZwMapViewOfSection` данные становятся доступны по виртуальному адресу, что позволяет процессу взаимодействовать с ними, как с обычным массивом в памяти.

Что касается доступа к физической памяти в ядре Windows, то это осуществляется через специальные механизмы, касающиеся управления памятью и правами доступа. Правила таковы:

1. **Защищенное пространство:** В оконной архитектуре доступ к физической памяти строго ограничен, и не каждый процесс может его использовать напрямую.

2. **Использование драйверов:** Для доступа к физической памяти, как правило, используются драйверы, так как они имеют повышенные привилегии и могут взаимодействовать с аппаратным обеспечением напрямую. Драйверы используют такие функции, как `MmMapIoSpace` или `MmAllocateContiguousMemory`, для работы с физическими адресами.

3. **Системные вызовы:** Различные системные вызовы и функции, такие как `ZwQueryVirtualMemory`, могут использоваться для получения информации о состоянии памяти и отображения определенных областей.

Что касается перехода в защищенный режим BIOS, это связано с тем, что процессор может выполнять различные режимы работы. BIOS работает в режиме, который предоставляет минимальный уровень взаимодействия с аппаратным обеспечением и управляет низкоуровневыми функциями до загрузки операционной системы. Ваша работа, связанная с перепрошивкой, может включать взаимодействие с конкретными адресами в памяти, которые специфичны для вашего оборудования.

По поводу ресурсов для изучения этой темы, я рекомендую следующие книги и материалы:

1. **"Windows Internals"** - книга, написанная Марком Руссиновичем и Дэвидом Соломоном, отлично объясняет внутренние механизмы Windows, включая управление памятью и работу с ядром.

2. **"Operating Systems: Design and Implementation"** - книга Андреа Таненбаума, в которой описаны основы проектирования операционных систем, хотя и не специфична для Windows.

3. **Документация Microsoft** - официальная документация Microsoft содержит много информации о ядре Windows, драйверах и API.

4. **Reverse Engineering Books** - такие книги, как "Practical Malware Analysis" и "Reversing: Secrets of Reverse Engineering" могут дать углубленное понимание работы с низкоуровневыми механизмами Windows.

Изучение данных материалов даст вам лучшее понимание работы Windows на уровне ядра и поможет в ваших исследованиях. Удачи!
Почитайте про устройство Memory Management Unit (MMU), таблицы трансляции виртуальной памяти x86, TLB и так далее. 

В стандартном режиме процессор оперирует виртуальными адресами, которые не соответствуют физическим ячейкам оперативной памяти. Это удобно с точки зрения программирования и безопасности - в разных программах можно использовать те же адреса, а также не пускать программы в "чужие" области памяти.

mmapiospace / mmapviewofsection как раз настраивает таблицу трансляции памяти для текущего процесса нужным образом, чтобы вы могли получить доступ к памяти, которую вы хотите.

А софт для прошивки биоса пишет в аппаратные регистры SPI контроллера на шине PCI Express, не в память. И это не особенность материнки, а скорее интерфейс к оборудованию. Похожим образом через чтение/запись работает большинство драйверов устройств
Похожие вопросы