Запуск процесса из памяти

Тема в разделе "WASM.BEGINNERS", создана пользователем debugx, 13 мар 2009.

  1. debugx

    debugx New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2008
    Сообщения:
    13
    Привет всем,
    есть масссив байт, считываю в него содержимое файла C:\Windows\notepad.exe, теперь хочу из этого массива байт породить процесс, т.е. запустить процесс из памяти. Подскажите как это сделать?
     
  2. jaja

    jaja New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2008
    Сообщения:
    243
    http://www.wasm.ru/article.php?article=memfile
     
  3. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    jaja Не запустится таким макаром блокнот. Он без релоков.
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    нда... рановато человек начал процессы из памяти запускать
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Сохранить массив из памяти на диск и запустить.
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Clerk
    +1, убил просто
     
  7. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    а хуле - так половина говнокрипторов и работает
     
  8. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    >>а хуле - так половина гуан*рипторов и работает
    Это значит нужно быть таким же ? )
     
  9. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Aspire
    Если память мне не изменяет, в той статье запускающий стаб копирует себя в другое место, освобождает на своем месте память, куда и помещает запускаемый файл, т.е. по адресу 00400000
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    MSoft
    Шутка но с долей правды, как без NtCreateProcess запустить его. Например процесс который должен "запустить из памяти" имеет имя run.exe, как сделать notepad.exe - в юзермоде решений я не вижу, так как имена эти сохраняются при передаче имени секции в тот сервис. Хотя вопрос наверно не об этом, а о том как настроить релоки, подгрузить всё что в импорте и пр., без обращения к файлу на диске, а использую образ в памяти. В таком случае решения есть, это перехват NtCreateFile для того, чтобы возвратить иной от ошибки статус, NtCreateSection чтобы забить ноль, на место хэндла файла, NtMapViewOfSection чтобы подставить свою проекцию и пр. Или создать секцию в директории KnownDlls\, в принципе нужно подумать. Если не устраивают подобные ухищрения, то написать загрузчик.
    Кстати можно попробовать использовать хэндл секции который является одним из параметров для NtCreateProcess. Можно клонировать адресное пространство, можно попробовать поставить хэндл не файлоовой секции(не знаю в этом случае что произойдёт).
     
  11. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    EvilsInterrupt
    нет, это к тому что смешного мало
    и вообще какая вам какая разница - вам же легче работать будет)
     
  12. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    K10 дада :)

    он поидее должен быть SEC_IMAGE, когдато уже сморел в ту сторону
    Код (Text):
    1. if (!((PSECTION)SectionToMap)->u.Flags.Image) {
    2. ...
    3. return STATUS_SECTION_NOT_IMAGE;
     
  13. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    http://hellknights.void.ru/uploads/peloader.cpp
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Aspire
    Кто сказал, что в целевом АП будут те же виртуальные адреса?
    Требуется ведь создать процесс, а не поток. Если бы поток тогда вполне сошел бы и пе лоадер.
    А так можно попробовать сделать объект Section которая будет отображаьтб не файл на диске, а файл подкачки а потом NtCreateProcess и передать туда этот Section
     
  15. juicy_emad

    juicy_emad New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2008
    Сообщения:
    82
    deLight
    Неплохо. А с запакованными файлами работает? (UPX, EXECryptor)
     
  16. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    juicy_emad
    Ну сорс вообще мой. И оччень стааарый. А на запакованных файлах не тестил.
     
  17. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Можно как вариант помещать код загрузчика на свободные адреса изначально, т.е. линковать с нужной нам базой. Так получается и необходимости писать шеллкод нет и не требуется обрабатывать релоки, ну и весь остальной геммор с "перелетами" на другие адреса тоже отпадет.
     
  18. _int2e_

    _int2e_ New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2009
    Сообщения:
    124
    Нельзя.
    Т.к. многие АВ выдают HEUR/Mal. по одной только базе.
    База нужна стандартная, иначе не спасет не один криптор
     
  19. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    int2e
    Ну о палевности же речи не шло, а говорили "как запустить из памяти".
    По поводу АВ, раз уж речь зашла...
    здравый смысл подсказывает что вызов NtCreateProcess, учитывая что ей передается уже расшифрованный бинарник, будет провоцировать громкий аверский крик в 100% случаев.
    верно?
     
  20. debugx

    debugx New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2008
    Сообщения:
    13
    процесс не запускается. Вот на этом условии завершается праздник жизни:
    Код (Text):
    1. if( !poh->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress )
    2. {