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

Вопрос Manual Map DLL Injection — Разбор алгоритма и нюансы

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

Накидываю свой инжектор и хочу подтвердить логику:

  1. Чтение DLL-файла в буфер.
  2. Парсинг PE заголовков (Image Base, Entry Point, Section alignment).
  3. Аллокация памяти в целевом процессе через VirtualAllocEx.
  4. Копирование секций и заголовков через WriteProcessMemory (WPM).

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

1. Резолв импортов (IAT) — нужно пройтись по дескрипторам импорта и подгрузить необходимые либы, заполнив таблицу реальными адресами функций.
2. Фикс релокаций (Base Relocations) — если ImageBase не совпал с адресом аллокации (что бывает почти всегда), нужно пропатчить все абсолютные адреса в коде.
3. Вызов TLS коллбеков — если они есть в PE-файле, их нужно выполнить до точки входа.
4. Вызов DllMain — собственно, прыжок на Entry Point с флагом DLL_PROCESS_ATTACH.

Вопрос к местным реверсерам: кто как сейчас прячет аллокацию? Обычный RWX-регион сейчас палится любым адекватным античитом типа EAC или BattlEye через скан памяти. Стоит ли вообще копировать заголовки (Headers) в таргет или лучше их затирать сразу после инжекта, чтобы минимизировать футпринт?

Кто реализовывал подобный функционал, какие грабли ловили при маппинге в защищенные процессы?
 
Назад
Сверху Снизу