Решение Зимних Проблем С Crackme

Как известно, важной частью борьбы с киберугрозами является расследование вредоносных файлов, чем и занимаются наши вирусные аналитики — отважные ребята (и девушки!) из команды Anti-Malware. Основываясь на своем опыте, они регулярно создать специальные симуляторы CrackMe, с помощью которых начинающие аналитики смогут проверить свои знания.

Не так давно мы анонсировали конкурс CrackMe, который проводится в рамках ивент-платформы CoLaboratory. Теперь, когда конкурс завершен и все решения приняты, можно рассмотреть задания более подробно.



Решение зимних проблем с CrackMe

ВНИМАНИЕ: Если вы не успели поучаствовать в конкурсе, но все же хотите попробовать свои силы, не читайте информацию под катом.

Там мы описываем алгоритм решения задачи.

Вы можете скачать последние задания CrackMe Здесь .



Решение CRACKME#1

Итак, зима КРЕКМЕ#1 из «Лаборатории Касперского».

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



Решение зимних проблем с CrackMe

Вам необходимо ввести электронную почту, с которой вы регистрировались на сайте, и выбрать для нее ключ.

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



Решение зимних проблем с CrackMe

Для нашего увлекательного исследования мы будем использовать (барабанная дробь!) только IDA Pro, это так просто.



Решение зимних проблем с CrackMe

В результате мы видим вполне стандартную для оконного приложения картинку.

Вот фрагмент WinMain, который делает всю магию.

Функция DialogBoxParamW принимает бла-бла-бла в качестве входных параметров.

Повторять документацию думаю излишне, поэтому просто идем по адресу, который содержит функцию, которая что-то сделает, если мы нажмем кнопку «Проверить».



Решение зимних проблем с CrackMe

Чтобы понять, насколько все просто, посмотрите на картинку выше, на которой изображена та самая волшебная функция.

По сути, это всего лишь набор кода, который показывает нам сообщение «Серийный номер недействителен», если мы вводим неправильные данные.

Обилие стандартных названий различных структур, например «ms_exc.registration.TryLevel» говорит о том, что Crackme написан на C++, именно так структура (try-catch) выглядит изнутри и скорее всего это вызовы к этой структуре, которая будет окружать код, выполняющий манипуляции с входными данными.

Если параллельно с чтением вы следили за ходом мыслей в окне IDA, то наверняка уже нашли нужное нам место.



Решение зимних проблем с CrackMe

Переходим к единственной функции между вызовами «ms_exc.registration.TryLevel» и вуаля — мы у основной функции, которая определяет, правильно или неправильно мы нашли ключ для нашей почты.



Решение зимних проблем с CrackMe

Для концентрации и красивого отображения вершины графа на рисунке выше сгруппированы, чтобы было понятно, какая часть за что отвечает. Обычная конструкция if-else. Давайте сосредоточимся на верхней части графика «Получить текст и проверить».

Единственное, на что мы обратим внимание из этого сгруппированного блока, — это этот фрагмент листинга.



Решение зимних проблем с CrackMe

Если мы внимательно посмотрим на приведенные выше команды, то увидим, что полученные поля EMail и Serial сохраняются в памяти.

На картинке выше показаны команды, которые записывают адреса полученных данных в регистры ECX и EDX соответственно.

И тут начинается проверка, собственно, это ее график и изображен ниже.



Решение зимних проблем с CrackMe

Впечатляет, но огромный размер графа с многочисленными ветвями может быть просто способом запутать код мусорными командами.

Так что не расстраивайтесь, берите лопату и отправляйтесь искать клад. Начинаем просеивать «почву».

Сразу бросается в глаза большое количество команд с адресов 0040DC00 по 0040DC86, которые, на первый взгляд, делают что-то математически важное для проверки нашего ключа.

Однако если присмотреться, то можно понять, что это пары команд, компенсирующих действия друг друга.

Весь диапазон можно представить как одну большую команду nop, давайте ее пропустим.

Возьмем следующий содержательный модуль.

Код, содержащийся в этом модуле, не был признан стандартным, но все выполняемые им операции просто преобразуют строки из Wide string в просто строку.



Решение зимних проблем с CrackMe

Для удобства переименуем вызываемые функции, а анализ внутренностей оставим для особо любознательных читателей.

Особое внимание обратим только на функцию с кодовым названием «Md5».

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



Решение зимних проблем с CrackMe

Код довольно простой, поэтому, чтобы понять, что происходит, достаточно прочитать названия функций WinApi. На картинке вы видите блок, по которому мы можем определить, КАКОЙ алгоритм вообще реализован этой функцией.

Покопавшись в официальной документации, находим значение 8003h для константы «CALG_MD5».

