Эта серия будет содержать объяснения некоторых простых / средних крекмов, которые я решил из crackmes.one,

Примечание. В этой статье не будет ничего подробно рассказано, скорее, это всего лишь мой способ решения проблем (в основном это проблемы Linux RE).

Если вы новичок в обратном инжиниринге Linux, вы можете сослаться на эту замечательную статью как на кикстартер.

Проблемы Linux RE также потребуют базового понимания сборки, вы можете посмотреть это потрясающее 10-минутное видео, чтобы понять основные концепции. Сборка может показаться вам немного сложной, но вскоре вы начнете падать. люблю сборку ❤.

Требуется набор навыков:

  1. Базовое понимание команд Linux
  2. Знакомство со сборкой (x86)
  3. Понимание кода C / C ++
  4. И конечно же brain.exe и catchy_eyes.exe

Необходимые инструменты:

Гидра

Ghidra - это фреймворк обратного проектирования программного обеспечения (SRE), созданный и поддерживаемый Исследовательским управлением Агентства национальной безопасности. Эта структура включает набор полнофункциональных высококачественных инструментов анализа программного обеспечения, которые позволяют пользователям анализировать скомпилированный код на различных платформах, включая Windows, macOS и Linux.

Радаре2

Radare2 (также известный как r2) - это полный фреймворк для обратного проектирования и анализа двоичных файлов. ; состоит из набора небольших утилит, которые можно использовать вместе или независимо от командной строки

Интересный факт: Radare2 тоже появился в Мистер Робот, я имею в виду, что это круто?

Задача 1. Простая клавиша g3nme

Вы можете скачать этот файл здесь (пароль: crackmes.one)

После распаковки загруженного zip-файла вы увидите файл с именем «keyg3nme».

Сейчас мы понятия не имеем, что это за файл, поэтому давайте запустим команду file для данного файла.

команда файла используется для определения типа файла. Тип .file может быть удобочитаемым (например, «ASCII text») или MIME-типом (например, «text / plain; charset = us-ascii»). Эта команда проверяет каждый аргумент, пытаясь разделить его на категории.

[Подробнее о файловой команде: https://www.geeksforgeeks.org/file-command-in-linux-with-examples/]

Вывод команды из файла:

из команды file видно, что keyg3nme - это 64-разрядный исполняемый файл ELF (без разделений).

Давайте запустим этот двоичный файл.

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

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

Я нашел несколько интересных строк:

  1. Введите свой ключ:
  2. Молодец, товарищ, а теперь иди кейген-меня [это будет отображаться, когда пользователь введет правильный ключ]
  3. нет [отображается, когда пользователь вводит неправильный ключ]

Но, к сожалению, в двоичном файле нет ни жестко запрограммированного ключа, ни каких-либо функций strcmp.

Интересный факт: задачи CTF - это не только strings challfile | grep flag

Давайте откроем этот файл в Ghidra для декомпиляции и анализа определений функций.

при первом открытии двоичного файла в ghidra вы увидите это всплывающее окно

Нажмите да и затем анализировать.

В этой левой части интерфейса гидры вы увидите дерево символов.

Найдите функцию main и начните анализировать функцию main.

Примечание: так как это первая задача в этой серии, поэтому я анализирую декомпилированный код C, в дальнейших задачах я мог бы непосредственно проанализировать ассемблерный код (используя radare2).

Основная функция

Этот код кажется довольно простым, давайте сначала разберем переменные.

ivar1: используется только для возврата статуса (если «1», то «Пройдено»).

local_14: наш введенный ключ

local_14 передается в функции с именем validate_key, возвращенный результат будет сохранен в ivar1, и если этот результат равен '1 '(ivar1 равно 1), что означает, что введенный нами правильный ключ.

Давайте посмотрим на функцию validate_key.

validate_key

эта функция довольно проста и не требует пояснений,

iParm1 - это введенный нами ключ (ivar1 в основном),

0x4cf в десятичном формате эквивалентен 1223

Логика довольно проста:

if entered_key % 1223 == 0:

print("Good Job mate,now go keygen me")

Таким образом, наш ключ ответа будет 1223 или любое кратное 1223 или 0.

Правильный ключ

Wooohooo Мы только что решили нашу первую задачу.

Попробуйте еще несколько задач здесь: https://crackmes.one.

Следующая часть: https://medium.com/@Asm0d3us/part-2-crackmes-one-beginner-friendly-reversing-challenges-5e58a8a42e26

Контакт

twitter: twitter.com/devanshwolf