ВСТУПЛЕНИЕ
Кракми это
программа (обычно небольшого размера 1-2
килобайта), к которой нужно подобрать пароль
или составить ключ. Кракми пишутся обычно
для проверки уровня знаний людей в области
криптографии и взлома программ. Крак ми
пошло от английского словосочетания Crack Me -
взломай меня.
Как-то мне
потребовалось вставить поддержку "регистрационных"
ключей в одну из коммерческих программ. На
тот момент опыта в этом деле у меня было
совсем немного, как-то я пробовал взломать
несколько crackme, но ничего не получалось и я
быстро бросал. Но когда появился стимул, я
решил начать с crackme и сейчас занимаюсь
изучением различных алгоритмов шифрования
данных (таких как DES, TWODES, RSA и прочих). Вполне
возможно, что следующие мои статьи будут об
алгоритмах шифрования, так как
использование этих алгоритмов значительно
увеличивает время затрачиваемое на взлом.
ВИДЫ CRACKME
Рассматривая
различные кракми, я выделил два основных
типа: зашифрованные кракми и содержащие
только алгоритм.
Расшифровщик
кракми первого вида обычно содержит
множество анти-отладочных “приёмов” (сложность
этих приемов зависит от уровня знаний
человека написавшего кракми, самые
распространенные приемы легко обходятся
людьми и отладчиками, работающими под
защищенным режимом (protected mode)) и прежде чем
начинать анализ алгоритма, нужно получить
расшифрованный код. Чем сложнее
расшифровать, тем (скорее всего) сложнее
будет алгоритм подбора пароля (или паролей)
к нему. Очень часто получается так, что
алгоритм из 300 байт бывает сломать тяжелее,
чем расшифровать кракми. Без знаний
математики так же не советую ломать кракми
в которых используется алгоритм RSA(алгоритм
шифрования данных с открытым ключем) или
похожий. Естественно, начинать лучше с
нешифрованных кракми. Так же не советую
пытаться сломать кракми от групп UCL, UCF, rPG, SOS
– вы просто потратите время зря.
В некоторых
кракми требуется узнать не пароль, а
сделать регистрационный ключ. Процесс
слома подобного кракми не сильно
отличается от “парольного”, но он более “приближен”
к слому программ.
АЛГОРИТМ СЛОМА
CRACKME
Сложные кракми
ломаются с помощью перебора паролей, для
этого пишутся маленькие программки. Чаще
всего пароль всего один. Сложность
увеличивается из-за размера необходимого
пароля и символов из которых он должен
состоять.
Алгоритм:
-
Анализ
алгоритма проверки пароля -
Написание
кейгена (программы подбирающей пароль) -
Запуск кейгена
АНАЛИЗ АЛГОРИТМА
ПРОВЕРКИ ПАРОЛЯ
Для анализа
следует внимательно изучить алгоритм
проверки пароля. Для этого используется ваш
любимый отладчик (Soft Ice, TD, DeGlucker...), нужно
внимательно посмотреть по чему проверяется
пароль. Он может проверяться по контрольной
сумме (crc), в этом случае скорее всего пароль
придется искать перебором, или он может
проверяться по какому-нибудь символу, тогда
можно "угадать" весь пароль или хотя бы
несколько его символов, остальные придется
искать перебором.
Контрольная
сумма участка кода, это число (обычно два
или четыре байта, в кракми может
использоваться и один байт) которое
содержит информацию об этом участке кода.
Для кракми обычно используются процедуры
примитивного расчета контрольной суммы (например
архиваторы используют crc32). Рассмотрим
пример алгоритма рассчитывающего
контрольную сумму:
Например, все
байты участка складываются, и получается
число – это число и является контрольной
суммой участка. Например, у нас есть участок
кода, состоящий из 5 байт:
001 004 000 005 100
Контрольная
сумма его будет равняться 1+4+0+5+100=110.
Основная
сложность взлома кракми, которые проверяют
пароль по crc в том, что crc нельзя разложить! Т.е.
зная контрольную сумму пароля - 110 мы не
можем узнать, чему равен хотя бы один из
элементов пароля.
НАПИСАНИЕ КЕЙГЕНА
Практически для
всех видов кракми нужно писать кейген,
кроме легких. Можно легко сломать
практически любой кракми бит хаком (bit hack,
замена нескольких байт), но авторы просят
сказать пароль, а самое главное теряется
интерес.
Для того, что
бы найти пароль из 3 символов необходимо
примерно перебрать: 255
* 255 * 255 КОМБИНАЦИЙ
Можно уменьшить
количество комбинаций, например зная, что в
пароле используются только английские
буквы (большие и маленькие), то вместо 255
символов придется перебирать только 52. Если
только цифры, что будем перебирать только 10
символов.
Кейген должен
сохранять счетчик расшифрованных
комбинаций. Так как перебор паролей
занимает длительное время, то оставлять
компьютер включенным пару дней нельзя,
вдруг он понадобится. Можно вставить в
кейген возможность сохранения счетчика в
файл, а при старте считывать его из файла и
продолжать расшифровку с прерванной
позиции.
ЗАПУСК КЕЙГЕНА
Перебор паролей, в
зависимости от некоторых параметров (в
основном от количества возможных в пароле
символов и от размера пароля) требует
довольно большого промежутка времени.
Можно использовать несколько компьютеров,
каждый которых будет проверять какую-то
часть комбинаций.