Комментарии не нужны.

Перейдем к следующему модулю.



Решение зимних проблем с CrackMe

Он содержит цикл.

Он показывает, что цикл перебирает последовательность данных в памяти, используя две переменные, значения которых отступлены на 16 позиций друг от друга.

Операция XOR выполняется над каждым элементом последовательности, отстоящим от него на 16 символов.

Сумма MD5 рассчитывается на основе полученного результата.

Следующий модуль, который стоит рассмотреть, выглядит так:

Решение зимних проблем с CrackMe

Модуль сравнивает две переменные, засорен командами и в конце сравнивает значения переменной и значения регистра ebx (условие сравнения длин последовательностей?).

В результате происходит переход к циклу, который в модуле представлен на картинке ниже.

Он выполняет сравнение последовательности из 16 символов, увеличивая счетчик на единицу, если есть совпадение, и уменьшая на единицу в противном случае.

(Это операция сравнения полученного Serial с исходным, который был рассчитан и сохранен в памяти).



Решение зимних проблем с CrackMe

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

Изображение показано ниже.



Решение зимних проблем с CrackMe

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

Не стоит даже слишком много вчитываться в дизассемблированный код. Это сравнение совпадений двух строк Serial и вычисленного значения на основе введенной почты.

Изображение модуля представлено ниже.



Решение зимних проблем с CrackMe

Чтобы проверить результаты нашего исследования, попробуем самостоятельно манипулировать введенным адресом электронной почты: 1. получить сумму Md5 с адреса; 2. разделите полученную сумму пополам и выполните операцию xor, 3. По результату еще раз посчитаем Md5. Был использован экспериментальный адрес электронной почты: [email protected]. Используемый серийный номер: BB23F6DFA9375ED119237AAC4DE31BCD. Результат на картинке ниже

Решение зимних проблем с CrackMe

Вот простой CRACKME.

Решение CRACKME#2

Во второй трещине нам дан бинарный файл (PE 32-битный).

И снова вам нужно выбрать правильный серийный номер для электронной почты.



Решение зимних проблем с CrackMe

Сначала откройте этот файл в приведенном выше ИДА .

Также полезно использовать при анализе Шестнадцатеричные лучи (удобный декомпилятор, поддерживающий множество архитектур).

Мы можем найти место, где проверяется серийный номер.



Решение зимних проблем с CrackMe

По адресу 40E960 (не считая ASLR) находится функция тестирования.



Решение зимних проблем с CrackMe

Вначале вы можете видеть, что электронное письмо сжимается до размера 22 байт путем xoring всех символов, позиции которых равны по модулю 22. В случае нехватки оно расширяется нулевыми байтами.



Решение зимних проблем с CrackMe

Затем проверяется, что серийный номер находится в шестнадцатеричной системе счисления, он преобразуется в байты и над ним также выполняется операция xor с адресом почты.



Решение зимних проблем с CrackMe



Решение зимних проблем с CrackMe



Решение зимних проблем с CrackMe

Затем мы проверяем, что полученная сумма xor удовлетворяет СЛАУ , который использует коды символов ASCII для некоторого внутреннего секретного значения.



Решение зимних проблем с CrackMe



Решение зимних проблем с CrackMe

Уравнений в СЛАУ много, поэтому необходимо рассмотреть какой-то метод автоматического решения.

Для этого можно использовать систему компьютерной математики (например NumPy ), или так называемый решатель SMT z3 , который мгновенно находит решение.

Вы также можете попробовать решить СЛАУ, используя фреймворк гнев , который уже содержит z3. В авторском решении используется z3. Но не забывайте, что любую СЛАУ можно решить на бумаге методом Гаусса, нужно только постараться.

Решив СЛАУ, мы получаем секретное значение «KL_F4n7a5tiC_chAl1eN63», которому должен быть равен этот xor всего.

Пример: Электронная почта: [email protected] Серийный номер: 382d3236580b770a540719262d10033842520a233633

Решение зимних проблем с CrackMe

Ну вот и все.

Мы рассмотрели два из трёх CrackMe зимнего сезона от «Лаборатории Касперского».

Но не будем раскрывать всех секретов.

Вполне вероятно что третий CrackMe мы продолжим использовать это как тестовое задание.

Итак, если вы хотите сделать карьеру вирусного аналитика, попробуйте решить эту проблему самостоятельно.

Скоро на нашем сайте появится больше CrackMe, видеовстреч, хакатонов и других мероприятий.

Веб-сайт .

Присоединяйтесь к нам! Теги: #информационная безопасность #обратное проектирование #обратное проектирование #лаборатория Касперского #информационная безопасность #для начинающих

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.