Сложность: 1 – Very easy, for newbies
Платформа: Windows
Язык: (Visual) Basic
Дано: basic crackme
Easy to crack
Решение (автор juza)
опубликовано 28.02.2012
Инструменты: OllyDbg
Открываем crackme в OllyDbg, идем по адресу 00402506, который находится в обработчике onLoad (функция по адресу 004024В0). Чуть ниже идет неявный вызов (CALL DWORD PTR [EDX+0x1C]) функции 00402550. В ней остановимся по адресу 00402606.
В этом куске кода, видим, что сравнивается настоящее имя crackme с “Crackme.exe”. Если они различаются, то мы не идем дальше. Так что, не переименовываем crackme. Еще одна проверка на отладку основана на использовании функции “IsDebuggerPresent”
По адресу 004026D9 (CALL 00401FF4) происходит вызов функции IsDebuggerPresent.
Функция IsDebuggerPresent возвращает 1, если процесс находится под отладкой. Проверка единички лежит чуть ниже по адресу 004026F1 -> патчим ее (JNE заменяем на JMP). Запускаем процесс.
Вводим наши данные такие, как указанные на рисунке.
Теперь, обработчик кнопки “Yes” находится по адресу 00402410. Вызов функции проверки ключа (ключ состоит из 2 частей: “123456” и “0987”) находится по адресу 004027С0. Ставим здесь точку останова и жмем “Yes”.
Псевдокод проверки ключа:
1. Адрес 0040297D - берем первые 3 символа от имени (с помощью функции rtcLeftCharVar). В нашем случае - это “abc”
2. Адрес 004029В8 - берем последние 3 символа от имени (с помощью функции rtcRightCharVar). В нашем случае - это “cde”
3. Адрес 004029DF - конкатенация строк: константа “SCT-” и символов, полученных на шаге 2. В нашем случае - это “SCT-cde”.
4. Адрес 00402А02 - конкатенация строк: строка на шаге 3 + длина имени. Получили “SCT-cde5”.
5. Адрес 00402А10 - конкатенация строк: строка на шаге 4 + строка на шаге 1. Получили “SCT-cde5abc”. Это и есть 1-я часть ключа.
6. Адрес 00402А37 - тупо сравниваем 2-ю часть ключа с “Shooter”
Username: abcde
Serial1: SCT-cde5abc
Serial2: Shooter