• XSS.stack #1 – первый литературный журнал от юзеров форума

Чтение памяти процесса через маппинг секций

arsarsov

(L2) cache
Пользователь
Регистрация
07.08.2022
Сообщения
460
Реакции
272
Как замапить секцию из чужого процесса в свой ?
В обратном порядке это работает очень просто, что бы замапить свою память в чужой процесс создаем секцию через NtCreateSection, затем два раза вызываем NtMapViewOfSection, первый для хендла своего процесса, а второй для того куда будем мапить, при этом адреса указываем как 0, это означает что память будет выделена в случайном месте по усмотрению системы, потом можем писать в замапленый кусок в своем процессе и автоматически эти изменения применяются к замапленому куску в чужом процессе
Только вот это работает, если создавать новую секцию и таким образом мы можем писать в чужой процесс по вновь выделенным адресам, но не писать\читать из уже созданных секций
Я предполагаю, что нужно через NtQueryProcessInformation с параметром ProcessHandleInformation перечислить все хендлы в процессе, отсеять те, которые по типу объекта соответствуют "секции", затем дублировать хендлы к себе в процесс, открывать секции и получать из них информацию о адресах, находить нужный диапазон и используя хендл подходящей секции делать NtMapViewOfSection в свой процесс, что бы прочитать данные по нужному адресу
Кто что думает по этому поводу ?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Кто что думает по этому поводу ?
Если у тебя секция именованная, то NtOpenSection и вперед. Если нет, то искать хендл, дублировать к себе, затем уже отображать из дублированного хендла.
 
Если у тебя секция именованная, то NtOpenSection и вперед. Если нет, то искать хендл, дублировать к себе, затем уже отображать из дублированного хендла.
А вот я не знаю именованая она или нет, я не проверял, это ж системный загрузчик ее создает при старте нового процесса, так что скорее всего только брутфорсом всех хендлов секций в процессе
 
Пожалуйста, обратите внимание, что пользователь заблокирован
это ж системный загрузчик ее создает при старте нового процесса
Если ты про секцию с атрибутом IMAGE_SCN_MEM_SHARED, то почему бы просто не загрузить к себе в процесс DLL, у которой эта секция есть, и системный загрузчик отобразит ее на виртуальную память твоего процесса.
 
Если ты про секцию с атрибутом IMAGE_SCN_MEM_SHARED, то почему бы просто не загрузить к себе в процесс DLL, у которой эта секция есть, и системный загрузчик отобразит ее на виртуальную память твоего процесса.
Увы это не dll, я пытался так прочитать память из другого процесса без использования NtReadVirtualMemory в юзермоде
С отображением своего адресного пространства в чужой процесс проблем нет, да и в обратном порядке это работает прекрасно, но только с вновь созданными секциями, и скорее всего что бы читать так из уже существующей подойдет метод который ты описал выше, искать хендлы секций, дублировать и подбирать какая из них находится в нужном диапазоне адресов
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх