Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Гайд DMA — Оптимизация трансляции Virtual to Physical через self-reference паттерн

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
309
Реакции
7
Народ, кто сейчас ковыряет маппинг памяти в кернел-моде, гляньте этот метод трансляции вирт-адреса в физику. Давно мурыжил этот вопрос, когда обновлял свой байпасс, и решил поделиться схемой, которую нарыл.

Суть в том, что вместо классического прохода по всем уровням пейдж-тейблов, можно юзать self-reference энтри, когда вы уже зааттачены к процессу. По факту, мы создаем PML4E, который указывает напрямую на целевой DTB.

Техническая база:
  1. Если вы уже в кернеле, через self-ref энтри можно читать все уровни пейдж-тейблов напрямую.
  2. Создаем кастомный PML4E -> целимся в нужный DTB.
  3. Результат: MMU берет на себя весь пейдж-уок, мы получаем финальный PFN почти мгновенно.

Почему это профитно:
Скорость трансляции взлетает в разы. Вы минимизируете количество обращений к памяти, так как читаете только финальный PFN через виртуальное чтение. По сути, это чит-код для тех, кто страдает от оверхеда при чтении памяти в больших объемах.

Нюансы реализации:
Конечно, это палится античитами на раз-два, если не замаскировать этот PML4E. Это жирный флаг для любого нормального кибер-детекта, который мониторит модификации таблиц страниц.

В теории можно провернуть это без прямого инжекта PML4E, если найти виртуальный адрес, который мапит финальную PT-страницу. Я пока эту ветку не копал, но направление перспективное.

Кто-то уже тестил похожие манипуляции с MMU, чтобы не спалиться на проверках целостности таблиц? Есть идеи, как замаскировать подмену PML4E, чтобы не отлететь в пермач при первой же проверке? Братва, делитесь опытом, кто допиливал — кидайте свои соображения в тред.
 
Назад
Сверху Снизу