Сейчас на форуме: zombi-vadim, tyns777 (+5 невидимых) |
eXeL@B —› Программирование —› ZwUnmapViewOfSection + VirtualAllocEx + Vista |
Посл.ответ | Сообщение |
|
Создано: 11 декабря 2007 03:47 · Личное сообщение · #1 Решил написать простенький пакер/враппер. Гружу PE из памяти в процесс как завещал дедушка Нэбэт. Работает, но переодически обламывается. ZwUnmapViewOfSection (handle, imgBase) -> OK VirtualAllocEx (handle, imgBase, size, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE) -> FAILED Ошибка ERROR_INVALID_ADDRESS или STATUS_CONFLICTING_ADDRESSES если использовать NtAllocateVirtualMemory. Можно конечно создавать процессы в цикле пока нужный диапазон не окажется свободным (сейчас так и делаю), но это ж бред :\ Нужно что бы работало как часы (не китайские). Надо сказать что дело было под вистой. Думаю это аномалия связанна с ASLR. Куча или стек треда выделяется по случайным адресам, которые могут совпасть с ImageBase. Вижу несколько путей решения проблемы: 1. Неспортивный. В цикле стартовать процесс-"икубатор" и проверять нужный диапазон адресов с помощью VirtualQueryEx. Сейчас так и делаю. 2. Джедайский. Делать все ручками. С помощью NtCreateSection/NtCreateProcess создаем процесс с нулевым количеством тредов. Адресное пространство (теоретически) должно быть девственно чистым. Далее выгружаем секцию с помощью NtUnmapViewOfSection, загружаем наш PE и создаем тред с помощью NtCreateThread или CreateRemoteThread (в этом случае не надо возиться с созданием стэка). В теории все замечательно, но на практике придется глубоко лезть в PEB и ручками устанавливать кучу параметров (коммандная строка, окружение, имя модуля, текущая директория итп). Кроме этого, CreateProcess еще шлет некое сообщение csrss. В общем метод больно хардкорный, а значит и ненадежный в плане совместимости с разными версиями винды. 3. Умеренный. Удалить стэк и кучу ручками и создать новые по другим адресам. Как я понимаю придется глубоко лезть в PEB и TEB. Мб кто делал что-то подобное и подскажет? 4. Хитрый. Отключить ASLR при запуске процесса. КАК!?! Флаг в PE заголовке не предлагать, т.к. тот не влияет на размещение стека и кучи. Поправьте, если я не прав. Спасибо за внимание, жду ваших советов и идей. Для теста можно использовать loadexe.cpp или аналог. |
|
Создано: 11 декабря 2007 07:52 · Личное сообщение · #2 |
|
Создано: 11 декабря 2007 15:17 · Личное сообщение · #3 |
|
Создано: 11 декабря 2007 19:54 · Личное сообщение · #4 |
|
Создано: 12 декабря 2007 00:58 · Личное сообщение · #5 |
|
Создано: 12 декабря 2007 11:32 · Личное сообщение · #6 |
eXeL@B —› Программирование —› ZwUnmapViewOfSection + VirtualAllocEx + Vista |