Разбор простого crackme: логика проверки

Применяем всё вместе на учебной задаче, созданной для тренировки.

Crackme — программа, специально написанная как головоломка для практики реверса; разбирать её абсолютно легально.

Этический контекст

Мы разбираем учебный crackme — он создан автором именно для того, чтобы его анализировали. Это не чужое защищённое ПО. Те же приёмы НЕЛЬЗЯ применять к реальным программам с целью обхода их лицензий.

Как обычно устроена проверка

Простейший crackme спрашивает пароль и сравнивает его с эталоном. На C логика выглядела бы так:

char *input = read_line();
if (strcmp(input, "S3cr3t!") == 0)
    puts("Access granted");
else
    puts("Wrong password");

В таком случае эталон S3cr3t! часто прямо виден в строках бинаря — задача решается одной командой strings.

Чуть сложнее: проверка по частям

Более интересный crackme не хранит пароль целиком, а проверяет свойства ввода. Логику можно смоделировать на Python и реально запустить:

def check(s):
    if len(s) != 6:
        return False
    if s[0] != 'K':
        return False
    total = 0
    for ch in s:
        total += ord(ch)
    return total == 500

# Реверсер читает ассемблер и восстанавливает ИМЕННО такие условия,
# а затем подбирает ввод, который их удовлетворяет.
print(check("Wrong"))
print(check("Kpqrst"))

Вывод:

False
False

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

Как работает под капотом

В дизассемблере такая проверка выглядит как: вызов функции ввода → cmp длины → серия сравнений символов или цикл с накоплением суммы → финальный cmp с константой и переход на «granted»/«wrong». Узнав конструкции из прошлого раздела (циклы, условия, строки), вы соберёте картину.

Частые ошибки

  • Искать «один пароль», когда проверка идёт по свойствам ввода.
  • Не замечать преобразования (XOR, сложение) перед сравнением.
  • Забывать про этику: crackme — да, чужие лицензии — нет.

Итог

  • Crackme — легальная учебная головоломка для практики реверса.
  • Простая проверка хранит эталон (видно в strings), сложная проверяет свойства ввода.
  • Задача реверсера — восстановить условия по ассемблеру.
Проверьте себя
1. Почему разбор crackme легален, а обход лицензии реальной программы — нет?
ACrackme не содержит кода
BCrackme создан автором специально для анализа и тренировки, а чужое ПО защищено авторским правом
CЭто одно и то же
DCrackme работает только офлайн
2. В простом crackme, который сравнивает ввод с эталонной строкой strcmp, как часто можно найти пароль быстрее всего?
AТолько динамической отладкой
BКомандой strings, если эталон хранится открыто
CПеребором всех паролей
DНикак