Идея PE пакера. Рабочая ли?

Тема в разделе "WASM.WIN32", создана пользователем SomeOne_TT, 28 фев 2005.

  1. SomeOne_TT

    SomeOne_TT New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2005
    Сообщения:
    39
    В течении ближайших дней собираюсь сделать простенький PE-пакер.



    Идея такова: для простоты не трогать заголовок.

    Затем создать новую секцию для распаковщика,

    реальные секции из файла сжать и записать в мою секцию



    Далее в таблице секций обнулить физические длины всех секций (кроме,возможно, ресурсной (UpdateResource)) и моей.



    Записать реальные величины секций и EP в распаковщик и установить новую ЕP. Все!



    Предполагается, что винда при загрузке сама настроит таблицы импорта-экспорта и запишет их в выделенные страницы (тех самых секций с нулевой raw длиной).

    Затем мой распаковщик получит управление,распакуют старые данные, перепишет их на место (с учетом таблиц экспорта-импорта-тлс и т.д) и передаст управление на оригинальную EP.



    Вопрос: нет ли каких-нибудь неучтенных и важных моментов,которые воспрепятствуют воплощению этого сценария в жизнь?
     
  2. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Если секция, содержащая IAT, будет с нулевой raw длиной, винда импорты не настроит никак.
     
  3. SomeOne_TT

    SomeOne_TT New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2005
    Сообщения:
    39
    угу )

    Ладно. А если записать все эти таблицы в мою секцию и поменять смещения?
     
  4. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Можно сохранить IAT в запакованом виде, стереть ее из файла, убрать ее упоминание из

    OptionalHeader.Directories, создать cвою IAT на две функции: LoadLibrary-GetProcAddress (если влом руками искать в памяти) - затем поставить в OptionalHeader.DataDirectories адрес своей IAT - а при старте распаковщика переписать на старое место вторые копии ArrayAddressImpFunc для каждой dll и руками их заполнить (LoadLibrary-GetProcAddress по сохраненной у себя копии IAT).
     
  5. SomeOne_TT

    SomeOne_TT New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2005
    Сообщения:
    39
    А TLS записи как обрабатываются,во время загрузки,или во время исполнения?
     
  6. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    703
    во время загрузки, если тлсы не верные будет бок возьми екзэшник пакованный упх потри там нулями тлс и увидишь Ж))
     
  7. MoonShiner

    MoonShiner New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    44


    И как создать новую секцию в файле не трогая заголовок? :derisive:

    Отдельно нужно обработать вещи, связанные с Delay Import... Ежели таковой будет. А также, в твоем случае желательно корректно работать с выравниванием с FileAlignment.