контроль PE-файл <-> процесс

Тема в разделе "WASM.WIN32", создана пользователем sherion, 16 ноя 2005.

  1. DeadCafe

    DeadCafe New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2005
    Сообщения:
    2
    CreateProcess делает NtClose в отношении исходного exe файла, мало того, после вызова NtCreateProcess она еще и закрывает секцию в которую был отображен исходный exe, т.к. NtCreateProcess (а точнее ZwCreateProcess) отмапила секцию в ring3-память создаваемого процесса и небходимости в секции нет. Как результат, SectionObject (XP+) из EPROCESS ничего полезного больше не содержит, а SectionBaseAddress из того же EPROCESS на самом деле указывает на начало exe образа в ring3 памяти процесса (какая нафиг это секция и какой SectionBaseAddress если адресок то из ring3).

    Поэтому получить по Pidу процесса хендл исходного exeшника или хендл секции, отображенной на этот exeшник невозможно - система их не хранит. Вот только для меня загадка - почему тогда исходный exe-файл держится системой и его невозможно удалить (исключение - сеть, там можно)? Его держит менеджер виртуальной памяти? Менеджер кэша? Может тогда они могут подсказать как достучаться до его содержимого...
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    The thread tries to access a page that is not present, and the system is unable to load the page. For example, this exception might occur if a network connection is lost while running a program over a network. This value is defined as STATUS_IN_PAGE_ERROR.



    Это в SDK описано, плясать видимо надо от обработчика Page Fault'ов, тут довольно подробно рассказано http://gl00my.chat.ru/nt/mem.txt
     
  3. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


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





    Еще исключение - альтернативные потоки данных в NTFS.

    Запиши экзешник в поток, запусти, и можно спокойно удалять хоть поток хоть сам файл.
     
  4. DeadCafe

    DeadCafe New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2005
    Сообщения:
    2




    Признаю, был неправ, секция существует, похоже действительно для менеджера памяти. Сейчас отследил от EPROCESS до FilePointer в ControlArea, далее

    lkd> dt nt!_SECTION_OBJECT_POINTERS 0x82f790fc

    получаю:

    +0x000 DataSectionObject : 0x824f8c00

    +0x004 SharedCacheMap : (null)

    +0x008 ImageSectionObject : 0x82e38870

    есть MiFindImageSectionObject и прочие на эту тему...
     
  5. sherion

    sherion New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2005
    Сообщения:
    11
    теперь проблема собрать все PTE (или заставить их собрать) в памяти и организованно прочитать их содержимое.

    поиск в гугле на 'MiFindImageSectionObject' дает удручающие результаты :dntknw: