Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

Пример взлома: WinRAR

Крис Касперски ака мыщъх

Спецвыпуск: Хакер, номер #057, стр. 057-048-1


На простом примере учимся взлому приложений

Практическую часть обучения взлому программ нужно начинать с чего-то простого, возможно, даже банального. Архиватор WinRAR – идеальный выбор. Его несложная защита лучше всего подойдет для проверки твоих свежеприобретенных крэкерских навыков.

Только что скачанная версия WinRAR'а нормально работает 40 дней, после чего начинает вопить, как ненормальная, о регистрации, выплевывая противный NAG-screen через несколько секунд после запуска. Это очень раздражает, и возникает естественное желание отломать NAG.

Мы научимся взламывать версию 3.42 - последнюю стабильную на момент работы над номером, на которую ведет ссылка www.rarsoft.com/rar/wrar342.exe. Все остальные будут ломаться аналогичным образом, разве что только смещения "защитных" байт будут другими.

Помимо самого архиватора-жертвы, нам понадобится любой нормальный HEX-редактор (например HIEW), API-шпион Kerberos, дизассемблер IDA Pro и редактор ресурсов (Microsoft Visual Studio подойдет). В разных версиях HIEW раскладки горячих клавиш отличаются, поэтому, чтобы не создавать путаницы, определимся: мы будем использовать бесплатную версию 6.04 без функциональных ограничений. Последние версии этого редактора распространяются на коммерческой основе, а коммерция и хакерство несовместимы!

Подавление NAG'а

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

Но функций, связанных с диалогами, множество: это и CreateDialog, и DialogBox, и MessageBox, и целая куча других. Какую из них использовал разработчик RAR'а? Чтобы не гадать, воспользуемся API-шпионом. Он все покажет. Только сначала настроим фильтр, чтобы Kerberos отбрасывал малоинформативные API-вызовы, захламляющие файл отчета. Открываем ke_spy.txt и комментируем следующие функции (достаточно перед их именами поставить знак ';'): TlsGetValue, DefWindowProcA, DispatchMessageA, GetFocus, GetMessageA, SendMessageA, SendMessageW, TranslateAcceleratorA, TranslateAcceleratorW и TranslateMessage. Для улучшения фильтрации имеет смысл зайти в "Опции" (кнопка Options) и взвести флажок report only .exe calls, чтобы собирать API-вызовы только из winrar.exe, но не из загружаемых им DLL. Если этого не сделать, ничего страшного не произойдет, но файл отчета получится слишком большим и удручающе ненаглядным.

Теперь нажимаем Browse, указываем путь к нашему архиватору и давим Inject. Дождавшись появления NAG'а на экране, выходим из rar'а и открываем файл отчета WinRAR.rep, находящийся в одном каталоге с exe'шником.

WinRAR.exe|0044B030|LoadAcceleratorsA(00400000, 00496BA8: "VIEWACC") returns: 001E006F

WinRAR.exe|00440F73|DialogBoxParamA(400000,495FE1:"REMINDER",70094,444FF4,0) returns:0

WinRAR.exe|00440F9B|WaitForSingleObject(00000110, 0000000A) returns: 00000102

Изучение файла-отчета лучше начинать с конца (так как NAG-screen появляется в последнюю очередь, когда основной интерфейс уже инициализирован). Только слепой не обнаружит вызов функции DialogBoxParamA, создающей диалог с грозным именем "REMINDER" (то есть "напоминатель"). Это и есть наш NAG!

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