Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Исследование программ, написанных на Delphi...

Обсудить статью на форуме

Очень удобно, когда все крэкерские инструменты, книги и статьи в одном месте. Используйте сборник от EXELAB - вот тут.

Программа: Dossier версии 1.0
Описание: предназначена для удобного редактирования и поиска текста в базах данных Paradox.
Необходимые инструменты:
RegMon
WinHex
PEiDentifier
ASPack Die

Введение

Delphi - это одна из лучших сред разработки программного обеспечение под WindowZ. В стандартный набор этой среды разработки входит несколько десятков компонентов для облегчения и ускорения разработки программ. Имеется так же возможность написания собственных компонентов, которые часто используются в работе. Среди этих написанных сторонними разработчиками компонентов имеются различные компоненты для защиты программ по паролю, а так же для реализации других видов защиты.
Мы обсудим один из таких компонентов, найдем его уязвимое место и метод использования на примере программы Dossier (описание смотрите выше).

Определение упаковщика и языка программирования

Исследование программы я начал с выяснения того, чем она запакована (если запакована вообще). Для этого я использовал программу PEiDentifier. Она рассказала мне, что программа запакована с помощью ASPack версии 2.11-2.12. Для распаковки я использовал программу ASPack Die. Затем я открыл полученный распакованный файл в шестнадцатеричном редакторе WinHex и просмотрел начало программы. Нашел там знакомое слово TObject. Это значит что программа написана на Delphi.

Определение уязвимости

Запустив программу я увидел стандартное окно, отображаемое посредством функции InputBox.

Первое что пришло в голову - это попробовать написать обратный код. Не получилось - программа просто молча, без каких-либо сообщений закрылась. Тогда я закрыл окно и запустил RegMon. Он нашел мне ключ реестра, из которого программа читала свои данные. В ключе оказалось два параметра: один присутствовал там постоянно и был равен показанному мне при запуске программы номеру, а второй (несомненно тот, который должен был ввести я) - не существовал. Я попробовал ввести данные в этот параметр реестра вручную и снова запустил программу. Ключ изменился. Это был прекрасный результат - значит ключ не зависит ни от железа, ни от сетевого имени компа. Тогда я решил попробовать применить известный прием - переполнение и написать в реестре очень длинный ключ.

И снова запустил программу. Программа выдала мне тоже окно, но после нажатия кнопки ОК не закрылась, а выдала ошибку "TCryptLib.Password to big!". А после того как я закрыл окно с ошибкой... о чудо! Программа преспокойно запустилась! Я проверил ее еще несколько раз - после ошибки программа стабильно работала.

Таким образом я нашел главную уязвимость программы - переполнение при слишком длинном ключе и отсутствие обработки это ошибки. Если бы программа была написана более грамотно, т.е. с обработкой ошибок, то такой вариант бы никак не прокатил бы.

После обнаружения такой дыры мне пришлось просто на скорую руку прибить сообщение об ошибке, поскольку заказчику (он пожелал остаться неизвестным) требовалось взломать программу любыми способами и как можно быстрее. Поэтому я не стал ковырять килобайты кода, распутывая наверняка не слишком простой алгоритм генерации номера. При наличии времени можно было бы найти еще 1000 и 1 способ взлома этой программы, в том числе изучив алгоритм генерации номера и написав кейген. Но к сожалению у меня было мало времени.

Заключение

Таким образом можно подвести итоги и вывести несколько важных замечаний. Я разобью эти примечания на два раздела - для крякеров и для программистов.

Крякерам:
  1. Всегда просматривайте код программы (лучше всего в редакторе ресурсов) на наличие нестандартных компонентов.

  2. При наличии таких компонентов постарайтесь достать их и изучить на наличие ошибок, а так же попытаться использовать их для взлома программы (хотя бы так же как хотел сделать я - написав на основе компонента кейген). В моем случае мне не удалось заполучить исходники компонента, потому что его автор оказался человеком очень скупым и требовал за них "всего" 25$.

  3. При наличии таких компонентов постарайтесь вызвать для них исключительную ситуацию. Как правило автор программы не уделяет внимания обработке ошибок от компонентов и возлагает это на плечи того, кто писал компонент.

Программистам:
  1. Старайтесь ограничиваться стандартным набором компонентов и используете компоненты сторонних разработчиков только при крайней необходимости, обязательно тщательно проверив исходный код компонента.

  2. Не жалейте времени на грамотную и качественно сделанную обработку исключительных ситуаций.

  3. Особое внимание уделите обработке ошибок при использовании компонентов от сторонних разработчиков.

На этом у меня все. Спасибо за внимание, удачи в нелегком, но очень интересном деле взлома программ!

Автор заметки: Gloomy
Июль 2003



Обсуждение статьи: Исследование программ, написанных на Delphi... >>>


Комментарии к статье: Исследование программ, написанных на Delphi...

Neo 2002 25.05.2005 10:00:39
Кстати кейген элемантарно пишется!
---

Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS