Здраствуйте. Мне необходимо загрузить PE файл(не длл) в свой процесс. Тоесть к примеру есть у меня файл test.exe. Я его хочу загрузить. Но не просто как мемори мапед, а имено так чтобы посоздавались секции и прочии радости. Тоесть чтобы произошло практически тоже самое что и во время CreateProcess. Как подобное можно зделать c помошью вин функции? Есть ли спец функция или придётся делать "ручками" ?
Полностью ручками, к тому же для всех радостей прийдется перехватывать api, чтобы обоим "exe модулям" выдавать свои правильные результаты, а для чего такое потребовалось?
Требуется для эмуляции кода. Тоесть мне нужно отэмулировать код для поиска криптованых вирусов и разных полиморфов. Мне не нужно грузить импорты и прочую радость. Вот часа 2 назад только нашёл в книге Рихтера LoadLibraryEx LOAD_LIBRARY_AS_DATAFILE Я ешё не успел опробывать данный метод но помойму я на правильном пути =). Сегодня начал делать ручками. Работы не много но помойму через апи будет веселей.
DeHunter насколько я помню, доступно не во всех версиях винды (об этом в MSDN сказано) к тому же вызов LoadLibraryEx с параметром LOAD_LIBRARY_AS_DATAFILE предназначен для последующего вызова LoadResource и иже с ней, и у меня возникают сильные сомнения, что система будет действовать аналогично CreateProcess гораздо проще отлаживать файл (DEBUG_PROCESS), остановившись на точке входа, тогда всё что нужно будет создано системой, а дальше использовать WaitForDebugEvent/ReadProcessMemory etc
S_T_A_S_ там про длл а не про exe. С exe в большинстве случаев не получится, ибо нету релоков. Режим отладки спасет отца русской демократии.
infern0 поскольку релоков нет, то всё даже проще, просто грузить по адресу 0x400000. А свой exe скомпилировать с другим IMAGE_BASE
S_T_A_S_ хм, а ты уверен что система легко запустит exe с базой отличной от 400000 ? При старте она увидит что 400000 свободно и попытается отмапить exe туда. А без релоков скажет что типа опа. imo.
Всё что мне нужно это простая разбивка на секции. Запускать функции мне как раз и не надо. Тоесть никакого импорта. Если система его грузанёт я его сам нулями забью. Сегодня попробывал. Вроде то что надо. Мне просто необходимо чтобы оно правильно разместило секции и всё. Не более. Т.К адресса я сам буду коректировать. Запускать я его буду с помошью эмулятора. И в случае неправильного оффсета сразу буду завершать эмуляцию. Насколько я понимаю релоки необходимы для того чтобы поменять смешения на правильные? Вобшем я пишу чтото типа EXPLOSION(или както так) антивирус. Он с сурцом ишёл. Тока там я в него совсем не вехал. Я попробую сегодня отмепить с помошью LOAD_LIBRARY_AS_DATAFILE. Всем спасибо за ответы.
infern0 )) сколько сижу под nt, столько ставлю ImageBase в 10000h в ехе. ну, разве что когда нужно специально под 9х собрать. и не замечал такой самонадеянности у системы.
DeHunter - а почему бы тебе не использовать NtCreateSection, с аттрибутом SEC_IMAGE. Получишь нормальный Image, почти готовый к исполнению
Так и с обычного LoadLibrary можно разбитый на секции образ получить, только никаких импортов там настроено не будет
Не подскажете прототип функции ? В мсдн нету просто =(. И что это за функции такие с приставкой Nt и Zw ? Это какието системные ?
Сегодня пробывал LOAD_LIBRARY_AS_DATAFILE - не делает оно секции нормально. Оно просто тупо делает обычный мемори мапед файл с того файла который я хочу грузить.
Спасибо всем за ответы. Проблема была решена обычной "ручной" загрузкой. Не так уж много кода и вышло кстати. Сделаю небольшой вывод чтобы другие не путались. LoadLibrary загрузил для меня только нулевую секцию( IMAGE_NT_HEADERS + sections table) и кучу нулей д опервой секции. LoadLibraryEx с флагом LOAD_LIBRARY_AS_DATAFILE сделал тоже самое что и обычный MapViewOfFile. NtCreateSection не пробывал т.к не нашёл даже прототипа в инклудных файлах.