Крякинг — это просто Степан Ильин aka Step Хакер, номер #080, стр. 080-070-7 00401217 CALL <JMP.&USER32.GetDlgItemTextA> ;GetDlgItemTextA Отсюда начинаем выполнять программу пошагово. Для этого в OllyDBG предусмотрены два варианта: трассировать с заходом в подпрограммы (клавиша — F7) или трассировать без захода в подпрограммы (F8). Курсор сейчас установлен на вызове API-функции. Нас совершенно не интересует алгоритм ее работы, поэтому трассируем команду без захода в подпрограмму. Значительно интереснее ее результат. Как уже было сказано, GetDlgItemTextA заносит в буфер строковое значение, которое пользователь ввел в текстовом поле. Это легко проверить. В параметрах процедуре передается адрес начала буфера — 00403084. Давай посмотрим, что было размещено в нем после выполнения команды. Для этого нажми правой кнопкой мыши по нижней части окна CPU, где расположен дамп данных, и в появившемся меню выбери Go to -> Expression. После ввода нужного адреса, программа высветит данные, которые расположены по этому адресу. У меня это строка — «step». Двигаемся далее. Аналогичным образом трассируем программу вплоть до вызова процедуры CRACKME4.004012F9. Поскольку она, скорее всего, и выполняет генерацию серийника, трассируем эту команду с заходом в процедуру. Первые 2 десятка команд описывают алгоритм, по которому производится генерация серийника. Это очень простой алгоритм, но привести его код здесь не смог — рискую гонораром. Зато я полностью откомментировал его и выложил с исходником кейгена на диск. Сейчас нас интересует другое — сравнение сгенерированного и введенного нами серийника. Трассируем программу до следующего кода: 00401334 PUSH CRACKME4.00403284 ; String2 = "LMXI" 00401339 PUSH CRACKME4.00403184 ; String1 = "sa" 0040133E CALL <JMP.&KERNEL32.lstrcmpA> ; lstrcompareA Оказалось, что в результате работы алгоритма, сгенерированный серийник был записан по адресу 00403284. Теперь с помощью уже знакомой функции lstrcmpA производится сравнение его значения с серийником, который ввел пользователь. Чтобы не заставлять пользователя вручную просматривать значение, расположенное по адресу 00403284, OllyDBG любезно вывел его справа в комментариях. «LMXI» — это и есть правильный регистрационный номер для имени «step». Можешь это проверить :). [это не конец] Естественно мы рассмотрели самые примитивные типы защит. Однако даже этих основ порой достаточно, чтобы взломать плохо защищенные программы. Надеюсь, ты убедился, что для этого совершенно не обязательно идеально владеть ассемблером. В большинстве случаев вполне достаточно знания азов и работающих извилин в голове. Если тебе интересна тема взлома программ — пиши. И мы обязательно расскажем тебе о том, как взломать более сложные защиты и упакованные программы, как обойти антиотладочные приемы программистов и многое другое. |