Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #89, МАЙ 2006 г.

Ловушки для капризных программ

Крис Касперски

Хакер, номер #089, стр. 089-106-1


Скрытый потенциал ручных сборок

UNIX-программистам свойственно не зажимать исходники, и подавляющее большинство программ распространяются в открытом виде. Однако народ тяготеет к готовым бинарным сборкам, зачастую даже не догадываясь, каких возможностей он лишен! Многие пользователи перекомпилируют программы, но немногие делают это правильно! Ручная сборка — достаточно сложный, неочевидный и порой взаимопротиворечащий процесс, который мы сейчас попробуем заточить.

[введение]

Зачем мучиться, собирая программу руками, если можно просто скачать готовую бинарную сборку. Вот топ основных причин, по которым исходные тексты лучше готовых дистрибутивов:

* сборки есть не для всех платформ (в основном это касается x86-64);

* для текущих версий сборки практически всегда отсутствуют, а релизы выходят нечасто, вынуждая нас использовать версию двухгодичной давности (и это далеко не преувеличение!), с завистью поглядывая на коллег, собравших последнюю альфу с кучей всяких вкусностей и нововведений;

* готовые сборки включают в себя не все фичи, реализованные в исходных текстах (в частности, в состав популярного эмулятора BOCHS входит внешний интерактивный отладчик в стиле Turbo Debugger, в то время как официальные сборки содержат простейший интегрированный отладчик типа "debug.com");

* для многих программ существуют расширения, созданные сторонними разработчиками и устанавливаемые только посредством перекомпиляции;

* готовая сборка зачастую включает в себя много лишних компонентов, которые только отнимают процессорные ресурсы и память, но лично нам ни разу не понадобятся;

* официальные сборки компилируются с типовыми опциями оптимизации, общими для всех процессоров, в результате чего код получается неэффективным и неоптимальным (или даже вообще неработающим, к примеру, на старых процессорах типа 80386 или 80486);

* при выходе новой версии всю сборку заново приходится скачивать, вместо того чтобы забрать только измененные файлы (а для часто обновляемых программ это актуально);

* если программа содержит уязвимость, то атаковать готовую сборку проще, поскольку хакер знает точное расположение всех машинных команд и раскладку памяти;

* заплатки к исходным текстам выходят намного быстрее и чаще, чем к бинарным сборкам;

* пользоваться готовыми сборками - это не unix-way и совсем не по-хакерски.

А вот теперь приведем топ основных причин, по которым готовые сборки лучше исходных текстов:

* готовая сборка "весит" намного легче исходных текстов, даже сжатых самым лучшим архиватором. Больше всех страдают владельцы медленных dial-up соединений, тем более что докачку поддерживают далеко не все серверы;

* в разархивированном виде исходные тексты занимают очень много места (иногда сотни мегабайт), а сама компиляция требует значительного времени, которое, как известно, всегда работает против нас;

* "ручная" настройка программы "под себя" требует внимательного чтения мануалов и изучения конфигурационных скриптов;

* часто требуется скачивать дополнительные заголовочные файлы и библиотеки, обновлять компилятор и т.д., что опять-таки требует времени, трафика и дискового пространства;

Содержание  Вперед на стр. 089-106-2