Загрузка PE

Тема в разделе "WASM.WIN32", создана пользователем DeHunter, 19 июл 2005.

  1. DeHunter

    DeHunter New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    80
    Адрес:
    Ukraine/Kiev
    Здраствуйте.

    Мне необходимо загрузить PE файл(не длл) в свой процесс.

    Тоесть к примеру есть у меня файл test.exe. Я его хочу загрузить. Но не просто как мемори мапед, а имено так чтобы посоздавались секции и прочии радости. Тоесть чтобы произошло практически тоже самое что и во время CreateProcess. Как подобное можно зделать c помошью вин функции? Есть ли спец функция или придётся делать "ручками" ?
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Полностью ручками, к тому же для всех радостей прийдется перехватывать api, чтобы обоим "exe модулям" выдавать свои правильные результаты, а для чего такое потребовалось?
     
  3. Zerro Crash

    Zerro Crash New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2005
    Сообщения:
    29
    помоему "ручками" )
     
  4. DeHunter

    DeHunter New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    80
    Адрес:
    Ukraine/Kiev
    Требуется для эмуляции кода. Тоесть мне нужно отэмулировать код для поиска криптованых вирусов и разных полиморфов.

    Мне не нужно грузить импорты и прочую радость.

    Вот часа 2 назад только нашёл в книге Рихтера

    LoadLibraryEx

    LOAD_LIBRARY_AS_DATAFILE



    Я ешё не успел опробывать данный метод но помойму я на правильном пути =).

    Сегодня начал делать ручками. Работы не много но помойму через апи будет веселей.
     
  5. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    DeHunter

    насколько я помню,


    доступно не во всех версиях винды (об этом в MSDN сказано)

    к тому же вызов LoadLibraryEx с параметром LOAD_LIBRARY_AS_DATAFILE предназначен для последующего вызова LoadResource и иже с ней, и у меня возникают сильные сомнения, что система будет действовать аналогично CreateProcess

    гораздо проще отлаживать файл (DEBUG_PROCESS), остановившись на точке входа, тогда всё что нужно будет создано системой, а дальше использовать WaitForDebugEvent/ReadProcessMemory etc
     
  6. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    на RSDN есть статья о ручной загрузке PE + код на дельфи
     
  7. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    S_T_A_S_

    там про длл а не про exe. С exe в большинстве случаев не получится, ибо нету релоков. Режим отладки спасет отца русской демократии.
     
  8. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    infern0

    поскольку релоков нет, то всё даже проще, просто грузить по адресу 0x400000. А свой exe скомпилировать с другим IMAGE_BASE
     
  9. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    S_T_A_S_

    хм, а ты уверен что система легко запустит exe с базой отличной от 400000 ? При старте она увидит что 400000 свободно и попытается отмапить exe туда. А без релоков скажет что типа опа. imo.
     
  10. DeHunter

    DeHunter New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    80
    Адрес:
    Ukraine/Kiev
    Всё что мне нужно это простая разбивка на секции.

    Запускать функции мне как раз и не надо.

    Тоесть никакого импорта. Если система его грузанёт я его сам нулями забью. Сегодня попробывал. Вроде то что надо.

    Мне просто необходимо чтобы оно правильно разместило секции и всё. Не более. Т.К адресса я сам буду коректировать. Запускать я его буду с помошью эмулятора. И в случае неправильного оффсета сразу буду завершать эмуляцию. Насколько я понимаю релоки необходимы для того чтобы поменять смешения на правильные?

    Вобшем я пишу чтото типа EXPLOSION(или както так) антивирус. Он с сурцом ишёл. Тока там я в него совсем не вехал. Я попробую сегодня отмепить с помошью LOAD_LIBRARY_AS_DATAFILE. Всем спасибо за ответы.
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    infern0

    :)))



    сколько сижу под nt, столько ставлю ImageBase в 10000h в ехе. ну, разве что когда нужно специально под 9х собрать.



    и не замечал такой самонадеянности у системы.
     
  12. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    DeHunter
    - а почему бы тебе не использовать NtCreateSection, с аттрибутом SEC_IMAGE. Получишь нормальный Image, почти готовый к исполнению :)
     
  13. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Так и с обычного LoadLibrary можно разбитый на секции образ получить, только никаких импортов там настроено не будет
     
  14. DeHunter

    DeHunter New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    80
    Адрес:
    Ukraine/Kiev


    Не подскажете прототип функции ? В мсдн нету просто =(.

    И что это за функции такие с приставкой Nt и Zw ?

    Это какието системные ?
     
  15. DeHunter

    DeHunter New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    80
    Адрес:
    Ukraine/Kiev
    Сегодня пробывал LOAD_LIBRARY_AS_DATAFILE -

    не делает оно секции нормально. Оно просто тупо делает обычный мемори мапед файл с того файла который я хочу грузить.
     
  16. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    DeHunter Обычный LoadLibrary(target.exe)
     
  17. DeHunter

    DeHunter New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    80
    Адрес:
    Ukraine/Kiev
    Спасибо всем за ответы.

    Проблема была решена обычной "ручной" загрузкой.

    Не так уж много кода и вышло кстати.

    Сделаю небольшой вывод чтобы другие не путались. LoadLibrary загрузил для меня только нулевую секцию( IMAGE_NT_HEADERS + sections table) и кучу нулей д опервой секции. LoadLibraryEx с флагом LOAD_LIBRARY_AS_DATAFILE сделал тоже самое что и обычный MapViewOfFile. NtCreateSection не пробывал т.к не нашёл даже прототипа в инклудных файлах.