Оценить:
 Рейтинг: 0

Защита от хакеров корпоративных сетей

Год написания книги
2005
<< 1 ... 15 16 17 18 19 20 21 22 23 24 >>
На страницу:
19 из 24
Настройки чтения
Размер шрифта
Высота строк
Поля

Список IAOQ находится по адресу http://shells.devunix.org/~argoth/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 показан старт типичной игры.

Рис. 5.6. Начало игры Heroes of Might and Magic II

В частности, обратите внимание на золотой запас героя: 7500 порций. Первое, что делает автор, – он сохраняет игру под именем hackl. Затем он изменяет золотой запас на минимально возможную сумму. Вскоре автор объяснит причину своих поступков. Самое простое – это купить что-нибудь недорогое. Автор обычно отправляется в замок и покупает скелет – одну из самых дешевых вещей. После покупки скелета у автора становится 7425 порций золота. Автор сохраняет игру под именем hack2 и затем в режиме командной строки запускает команду сравнения файлов, как показано на рис. 5.7.

Рис. 5.7. Протокол сравнений двух файлов командой DOS fc

Команда fc сравнивает два файла. Если задать опцию /b, то выполняется побайтное сравнение. В результате печатается отчет найденных различий в шестнадцатеричном виде. Поэтому следующее, на чем следует остановиться, – это калькулятор Windows (программа calc.exe), который позволяет перевести числа 7500 и 7425 из десятичной системы счисления в шестнадцатеричную. Если выбрать подменю Scientific меню View калькулятора, то станут доступными дополнительные возможности преобразования чисел, включая преобразование из десятичного формата в шестнадцатеричное, что нам и требуется. При выбранном режиме Dec следует набрать 7500 и затем щелкнуть на кнопке Hex. В результате получим представление числа 7500 в шестнадцатеричной системе счисления 1D4C. Повторив то же самое для числа 7425, получаем 1D01.

Просмотрев результаты выполнения команды fc, обнаруживаем многообещающее различие по адресу 368 (в шестнадцатеричном представлении). Ранее там было 4C, а стало 01, что точно совпадает с проведенными вычислениями. Также можно предположить значения других чисел. Ранее в замке было восемь скелетов. После покупки одного осталось семь. На это, кажется, указывает байт по адресу 3AE4. Байт по адресу 3AD3 может означать один скелет в гарнизоне замка, где прежде не было ни одного.

Но поскольку автора интересует золотой запас, то он запускает шестнадцатеричный редактор и загружает файл hack2.gm1. Шестнадцатеричный редактор схож с редактором секторов, но ориентирован на работу с файлами, а не с дисковой памятью. Перейдя по смещению 368, видим, что там находятся данные 1D 01. Отметим, что цифры в числе расположены в обратном порядке, что непривычно для людей, которые используют язык, имеющий одинаковые корни с латинским языком. Объясняется это порядком запоминания чисел в процессорах Intel: наименее значащий байт числа запоминается по младшему адресу. Есть единственный способ удостовериться в правильности предположения о хранении найденной величины – изменить найденный байт. Автор изменил самый правый байт числа 1D (поскольку в этом случае результаты изменения проявятся сильнее всего) на величину FF (максимальная величина в шестнадцатеричной системе счисления). На рисунке 5.8 показан результат загрузки hack2.gm1 при старте игры.

Рис. 5.8. Та же игра после редактирования ее сохраненных данных

Обратите внимание на золотой запас, который теперь составляет 65 281 порцию. Быстрая проверка на компьютере подтверждает, что это десятичное представление шестнадцатеричного числа FF01. Теперь у игрока появилось серьезное преимущество: он может с легкостью крушить своих воображаемых врагов. Если бы игрок захотел увеличить свой золотой запас до максимально возможной в игре величины, то ему следовало бы также увеличить следующий байт справа от 1D, который в момент исследования был равен 0. В худшем случае несколько попыток изменения смежных байт в файле с помощью шестнадцатеричного редактора подскажут, какой байт следует изменить для увеличения золотого запаса игрока.

Конечно, цель этой книги не в том, чтобы научить читателя обманывать игры. Есть более достойное применение изложенного материала. В частности, для подобных игр написан редактор сохранения игр, возможно, на основе использования изложенной техники. Также можно включить в игру несколько фрагментов кода, страхующих игрока от проигрыша. Читателю, заинтересовавшемуся подобными вопросами, можно посоветовать найти эту информацию в Интернете.

Если читатель знаком с игрой, то он может быть удивлен, почему изложенное не проиллюстрировано на примере современной версий игры Heroes of Might и Magic III. Причина будет раскрыта далее.

Исследование инструментария поиска различий

До рассмотрения других, более интересных примеров следует обсудить некоторые инструментальные средства, выполняющие поиск различий. В предыдущем разделе было рассказано об использовании команды fc и разобран небольшой пример ее применения. Также говорилось об использовании шестнадцатеричных редакторов, редакторов секторов и калькулятора calc.exe для этих целей. Теперь давайте более внимательно познакомимся с применением и функциональными возможностями инструментальных средств сравнения.

