Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Многие программы используют ключи для активации лицензии. Взломщики частенько пользуются этим и пишут кейгены, способные выдать сколько угодно ключей, которые софтина беспечно примет за настоящие. В этой статье я покажу на примере, как именно крякеры подбирают серийники и создают кейгены.
Для демонстрации я возьму реальную программу с не самой простой защитой, но по понятным причинам не буду называть ни ее, ни ее разработчика. Наша цель здесь лишь демонстрация уязвимости. Материал будет полезен разработчикам софта, желающим изучить технологию подбора лицензионных ключей и понять, как это делают злые крякеры. Надеюсь, это поможет в создании более совершенных защит.
warning
Статья имеет ознакомительный характер и предназначена для исследователей безопасности и специалистов по разработке защиты программного обеспечения. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Нарушение авторских прав и патентного законодательства, распространение контрафактного ПО и нарушение работы систем преследуются по закону.
Итак, условие задачи: предположим, есть некий набор простых консольных утилит. В триальном режиме каждая программа из этого набора работает с мелкими, но неприятными ограничениями, однако у нее присутствует ключ командной строки для ввода кода активации.
При использовании ключа есть два варианта: если код активации неверен, программа выдает строку «Error: Invalid License Key» и завершает работу, в противном случае отрабатывает без ограничений. Для наглядности упростим задачу: предположим, что программа ничем не защищена и не обфусцирована, написана на C (проверить это можно в Detect It Easy).
В принципе, триальные ограничения и проверка ключа в подобном случае патчатся одним байтом, но такой вариант мы рассматривать не будем. Наша задача — реверсировать проверку ключа активации, формат которого нам неизвестен, и выяснить слабые места алгоритма. На этом примере я покажу, каким образом в подобных случаях действуют авторы кейгенов.
Предположим, что процедура проверки регистрационного ключа уже найдена. А вот выглядит она в нашем примере, на первый взгляд, весьма пугающе — даже в преобразованном в псевдокод виде.
Процедура проверки регистрационного ключа
Источник: xakep.ru