Скрытый потенциал UNIX Евгений Зобнин ака j1m Хакер, номер #094, стр. 094-110-4 Решение о замене формата исполняемых файлов с a.out на ELF принесло наряду с очевидными преимуществами столь же очевидные недостатки. Главным достоинством формата ELF является его гибкость и динамическая сущность. В случае с ELF такие процедуры, как symbol lookup и relocation (модификация адресов библиотеки при размещении ее в памяти), производятся во время загрузки программы и библиотек. Динамическому линковщику приходится выполнять гораздо больше работы, нежели в случае с форматом a.out, для которого эти действия выполняются во время компоновки. Как следствие, скорость запуска программы падает в разы. Решение состоит в том, чтобы модифицировать заголовок ELF-файла таким образом, чтобы придать ему черты формата a.out, то есть заблаговременно выполнить symbol lookup и relocation. Причем сделать это не во время компоновки, а в отношении уже готовых и работающих ELF-файлов, как это делают вирусы. Программа prelink, выполняющая эту задачу, была реализована компанией Red Hat. Но так как при обновлении библиотек модификацию программы придется повторить, область ее применения ограничивается системами, в которых регулярные обновления не являются приоритетной задачей. Годами хакеры снимали дамп памяти процессов для изучения внутренней структуры программы в момент ее исполнения. В UNIX снятие дампов тоже практиковалось, но в несколько иных целях, и не хакерами, а ядром операционной системы. Это пресловутые core-файлы, генерируемые ядром, чтобы позволить разработчику отлаживать программу. Исследование и отладка - вполне очевидный повод для снятия дампа. Другое дело - запись дампа для последующего возобновления работы программы с того же места. Именно с этой целью писалась программа CryoPID (cryopid.berlios.de). Ее назначение - заморозить «долгоиграющий» процесс и записать его «снимок» на диск. Затем «снимок», представляющий собой самораспаковывающийся архив, можно запустить и продолжить работу с программой. Выводы Конечно же, есть и другие примеры использования богатого хакерского функционала в мирных целях. Например, механизм inotify, появившийся в ядре Linux версии 2.6.14 и являющийся трассировщиком изменений файловой системы, благополучно используется локальным поисковиком beagle (beagle-project.org). Или легендарный netcat, уж не знаю, для каких целей он был создан, но область его применения просто огромна: от отладки сетевых протоколов и тестирования серверов до перекачки файлов и организации удаленного доступа к машине. А чего стоят бронебойные комбинации Alt+SysRq+..., действующие прямо на ядро Linux, ведь они тоже были введены в помощь разработчикам ядра. Легко заметить, насколько универсальна UNIX. Сколько идей и приемов было перенято из одной области ее применения в другую. Как здраво мыслили ее создатели, не делая границ между пользователями и разработчиками операционной системы. |