Применение инструментария сравнения файлов

Первый шаг определения различий в файлах состоит в сравнении двух файлов. Для того чтобы найти различия, нужен инструментарий сравнения файлов. В качестве примера рассмотрим некоторые примеры инструментальных средств сравнения файлов.

Использование командыfc

Команда fc, включаемая в течение многих лет в DOS, а позднее и в Windows – первый инструментарий, который будет подробно рассмотрен. На машинах с операционной системой Windows 9x команду fc можно найти в директории c: \windows\command, c: \windows или, в крайнем случае, в одной из директорий Windows. По умолчанию директория c: \windows\command перечислена в списке каталогов, используемых для задания порядка поиска выполнимых программ. Список задается командой path. Поэтому при необходимости можно просто набрать fc и выполнить команду. Опции команды fc перечислены ниже:

О переключателе /b уже говорилось. При сравнении двоичных файлов без указания переключателя /Ь процесс сравнения файлов завершается при достижении символа конца файла или нулевого байта. У этой команды переключатели режимов не чувствительны к регистру. Другими словами, работа команды не зависит от того, набраны ли переключатели строчными или заглавными буквами. Например, в файле подсказки описан переключатель /В, набранный заглавными буквами, в то время как в книге продемонстрирована прекрасная работа команды с переключателем /b. У команды есть ряд дополнительных переключателей, который читатель сможет изучить самостоятельно. В дальнейшем будет сказано о ряде утилит, которые сравнивают текстовые файлы лучше, чем команда fc. Но если выбранная читателем утилита может и отсутствовать на его компьютере, то, в крайнем случае, fc всегда присутствует на машинах с операционной системой Windows.

Примечание

В первом приближении эквивалентом команды fc в системе UNIX является команда cmp -l (l — строчная буква).

Использование командыdiff

Первоначально команда diff появилась на платформе UNIX. Она позволяет сравнивать двоичные файлы, но особенно полезна для сравнения текстов. Фактически ее возможностей сравнения текстовых файлов более чем достаточно. Полностью перечислить все возможности команды diff на страницах этой книги не представляется возможным, потому что их слишком много. Но с ними можно ознакомиться на оперативных страницах руководств UNIX или по документации (man page, сокр. manual page – оперативная страница руководства, – гипертекстовая страница консультативной информации, поясняющая действие конкретной команды).

Для того чтобы у читателя стожилось представление о команде diff, если он не слышал о ней ранее, в главе приведен список наиболее часто используемых возможностей команды. Команда diff определяет изменения в двух файлах, которые нужно сделать для приведения их в соответствие друг к другу. Она позволяет запоминать версии файлов без необходимости хранения полных копий каждой версии файла. Команда diff настолько хороша, что понимает, должны ли строки удаляться или добавляться в файл при приведении файлов в соответствие друг к другу:

Указанные в аргументах два файла (decode2.c и decode.c) полностью совпадают, за исключением строки с оператором #include <newinclude.h>, добавленной к файлу decode2.c. В первом примере файл decode.c – первый аргумент команды diff, а decode2.c – второй. Протокол работы команды свидетельствует о том, что если во второй файл в 14-ю строчку добавить 15-ю строку из файла decode2.c #include <newinclude.h>, то далее файлы будут соответствовать друг другу. А если поменять аргументы местами, то для приведения файлов в соответствие надо будет удалить 15-ю строчку файла decode2.c (обратите внимание на буквы a в первом отчете и d во втором).

Результат выполнения команды называется выводом команды diff (diff-файлом), или файлом различий, и обладает тем свойством, что если есть diff-файл и один из исходных сравниваемых файлов, то второй файл можно восстановить. Именно поэтому для отправки небольшого количества изменений текстового файла, особенно исходных текстов программ, часто используется пересылка файла различий. При отправке по почте открытых исходных текстов исправлений уязвимостей программ отправитель не всегда пересылает файл различий, который позволяет исправить исходный текст программы. Программа, которая исправляет ошибки, используя файл различий, называется патчем (заплаткой).

В зависимости от версии diff в отчет команды, кроме выявленных различий, включается и другая информация, например для редактора ed или системы управления аудитом (RCS – Revision Control System). Для того чтобы ее можно было обработать, включаемая информация должна содержать регулярные выражения для выполнения некоторых операций, понимать файлы программ, написанных на языке С, и, как часть своего отчета, может выводить имя функции, в которой выявлены изменения.

Благодаря проекту Cygwin доступна Windows-версия команды diff (как и большинство других программ UNIX). В рамках этого проекта задуман перенос ряда программного инструментария GNU и других программ UNIX на платформу Windows. В той или иной форме продукты GNU выпускаются под защитой общедоступной лицензии GNU (GPL – GNU PublicLicense), в соответствии с которой продукт становится общедоступен. Дополнительные сведения (включая пакет, содержащий Windows-версию команды diff) могут быть найдены по адресу http://sourceware.cygnus.com/cygwin (http://sourceware.cygnus.com/cygwin).

