загрузка процесса

Тема в разделе "WASM.WIN32", создана пользователем Novi4ek, 9 май 2008.

  1. Novi4ek

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    Помогите пожалуйста разобраться!

    При загрузке нового процесса загрузчик проецирует исполняемый файл в адресное пространство нового процесса. Может ли быть такая ситуация что при недостатке физической памяти часть кода программы будет выгружена не в файл подкачки (например его нету или он мал), а в никуда (или в сам файл) и потом считана с исполняемого файла на диске?

    Если такое возможно, то выходит что разные исхищрения для удаления исполняемого в момент исполнения pe файла небезопасны для этого процесса?
     
  2. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    AFAIK, выгружаться исполняемый файл будет как раз сам в себя - независимо от того, есть файл подкачки или нет. Нет, не так.

    Изменённые страницы, конечно, винда должна будет выгрузить в файл подкачки...
    А не изменённым страницам выгружаться на диск незачем - просто "потерять" их, а при необходимости загрузить из исполняемого файла.

    Есть чо почитать?)
     
  3. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Novi4ek
    Как это сделать (удалить выполняющийся ехе-шник)? Желательно из него-же самого. Под XP и выше?
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Если нет доступа к ядру ничего не получится, помню в ранних версиях был баг с манипуляциями NtClose, но потом его закрыли. Инжектишся куданибудь в чужой процесс, а свой завершаешь, а затем можно и удалить файл.
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Охх. (мысли вслух).
    При загрузке программы файл пдокачки не используется. страницы выгружаются туда же, откуда были считаны, точнее говоря - страницы просто удаляются из физической памяти. по требованию снова грузятся из файла.
    другое дело - если они модифицированы. тогда они выгружаются в файл подкачки.
    см мою статью про списки страниц

    зы. в драйверах совсем подругому. там проекции не используются, а файл просто считывается в память. поэтому выгружается он весь в файл подкачки и бинарник на диске не нужен и легко удаляется при желании.

    а все методы удаления испольняемого файла в предыдущих версиях винды основывались на том, что управление у файла отнимается и больше он уже не трогается, поэтому и удаляется.
     
  6. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Clerk
    Great
    Хорошо. А создать юзермодный процесс не имеющий под собой файла каким-нибудь образом можно? Имеется ввиду стандартный способ, тк дыру закрыть могут.
     
  7. Clerk

    Clerk Забанен

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

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    Все ясно спасибо
     
  9. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    - лишнее -
     
  10. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Clerk
    Образ именно запускаемого файла? Или любой файл сойдет? Скажем, создаем суспендед (или как там) процесс из файла 'readme.txt'.. Подменяем код и запускаем. Или файл с одним MZ-PE хедером и дальше текст какой-нибудь, чтоб в глаза не бросалось.. Или своп. Он-то точно есть..
     
  11. Clerk

    Clerk Забанен

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

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    не получится помоему же так сделать - ZwCreateSection свалится с SEC_IMAGE. а от CreateSuspended потом зависит тока вызов финальный ZwResumeThread()
    или я тебя не понял..)
     
  13. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Great
    Так, хорошо. А правильно оформленый хидер на пустой РЕ-шник? Только чтоб процесс создать. Скажем так: MZ хидер | левый текст (например ридми) | PE хидер | продолжение ридми. Все необязательные поля заполнить и хидеры оформить текстово для запутывания.
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Думаешь строчка MZ в начале файла непалевна? =))
     
  15. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Ну раз пошла такая пьянка, что мешает создать такой файл уже в режиме рантайма где-нито в TEMP-папке, запустить, проинжектиться в его процесс, и потереть исходный екзешник?
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Секцию создаёт MiCreateImageFileMap(), там проверок куча, если ей такого формата файл скормить, она ругаться будет. А расширение имени процесса может быть любым.
     
  17. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    DEEP
    сильно много подозрительных операций требующих покрытия. Кроме того изменения в фс могут мониториться, а в папке темп и подавно.
    Clerk
    Great
    Во первых то что на виду обычно не подозрительно. Во вторых в 'MZ' (интересно - меняешь на 'ZM' и прога воспринимается как чисто досовая, написал в начале 'ZMEI " все ОК пашет дос часть) система читает только смещение по 3С. Все остальное заполняем копиврайтом от программера 'MZ0rA'. И файл должен быть броский, наглый - 'readme.1st', например.

    Только-что попробовал в начале живого РЕ-шника вписать строку 'MZOR Copyright(c) 1532 ' - все пашет ОК.

    ЗЫ забыл написать - XPSP2. Впрочем, подозревю, в висте та-же петрушка.
     
  18. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    логично, из DOS хидера только чекается сигнатура и берется e_lfanew.

    Автор - поясни, что ты хочешь. Вопрос в начале топика был другой.
    Хочешь создать неприметный исполняемый файл, выдавая его за текстовый? Ну так и скажи тогда)
     
  19. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Great
    Нет, идея у меня другая. Исполняемый файл представляет собой не один большой модуль, а кучу маленьких не зависящих от своего положения в исходном большом ехе-шнике модульков спец формата плюс небольшой код для их связки. В процессе исполнения модульки время от времени случайным образом меняют свое положение и пересвязываются. И время от времени новые сборки должны записываться в исходный файл. Топикстартер задал вопрос из которого коссвено следовало, что он знает как удалить исполняемый файл во время исполнения,
    что близко к его перезаписи. Вот я и решил развить тему, узнав какие вообще варианты для перезаписи ехе-шником самого себя существуют.
     
  20. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Интересно, конечно, но я смысла пока не вижу. Это получается тоже самое, что и подгружать длл-ки и вызывать их функции, только заморочки с форматом...