Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #82, ОКТЯБРЬ 2005 г.

Х-конкурс

GpCH (www.dotfix.net)

Хакер, номер #082, стр. 082-074-1


В сентябре в качестве очередного Х-конкурса мы предложили тебе исследовать на предмет возможного взлома программную защиту специально приготовленного crackme. Учитывая, что с заданием справилось 7 человек, нелишним будет рассказать о том, как надо было проходить конкурс, каким образом можно было взломать нашу программу.

[инструменты для взлома]

Начнем с инструментария, который тебе понадобится для исследований. Что бы не говорили знатоки крэкинга, но для взлома данного крэкми тебе понадобится только Olly Debugger (далее - Олька). Конечно можно запрячь всякие файловые анализаторы и распаковщики, но без всего этого вполне можно обойтись. Чтобы узнать, с чем мы имеем дело, может пригодиться файловый анализатор PEiD. Он не покажет нам никаких данных относительно языка, на котором написана программа, отсюда можно сделать логичный вывод о том, что программа упакована, а поскольку PEiD не выводит имя упаковщика, то он либо новый, либо малоизвестный. Скажу по секрету, паковал я этот крэкми UPack'ом версии 0.32. Этот пакер бесплатный и обеспечивает лучшее, по сравнению с другими, сжатие. Ну что, приступаем к нашим опытам.

[ломаем]

Для начала не лишним будет определить нашу цель. Многие почему-то решили, что достаточно распаковать крэкми и защита снята. Это неправильный подход. Упаковщик служит лишь для уменьшения размера крэкми, но не для защиты. А цель наша - получить пароль на свой ник и узнать специальный пароль, общий для всех ников. Для этого не нужно распаковывать крэкми. После запуска его под олькой упаковщик в памяти сам распакует крэкмис. Нам остается лишь посмотреть на те уязвимости, за которые можно зацепиться чтобы осуществить взлом.

Надеюсь, ты уже открыл Олей крэкмис и нажал F9, запустив тем самым программу под отладчиком. Теперь в загруженной программе введи свой ник и любой пароль. Я ввел «GPcH» и пароль «1234567890». Нажимаем на кнопку «Зарегистрировать программу» и получаем, естественно, сообщение «Вы ввели неверное имя пользователя или пароль. Повторите попытку :)». Теперь мы знаем, с чего нам начать исследовать программу. Ставим точку останова на функцию rtcMsgBox (данную функцию Visual Basic - а именно на нем и написана программа - использует для вывода сообщений), или на ее ординал 595. Надеюсь, у тебя установлен плагин CommandLine для Ольки. Если нет - ищи его на сайте ollydbg.de. В консоли этого плагина вводи bp rtcMsgBox, жми Enter и снова дави на кнопку «Зарегистрировать программу». Выполнение кода прервется на функции rtcMsgBox.

660DC5F3 >gt; 55 PUSH EBP

Теперь проходим до конца этой функции в режиме трассировки (нажимай F8). Эта функция, как и любая другая, оканчивается операндом ret. После этого (предварительно увидев сообщение о неверности пароля) мы попадем обратно в код крэкмиса. Тут ты увидишь следующее:

код, на который мы попадаем после получения сообщения о неверном пароле

0040610E 8D DB 8D

0040610F 85 DB 85

00406110 58 DB 58 ;CHAR 'X'

00406111 FD DB FD

00406112 FF DB FF

00406113 FF DB FF

00406114 50 DB 50 ;CHAR 'P'

00406115 8D DB 8D

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