Компания Microsoft включила утилиту Windiff в состав инструментария ресурсов (resource kits) Windows NT и Windows 98. Это графическая версия команды diff, которая отображает изменения разными цветами и имеет графическое представление удаляемых или вставляемых строк.

Работа с шестнадцатеричными редакторами

Говоря о применении шестнадцатеричных редакторов, уже упоминалось о возможности изменения двоичных файлов. Шестнадцатеричный редактор – это программное средство, позволяющее пользователю получить непосредственный доступ к двоичному файлу в обход приложения, использующего этот файл. Говоря о двоичных файлах, имеются в виду и текстовые файлы. Конечно, большинство людей используют для редактирования текстовых файлов специальные программы, поскольку применение для этих целей шестнадцатеричных редакторов неудобно и, говоря образно, сродни самоубийству.

В общем случае шестнадцатеричный редактор не понимает формат редактируемых файлов. Некоторые шестнадцатеричные редакторы снабжены мощными возможностями поиска, преобразования цифрового представления чисел, вставки, удаления и др. Но на самом деле они работают с последовательностью байтов. Только пользователь шестнадцатеричного редактора определяет, какие байты следует изменить, как это ранее было продемонстрировано на примере игры.

Известно большое количество шестнадцатеричных редакторов, которые различаются ценой (от свободно распространяемых до коммерческих), качеством и функциональными возможностями. Для большинства людей выбор редактора определяется личными предпочтениями. Читателю следует попробовать несколько редакторов, пока он не найдет наиболее ему подходящий.

Далее кратко будут рассмотрены три шестнадцатеричных редактора: – Hackman, [N] Curses Hexedit и Hex Workshop. Их рассмотрение не охватывает все шестнадцатеричные редакторы. Просто они представляются автору наиболее интересными.

Hackman

Hackman – свободно распространяемый шестнадцатеричный редактор в среде Windows. У него ряд возможностей, включая функции поиска, удаления, вставки, дизассемблирования, шестнадцатеричный калькулятор и многое, многое другое. Как видно из рис. 5.9, графический интерфейс пользователя (GUI) несколько аскетичен.

Рис. 5.9. Интерфейс пользователя редактора Hackman

В конце рис. 5.9 показано, что редактор Hackman предоставляет интерфейс командной строки. На рисунке приведен пример шестнадцатеричного редактирования файла cmd.exe при помощи редактора Hackman. Hackman легок в использовании. Кроме основных функциональных возможностей, необходимых пользователю при работе с шестнадцатеричным редактором, он дополнительно предоставляет хорошо продуманный интерфейс пользователя. Благодаря недавним усилиям разработчиков он надежен и удобен для пользователя. Редактор можно найти по адресу www.technologismiki.com/hackman (http://www.technologismiki.com/hackman).

[N] Curses Hexedit

[N] Curses Hexedit – другая свободно распространяемая программа (фактически ее можно рассматривать как более свободно распространяемую, поскольку она распространяется по общедоступной лицензии GPL). Поскольку программу можно получить по общедоступной лицензии, то ее исходные тексты общедоступны и разрешено их улучшать или адаптировать под нужды конкретного пользователя. Существуют версии редактора [N] Curses Hexedit для всех основных UNIX подобных операционных систем и DOS.

Если читатель думает, что интерфейс Hackman простой, то у этой программы, как видно из рис. 5.10, – явно спартанский.

Рис. 5.10. Интерфейс редактора [N] Curses Hexedit, DOS версия

Функциональные возможности редактора обычные для этого класса программ. В редакторе реализована функция поиска, присутствует простой двоичный калькулятор, обычные команды просмотра и редактирования. Список команд представлен на рис. 5.11.

Рис. 5.11. Подсказка редактора [N] Curses Hexedit Help Screen

Если кому-то покажется, что в этом редакторе реализованы далеко не все функциональные возможности, то это компенсируется простотой, легкостью использования ресурса и поддержкой многочисленных платформ. Согласно журналу изменений, текущая версия редактора – 0.9.7 от 8 августа 1999 года. Из этого не следует, что проект свернут и не имеет будущего. Скорее всего, редактор полностью удовлетворяет требованиям своих разработчиков. Возможно, если автор решит добавить что-либо или будет найдена ошибка в редакторе, то будет выпущена очередная версия программы. Также возможно, что если читатель усовершенствует редактор и сообщит об этом разработчикам, то они включат его добавления в новый официальный выпуск.

[N] Curses Hexedit можно получить по адресу http://ccwf.cc.utexas.edu/~apoc/programs/c/hexedit (http://ccwf.cc.utexas.edu/~apoc/programs/c/hexedit).
<< 1 ... 15 16 17 18 19 20 21 22 23 24 >>
На страницу:
19 из 24