Вопрос по секции ресурсов

Тема в разделе "WASM.WIN32", создана пользователем MoonShiner, 2 июн 2005.

  1. MoonShiner

    MoonShiner New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    44
    Добрый день. Интересует следующий вопрос: Насколько сильно при упаковке можно извращаться с секцией ресурсов? Пример: я упаковываю секцию ресурсов, размещаю упакованные данные в конце оригинальной секции и забиваю начало оригинальной секции .rsrc нулями. Упаковываю ТОЛЬКО секцию ресурсов. Заголовок PE не трогаю, все данные о ресурсах оставляю как и были. При запуске распаковываю ресурсы по нужному адресу и передаю управление на OEP. В ХР никаких проблем с этим не было. В 98-х же проблемы возникают, причем зачастую непонятные. В связи с этим и интересует как работа загрузчика с секций ресурсов, так и наиболее полное описание возможных манипуляций и ошибок при работе с ресурсами при упаковке. Конкретно, почему могут происходить ошибки при упаковке секции ресурсов (включая их дерево и т.д.)
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Для защиты ресурсов я использовал несколько необычный метод. Секцию ресурсов в защищенном файле убирал полностью, а сами ресурсы хранил в своем собственном формате. К загрузчику добавляется часть, перехватывающая все апи работающие с ресурсами и обеспечивающая прозрачную работу с ресурсами для защищенного файла.

    В дампе при этом ресурсов совсем не оказывается, что сильно затрудяет распаковку (хотя есть обходные методы).

    Правда под 9x я ничего такого не делал, проверено только под NT.
     
  3. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    MoonShiner




    Думаю правильно не секцией, а директорией, т.к. для ресурсов не обязательна отдельная секция, как и не обязательно имя .rsrc



    И дело в том, что ресурсы используются не только самой программой, а и всеми explorer оболочками, если ты упакуешь иконку или версию, то никто их не увидит (одно из правил, если имеется RT_VERSION то для её отображения директория должна располагатся в начале секции)



    Если это тебе не надо, то можешь все упаковать, а до оригинально EP главное правильно восстановить (в заботу лоадера проверка ресурсов не входит)



    з.ы. и поиск по форуму в конце концов ... тема заезджена, иначе давай конкретные вопросы
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576




    Обязательно, иначе в некоторых случаях будет глючить.
     
  5. MoonShiner

    MoonShiner New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    44
    Секция-директория, это малоинтересно... Имя .rsrc же обязательно для 9х в некоторых случаях. Экспорт и импорт компиляторы пока пихают куда только могут, а ресурсы в большинстве случаев все-таки целиком сосредоточены в .rsrc-секции. Это я знаю. Про затирание иконок я тоже знаю и меня это мало волнует. Смысл в том, что винда не грузит некоторые файлы с запакованными ресурсами если этот "архив" так и кинуть в начало оригинальной секции ресурсов, забив остаток после архива нулями. Т.е. сам загрузчик проверяет валидность ресурсов и каким-то образом использует их при создании образа в памяти? Нужна инфа по ресурсам и работе с ними загрузчика.
     
  6. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    > Для защиты ресурсов я использовал несколько необычный метод.



    Скорее кривой, а не необычный - пропадут иконки, стили под XP, а про всяческие TYPELIB и REGISTRY даже говорить не приходится.
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    MoonShiner





    Как раз для NT+



    хотя не буду утверждать, судя по форумам у некоторых

    файлы с переименованной .rsrc работающие на 9x

    не пашут в XP
     
  8. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    > Нужна инфа по ресурсам и работе с ними загрузчика.



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

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576




    win nt/2k sources?
     
  10. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Asterix




    Буду рад если вспомнишь каких, я только видел ".rsrc" в oleaut32.dll (что описано в UPX'е), воможно это имеет значение для VB'шных прог, но ниразу не встречал из-за этого глюков (ну кроме некоторых дебильных редакторов ресурсов ищущих их по имени секции :)



    MoonShiner




    Ещё работу лоадера можно "наглядно" посмотреть в ollydbg
     
  11. Ms Rem

    Ms Rem New Member

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





    Те ресурсы которые должны быть видны, копируются в выходной файл в неизменном виде, тоесть все иконки и стили сохраняются. А те ресурсы в которые лезть незачем, тоесть диалоги и.т.д. будут защищены. И восстановить их будет куда сложнее, чем просто снять дамп.
     
  12. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    MoonShiner




    Давай потестим так, вот прога без имени .rsrc и набитая мусором, если она у кого-то не запустится значит вина действительно лоадера
    Код (Text):
    1. ;=================================================
    2. format      pe gui
    3. include     '%fasminc%\win32a.inc'
    4. ;=================================================
    5. data        resource
    6. message     db      'resource garbage',0
    7. entry       $
    8.             invoke  MessageBox,0,message,message,0
    9.             invoke  ExitProcess,0
    10. data        import
    11. library     kernel32,'kernel32.dll',\
    12.             user32,'user32.dll'
    13. include     '%fasminc%\apia\kernel32.inc'
    14. include     '%fasminc%\apia\user32.inc'
    15. end         data
    16. end         data
    17. ;=================================================


    [​IMG] 1890835895__rsrc.exe
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Win98 SE - не запускается (Unknown file format)

    Win2k SP4 - запускается

    WinXP Sp1 - не запускается
     
  14. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    WinXP SP2 - не запускается - Could not create process
     
  15. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    От блин, у меня как раз Win2k SP4 %) На NT4.0 должно работать, другие значит что-то проверяют, интересно а чего вдруг Unknown file format? PE то правильный, по спецификации ... Хотя XP может манифест ищет, а 98-я чего?