Автор самостоятельно проанализировал исходный текст утилиты pw. После получения двух версий исходных текстов (файл pwupd.c) утилиты (до и после внесения изменений) и их сравнения при помощи команды diff можно найти различия в исходных текстах данной программы, как это показано на рис. 5.5.
Из сравнения двух версий программы видны различия, аналогичные изменениям, показанным на рис. 5.4.
Приоткрывая завесу
Рекурсивный просмотр директорий
Что делать, если неизвестен файл, в который были внесены изменения? Что делать, если вместо подробной информации об уязвимости доступна только новая версия программы, содержащая многочисленные директории исходных текстов программ? Это именно тот случай, когда наиболее удобно воспользоваться командой diff для сравнения директорий.
Используя флаг рекурсии – г, содержимое директории может быть исследовано при помощи команды diff. При сравнении директорий в этом режиме сравниваются все файлы директории и все поддиректории заданной директории. Возможность рекурсивного сравнения присутствует в команде GNU diff и отсутствует в версиях других операционных систем.
Например, возможность рекурсивного сравнения отсутствует в команде diff операционной системы Solaris 8 и более ранних. Хотя, используя некоторые изощренные приемы работы с командной строкой, это можно выполнить. В соответствии с IAOQ (IAOQ – Ryan Tennant\'s (Argoth) Solaris Infrequently Asked Obscure Questions – список наиболее часто задаваемых вопросов повышенной сложности по системе Solaris Райана Теннанта (Argoth)) рекурсивный просмотр директорий может быть выполнен при помощи следующей команды:
/usr/bin/find. | /usr/bin/xargs /usr/bin/grep PATTERN
Список IAOQ находится по адресу http://shells.devunix.org/~argoth/iaoq.
В поисках золота. Игровой пример
В тринадцать лет автор загорелся идеей оказания воздействия на приложение путем непосредственной работы с файлами. В то время у него был компьютер Apple][+ и он в меру увлекался компьютерными играми. С точки зрения игр он вполне был на уровне мастерства, достигаемого за один-два года практики. Его любимой игрой была Ultima 2. Ultima 2 – это ролевая фантастическая игра, где вам предлагается сыграть роль героя, который в поисках золота может выбирать оружие для истребления монстров. Как в типичных играх этого жанра, цель состоит в повышении уровня мастерства и опыта в деле поиска золота. А попутно при этом решается еще ряд вопросов. Чем опытнее игрок, тем эффективнее он истребляет монстров, тем больше у него золота, тем лучшее оружие и амуницию он может купить.
Однажды автор захотел обмануть игру. Он устал честно убивать монстров. Уже в этом возрасте у него появились мысли, как подправить игру, обманув ее. Первое, что пришло ему в голову, – это изменить количество золотого запаса. Он знал, что при сохранении игры на диск записывается какая-то информация об игре. Нужно было только найти, где именно на диск сохраняются сведения о золотом запасе, и изменить их.
Использованная автором техника немного отличается от изложенной в этой главе, главным образом потому, что тогда в распоряжении автора были программные средства более примитивные, чем сегодня. Запомнив количество золота, автор сохранял игру, а затем завершал ее. В его распоряжении был редактор секторов – программа, позволяющая непосредственно редактировать сектора диска, обычно в шестнадцатеричном формате. Используя функцию поиска редактора, можно было по имени своего героя найти приблизительное место хранения информации, интересующей автора. Короче говоря, автор нашел несколько чисел, соответствующих золотому запасу героя на момент сохранения игры. Увеличив эти числа и сохранив изменения на диске, после загрузки игры автор убедился, что золотой запас героя возрос. Эврика! Это был первый хакинг автора. Таким образом, автор наткнулся на прием, который будет служить ему в течение многих лет.
Автор смог расширить свое маленькое исследование и написал редактор героев Ultima 2, который позволил ему изменять такие свойства героев, как их сила, ум, количество и тип оружия, амуниция и т. д. Конечно, сегодня, по прошествии многих лет, он раскаивается по поводу содеянного. (К сведению читателя автор сообщает, что недавно вышла Ultima IX. В среднем производитель выпускает новую версию игры каждые 2 года.) В настоящее время автор играет в разные фантастические ролевые игры, например Heroes of Might and Magic II, где игрок играет роль героя, пытающегося добыть золото, совершенствующего свое мастерство в деле убийства монстров… Ну, вы поняли идею. На рисунке 5.6 показан старт типичной игры.