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

Выделение памяти по адресу 0x400000

c0d3r_0f_shr0d13ng3r

ಥ_ಥ
Пользователь
Регистрация
01.04.2020
Сообщения
466
Реакции
555
Гарант сделки
1
Депозит
0.0086
Всем привет.Пытаюсь реализовать запуск в памяти(LoadPE) файла без reloc`ов.Выделяю память вот так:
C:
//pohHeader - OptionalHeader загружаемого файла
//pohHeader->ImageBase = 0x400000
//pohHeader->SizeOfImage =0x16000
LPVOID lpBase = VirtualAlloc((LPVOID)pohHeader->ImageBase, pohHeader->SizeOfImage, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
               
if(lpBase == NULL)
{
    CHAR cError[30];
    wsprintfA(cError, "%d", GetLastError());
                   
    MessageBoxA(NULL, cError, "GetLastError", MB_OK);
                   
}
Но получаю GetLastError = 487 (ERROR_INVALID_ADDRESS).MSDN пишет, что я выделяю память не по валидному адресу.Подскажите пожалуйста, что я делаю неправильно? И есть ли вообще способ выделить память по стандартному адресу загрузки приложения?
P.S: ImageBase самого "загрузчика" изменил на 0x900000.Файл который загружаю - скомпилированный MINIPAD из екзамплов FASM-а, весит ~6кб
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Я бы "выделил" нужный кусок памяти с помощью хедеров ImageBase и SizeOfImage, потом шеллкод сам себя куда нибудь копирует (VirtualAlloc(NULL,..), а уже оттуда NtUnmapViewOfSection на 0х40000000 и далее VirtualAlloc. Такой маневр будет гарантировать, что память не будет никем и ничем занята в момент инициализации и запуска PE

UPD: правда это больше про крипт т.е. это новый exe. В случае инжекта придется искать кандидата с подходящими ImageBase и SizeOfImage, а в случае запуска в контексте лоадера просто забудь, глючно и не пригодно
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Пытаюсь реализовать запуск в памяти(LoadPE) файла без reloc`ов
использовать релоки религия не позволяет? ;)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
использовать релоки религия не позволяет? ;)
Я бы на твоем месте задавал
этот вопрос не мне, а автору смоука
 
а в случае запуска в контексте лоадера просто забудь, глючно и не пригодно
Я знаю.Я просто реализую LoadPE для использования в крипторе
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ну в первую очередь надо бы в отладчике посмотреть, что эта память не закоммичена и не зарезервирована уже. Вообще нет никаких гарантий, что в нужном тебе диапазоне будет свободное место. Даже между двумя запусками одного и того же приложения (твоего криптованного файла) и даже без перезагрузки выделенные системой под те же библиотеки, кучу, стеки потоков и тд франгменты памяти в теории могут изменять свое положение.

Я бы забил хер на загрузку файлов без релоков в свой процесс и для этого сделал бы один из менее палевных RunPE алгоритмов, или же попробовал что-то типа Skrull'а.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Я бы на твоем месте задавал
этот вопрос не мне, а автору смоука
А куда ему задать этот вопрос? За мной не застрянет ;)
Нака вот. Может поможет. Откапал в своих файловых завалах. :cool:
Скрытый контент для пользователей: c0d3r_0f_shr0d13ng3r.
 

Вложения

  • EXERebaser.zip
    9.7 КБ · Просмотры: 22
Пожалуйста, обратите внимание, что пользователь заблокирован
Я знаю.Я просто реализую LoadPE для использования в крипторе
Тогда, на мой взгляд, написать "гуляющий" шеллкод самый верный способ. Сама система будет тебе гарантировать доступность памяти на момент запуска (ImageBase/SizeOfImage), а освободить ее можно с помощью анмапа, инфа сотка. Смысл я думаю ты понял если писал такие вещи
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Пожалуйста, обратите внимание, что пользователь заблокирован
Ну лет 20 назад все ехе были обычно без релоков, по своему такой код даже проще грузить, т.к. не надо париться с rebase, тупо сбилдил свой loadpe с базой повыше и все.
 


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