Возможно ли программе вносить изменения в собственный PE-файл?

Тема в разделе "WASM.WIN32", создана пользователем Rel, 20 июл 2011.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    собственно сабж... так как загрузщик винды делает отображение файла на виртуальную память, тупо открыть файл и записать туда N-байт видимо не получится... а если вносить изменения в байты отображения в виртуальной памяти, то внесенные изменения не фиксирубтся на диске из-за флага "копионврайт"... есть ли какие-нибудь варианты? может поменять какие-нить флаги к отображенным страницам виртуальной памяти или еще как-нить? заранее спасибо!
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Скопировать файл, породить процесс который подменит, ExitProcess.
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    не-не... никакого жульничества, типа сторонних процессов, инжектов, батников и тд... только своим процессом...
     
  4. rmka

    rmka Member

    Публикаций:
    0
    Регистрация:
    22 окт 2010
    Сообщения:
    108
    А прямая запись на диск не проканает? Теоретически, должно получится. Я не помню какой параметр передавать DeviceIoControl, но можно получить адрес своего файла и потом писать туда, открыв \\.\PhysicalDriveN
     
  5. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
  6. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    а разве доступ к PhysicalDrive не закрыли?
     
  7. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Rel
    А что значит "и тд"? Эффект "раздвоения личности" можно и только своим процессом провернуть - переименовываешь свой экзешник через MoveFile и создаешь его копию с прежним именем, вносишь изменения в копию и если нужно, то и в свой запущенный образ. Переименованный файл можно удалять при следующем запуске, а можно и вообще не удалять - пусть болтается как куча разного мусора в *\Local Settings\Temp и т.п.
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    gorodon
    вы подкинули мне идею поискать открытый юзермодный хендл на файл с образом... но после нескольких итераций гугления выяснилось, что юзермодный псевдо-хендл на файл образа действительно существовал в операционных системах младше xp и имел значение 4... начиная с xp такого хендла судя по всему нет... так что в принципе все методы указанные в статье по ссылке отпадают... видимо необходимо копать куда-то в сторону отображений и как-то зафлашить изменения сделанные в виртуальной памяти на диск...

    rmka
    антивирусы вряд ли позволят обращаться напрямую к PhysicalDrive... слишком модными сейчас являются всякого рода буткиты...

    leo
    ну это как раз таки был мой запасной вариант))
     
  9. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    rmka,Rel
    Ну, вам бут-сектор не надо ж трогать, поэтому подойдет
    Код (Text):
    1. hFile = CreateFile( "\\\\.\\C:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    -это точно работает и под 7... только насчет привелегий.. по-моему нужны админские..
     
  10. rmka

    rmka Member

    Публикаций:
    0
    Регистрация:
    22 окт 2010
    Сообщения:
    108
    gorodon
    Даже если трогать бутсектор, аверы будут молчать. Проверено неоднократно многими людьми.