CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2002 ГОД

Вездесущий EXE

Руслан РИЗВАНОВ rizvanov_ruslan@mail.ru

И вправду, игры, серьезные (и не очень) программы, так сказать, используют этот формат и без него обойтись не могут. Попробуйте-ка запустить программу под Windows, у которой нет EXE-файла — нонсенс. Это во многих случаях, по сути дела, может означать, что нет и самой программы. Сколько уже говорилось о многочисленным графических, звуковых форматах, а о том, в каком формате содержатся данные в файле с расширением .exe, — ни слова. И поэтому просто так, не корысти ради, я полез в Сеть, чтобы узнать побольше о том, с чем каждый день приходится работать. И теперь хочу поделиться полученными сведениями с Вами, многоуважаемые читатели. Честно скажу, я не системный программист и не писатель вирусов, чтобы знать все о содержимом этих файлов, поэтому в моем материале вы не найдете детальной спецификации EXE (PE), а лишь только описание темы с точки зрения пользователя, максимум — прикладного программиста.

Несмотря на то, что файлы имеют расширение .exe, данные, хранящиеся в них, могут быть представлены в структуре различных форматов. Один из таких форматов называется PE Portable Executable (переносимый исполняемый). Изначально он появился в ОС Windows NT, а затем перекочевал и в Windows 9x. Выполнен он в соответствии со спецификацией COFF (общего формата объектных файлов), распространенной в Unix-системах, но сохранил некоторую совместимость с форматом ДОС (об этом далее). В упрощенном виде его структура представлена на Рис. 1. Рассмотрим по порядку ее элементы. Первым идет, как ни странно, заголовок (MZ) MS-DOS. Он предназначен для определения совместимости с используемой ОС. Вы, может быть, замечали, что при запуске exe-файла в формате PE из ДОС выводится текст: «This programm must be run under Win32». Это результат работы так называемой stub-программы. Она представляет собой программу реального времени, совместимую с ДОС и вносимую в EXE(PE) при компиляции (вернее, при линковке). Если б ее не было, ДОС пытался бы прочесть данные, что могло привести к ошибке или сбою. При запуске же под Windows stub-программа пропускается. Далее в структуре следует заголовок PE. Он определяет начало PE-файла и содержит в себе общую информацию о нем (наличие отладочной информации, тип машины, на которой было создано приложение, и пр.). После этого в PE идут заголовки сегментов и собственно сегменты. Именно в сегментах и хранится все содержимое файла. Вы можете увидеть названия некоторых сегментов, открыв EXE(PE) в текстовом вьювере (в FAR, VC). Приложения могут иметь 9 сегментов: .text (сегмент исполнимого кода); .bss (содержит данные приложения, в том числе и переменные); .rdata (информация только для чтения — константы и пр.); .data (содержит глобальные переменные); .rsrc (сегмент ресурсов — объектов (рисунков, строк, курсоров, Рис. 1иконок и пр.), внедряемых при компиляции в exe-файл и используемых программой из этого файла); .edata (сегмент экспортируемых данных); .idata (сегмент импортируемых данных); и .debug (сегмент отладочной информации, которая может храниться и в отдельных файлах). Думаю, из названий сегментов ясно, что и для чего. Более детальное описание этих сегментов займет много места и будет интересно разве что системным программистам и вирусописателям. Для последних, кстати, в Интернете даже существуют специальные описания PE и возможностей его заражения, одна из которых состоит в том, что тело вируса частями распределяется по свободному пространству сегментов, при запуске оно собирается воедино программой, находящейся, например, в месте stub, и передает управление основной программе exe-файла. Это, конечно, общеизвестная информация. Но надеюсь, вы не займетесь написанием вирусов. А то известны такие «герои» — нахватались кой чего в вузах, и давай валять всякую гадость — с точки зрения программирования полнейший примитив, только людям нервы треплет… Теперь, после небольшого рассказа о формате PE и о содержании EXE-файлов в этом формате, логично перейти к рассмотрению способов коррекции и трансформации этого самого содержания.

Редакторы ресурсов

Как уже говорилось выше, в EXE-файле (а также и в DLL) могут содержаться ресурсы. Обычно в профессиональных коммерческих проектах все данные (текстовые сообщения, курсоры, диалоговые окна и пр.), используемые в программе, хранятся именно в них. Это позволяет, к примеру, не прибегая к перекомпиляции исходного текста, создавать версии программы на различных языках. Достаточно лишь перевести тексты и сообщения в ресурсах — и все. Это в состоянии сделать даже человек, далекий от программирования. Для такой коррекции используются редакторы ресурсов. В Интернете развелось много программ подобного рода. Предлагаю вашему вниманию одну из них. Зовут ее Resource Hacker (работает под 9х, про 2000/ХР ничего не знаю). Обитает по адресу http://rpi.net.au/~ajohnson/resourcehackerи в других не столь отдаленных местах Сети. Это один из наиболее простых в использовании и достаточно функциональных редакторов ресурсов. И сразу, без лишних слов, давайте перейдем к делу — издевательству над сообщениями горячо любимой ОС Windows. Предлагаю изменить текст диалогового окна, возникающего (иначе это не назовешь :-)) при удалении группы файлов. Он, как и все окно, находится в файле shell32.dll (Windows/System). Предупреждаю: за возможные последствия автор статьи ответственности не несет! Так вот, загрузите его в редактор ресурсов, перейдите в секцию Dialog, а в ней, в разделе 1049 (по крайней мере у меня он находится там), щелкните по единственному значку — появится то самое диалоговое окошко. Далее щелкните по его элементу (тексту или кнопке), и в редакторе ресурсов в секции, содержащей параметры и текст окна, соответствующая этому элементу строчка выделится красной звездочкой (слева). Измените текст на свой, нажмите кнопку Compile Script (чтобы увидеть внесенные изменения) и сохраните все в файл с таким же именем (shell32.dll), но в другом месте. Теперь необходимо скопировать этот файл в директорию Windows/System и заменить тот, что там уже находится. Что, кричит система, Рис. 2понимаешь ли, сопротивляется? Но ничего — мы ее сейчас через ДОС… Постарайтесь с помощью загрузочного диска или еще как-нибудь перезагрузиться в ДОС — там все скопируется и заменится без проблем. Теперь перезагрузитесь в Windows и попробуйте удалить группу файлов (Shift+Del)… Лично у меня выводится такое окошко (Рис. 2).

Сжатие EXE

Еще с того же ДОС'а известны программы, сжимающие данные внутри EXE-файла и при этом сохраняющие его способность запускаться и исполняться. Под Windows такие программы тоже есть. Называются UPX (Ultimate Packers for eXecutables). Они позволяют сжимать данные внутри EXE (различных форматов, в т.ч. и PE) и DLL . Это очень хорошо, например, при создании Autorun'ов к дискам (быстрее ведь загружается и в то же время занимает меньше места) и в других целях, где обычный архиватор не подходит. Кстати, может быть, вы видели потрясающие демо-программы размером до 64 Кб, но притом вытворяющие чудеса при помощи OpenGL или Direct3d и сопровождающие это все музыкой (посмотрите демку SQWISH — на http://www.intercon.ru/~and). Так вот, они тоже сжаты UPX'ом. Можете поискать этого рода программы в Интернете по слову «UPX» или на сайте http://www.torry.ru(поиск по слову «UPX»). Мне приглянулась программка, расположенная по адресу http://upx.sourceforge.net. Она работает с командной строки, поддерживает очень большое количество форматов EXE, относительно долго сжимает, зато сверхбыстро распаковывает (что и требуется).

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov