Информация об изменениях

Сообщение Re[5]: Супервизор над нуль-API бот-процессом (Windows XP IA- от 30.11.2019 17:09

Изменено 30.11.2019 20:04 ononim

Re[5]: Супервизор над нуль-API бот-процессом (Windows XP IA-
V>Дa, мне не нужно загружать/запускать экзешник.
V>Нужно, чтобы 64 Кб окно VirtualAlloc развернулось отдельным пространством, где эти 64 Кб повторяются 65536 и складываются в 4 Гб.
V>И чтобы это было отдельным процессом, а не потоком.
Абстрагируясь от прочих ваших пожеланий, заполнить пространство процесса повторящимся фрагментом теоретически возможно, но практически скорее всего современные винды пошлют в пешее путешествие. Но можете поэксперементировать:
1) Создать процесс с помощью обычного CreateProcess(..), на свой исполняемый файл, который в WinMain откроект пару приготовленных именованных ивентов и вызовет на них SignalObjectAndWait.
2) Предок этого процесса, получив сигнал, должен будет очистить адресное пространство дочернего процесса, для чего:
2.1) Перечислить все регионы АП дочернего процесса с помощью функции VirtualQueryEx или ZwQueryVirtualMemory
2.2) Пройтись по всем MEM_RESERVE/MEM_COMMIT и для каждого вызвать NtUnmapViewOfSection (если типа региона MEM_MAPPED или MEM_IMAGE) или NtFreeVirtualMemory (если это MEM_PRIVATE)
3) Если внезапно все в пункте 2 произошло успешно, то создаете обычную секцмю (не IMAGE!) с помощью NtCreateSection размером 64кб и мапите ее при помощи NtMapViewOfSection на все адреса, кратные 64к.

[UPD] Прочитал топик. Windows XP. Тогда шансы на успех вышеописанного мероприятия многократно повышаются. Но если откатиться до NT4 то думаю они приблизятся к 100%
Re[5]: Супервизор над нуль-API бот-процессом (Windows XP IA-
V>Дa, мне не нужно загружать/запускать экзешник.
V>Нужно, чтобы 64 Кб окно VirtualAlloc развернулось отдельным пространством, где эти 64 Кб повторяются 65536 и складываются в 4 Гб.
V>И чтобы это было отдельным процессом, а не потоком.
Абстрагируясь от прочих ваших пожеланий, заполнить пространство процесса повторящимся фрагментом теоретически возможно, но практически скорее всего современные винды пошлют в пешее путешествие. Но можете поэксперементировать:
1) Создать процесс с помощью обычного CreateProcess(..), на свой исполняемый файл, который в WinMain откроект пару приготовленных именованных ивентов и вызовет на них SignalObjectAndWait.
2) Предок этого процесса, получив сигнал, должен будет очистить адресное пространство дочернего процесса, для чего:
2.1) Перечислить все регионы АП дочернего процесса с помощью функции VirtualQueryEx или ZwQueryVirtualMemory
2.2) Пройтись по всем MEM_RESERVE/MEM_COMMIT и для каждого вызвать NtUnmapViewOfSection (если типа региона MEM_MAPPED или MEM_IMAGE) или NtFreeVirtualMemory (если это MEM_PRIVATE)
3) Если внезапно все в пункте 2 произошло успешно, то создаете обычную секцмю (не IMAGE!) с помощью NtCreateSection размером 64кб и мапите ее при помощи NtMapViewOfSection на все адреса, кратные 64к.

[UPD] Прочитал топик. Windows XP. Тогда шансы на успех вышеописанного мероприятия многократно повышаются. Но если откатиться до NT4 то думаю они приблизятся к 100%
[UPD2] 4гб не получится. Верхние 2 или 1 ГБ заняты ядром. Впрочем, на 64хбитной винде под wow64 — есть шанс.