Re[6]: Супервизор над нуль-ботом (Windows XP IA-32 / Windows 8 x64)
От: Vertecs Узбекистан  
Дата: 01.12.19 04:25
Оценка:
Здравствуйте, ononim, Вы писали:

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

O>1) Создать процесс с помощью обычного CreateProcess(..), на свой исполняемый файл, который в WinMain откроект пару приготовленных именованных ивентов и вызовет на них SignalObjectAndWait.
O>2) Предок этого процесса, получив сигнал, должен будет очистить адресное пространство дочернего процесса, для чего:
O>2.1) Перечислить все регионы АП дочернего процесса с помощью функции VirtualQueryEx или ZwQueryVirtualMemory
O>2.2) Пройтись по всем MEM_RESERVE/MEM_COMMIT и для каждого вызвать NtUnmapViewOfSection (если типа региона MEM_MAPPED или MEM_IMAGE) или NtFreeVirtualMemory (если это MEM_PRIVATE)
O>3) Если внезапно все в пункте 2 произошло успешно, то создаете обычную секцмю (не IMAGE!) с помощью NtCreateSection размером 64кб и мапите ее при помощи NtMapViewOfSection на все адреса, кратные 64к.
Тo есть, запускаю стандартный процесс-заглушку, а потом перекраиваю всё его адресное пространство на свой лад — я правильно понял?
Об этом я как-то думал. Но это очень запутанный и не очень эстетичный способ.
Сейчас обнаружил статью про исследование внутренних механизмов CreateProcess — заглушек много и не до конца всё понял.
O>[UPD] Прочитал топик. Windows XP. Тогда шансы на успех вышеописанного мероприятия многократно повышаются. Но если откатиться до NT4 то думаю они приблизятся к 100%
Топик я назвал «Гипервизор над нуль-API бот-процессом (Windows XP IA-32 / Windows 8.1 x64)», но движок форума строку обрезал…
O>[UPD2] 4гб не получится. Верхние 2 или 1 ГБ заняты ядром. Впрочем, на 64хбитной винде под wow64 — есть шанс.
Вот этот момент я не понимаю.
Если верхние 2 Гб заняты ядром и активируются только в свой квант времени, для приложения верхние 2 Гб получаются мёртвыми. Для чего?

Аналогично, в «ZX-Spectrum» нижние 16 Кб отведены под ПЗУ с Basic/TR-DOS, у «Орион-128» — верхние 4 Кб…
Но там через call-вызовы все эти API вызываются.

В моём же случае, бот не может и не должен вызывать никаких функций Win-API. Тем самым, верхние 2 Гб под ядро системы должны отображаться при работе кода самого ядра. А под бот необходимо выделить все 4 Гб.
(В рамках моего проекта.)

P.S.: Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.