Уроки Очень простой крякинг в IDA


0b170xor

Уважаемый пользователь
Форумчанин
Регистрация
13.01.2020
Сообщения
70
Репутация
27
Тема старая, побудило написать статейку для newbie crackers от студента который попросил ему помочь с курсовой.
Всякие академические термины типа "мягкий взлом" я откинул это все лишь запутывает человека который только пытается лезть в эту тему.

Приступим к работе (Осмотр)
Для проверки менеджера лицензий «мной» была выбрана свободно распространяемая (shareware) программа Internet Cyclone 2.28 Я нашел кряк только для 2.26 и решил убить двух-трех зайцев сразу написав статью. Сама утилита занимается настройкой сетевого соединения.

1586534554782.png

Примечание 1 - в качестве среды для запуска исполняемых я использую Wine​

Процедура «регистрации продукта» производится через контекстное меню «Help» - «Register» в окне с текстом «Please enter the information here».
Процедура регистрации заключается в вводе имени (User Name) и соответствующего ему лицензионного кода (Serial Number) в диалоговом окне регистрации.

1586534622228.png

Примечание 2 - если кто знает, объясните почему Wine так криво делает стили кнопок (1, 2) и полуотображаемые шрифты
После ввода никнейма «Nezumi» и пароля «4891154» появилось окно сообщения о вводе неправильных данных.

1586538303776.png

Примечание 3 - ну да, ну да пошел я нахер

Предварительный анализ кода программы (Вскрытие)

После проведенного выше осмотра пациента, надо посмотреть теперь его изнутри. Запускаем IDA Pro или Free (неважно), открываем exe файл.

1586538664908.png

В настройке проекта IDA Pro кликаем просто OK. Нажатием сочетания «Alt + T» запускаем поиск любых строк по всему файлу, набираем «Serial Number» и выберем флажок поиск всех совпадений.

1586538714880.png

В итоге после некоторых ожиданий поиска (зависит от размера проверяемого файла и вашего типа диска), появятся результаты поиска.
В нашем случае должны быть 2 варианта.
Слева есть столбец Address именно по адресу 004B972B мы видим инструкцию перемещения 48 байт в регистр 32 битный регистр eax, в 48 байт мы видим значение «Serial Number is wrong. Check your Spelling !!!.» что и является нашим текстом в диалоговом окне ошибки.
Второй вариант является как раз инициализацией выделения 48 байт под строку. Нам нужен первый чтобы узнать где находится функция создания окна ошибки. Кликаем два раза.

1586538920740.png

После перехода видим как наша программа разветляется на 2 части. Судя по логике, часть с неудачным Serial Number и с удачным.

1586539036476.png


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

1586539068702.png


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

1586539136154.png

Примечание 4 - сложно, сложно​

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

1586539223818.png

Смотрим например на последнюю функцию sub_4B9948. Она принимает 3 значения: 2 из стека, 1 из регистра ebx.
Видим что после вызова функции идет инструкция test eax, eax. Мы знаем что после вызова функции, возращаемый результат попадает в регистр eax.
Инструкция test позволяет проверить изменение флагов при проверки значения в регистре eax (например флаг ZF который сообщает что значение нулевое)[если углубляться то инструкция test eax, eax будет короче на 1 байт, чем понятный cmp eax, 0], а jnz как раз проверяет eax на то что он не ноль. Алгоритм обсуждаемого участка кода прост: «Если после вызова функции результат существует и он не ноль, то прыгаем на участок loc_4B9720» Давайте просто поменяем логику на «Если после вызова функции результат существует и он ноль, то прыгаем на участок loc_4B9720». Подумав чуток можно понять что функция проверки кода может вернуть true или false, как раз инструкция jnz loc_4B9720 отвечает за это. Сменив логику, если мы введем неверно данные то мы пройдем проверку действительности ключа.

Внесение наших исправлений в программу (Лечение)
Чтобы внести изменения в код программы, нам надо сделать патч. Кликаем на инструкцию jnz один раз и смотрим в контекстное меню «Edit» - «Patch program» - «Assemble...».

1586539604604.png

Меняем инструкцию на jz loc_4B9720

1586539628396.png

Он просит изменить следующую инструкцию, но нам не надо нажимаем отмену. Теперь надо принять изменение байтов в программе «Edit» - «Patch program» - «Apply patches to input file...»

1586539662998.png

Сохраняем файл, называем как хотим. Запускаем и идем в окно регистрации. Вводим что хотим.

1586539681978.png

И о великий техно-Ктулху, мы имеем warez-over-pro-без регистрации и смс-version Internet Cyclone 2.28 (статья)

1586539946900.png

Проверяем что вверху у тайтла окна появилось Registered. Вы стали крякером от Технобога.

Послесловие

Единственная проблема осталось, то что мы сделали кряк работающий чисто через форму регистрации, т.е. пользователю кряка придется каждый раз регистрировать продукт, что неудобно. Сделаю наверное еще один урок для полноценного кряка.
Я просто удивляюсь с того что этот коммерческий софт стоит 40 евро!
Мало того что цена за такой софт высока, но они даже не защитили никак софт, несмотря на время последнего обновления 2017 год. Остается только думать как до сих пор пишут не защищенный софт в коммерции. Моя статья разобрала лишь один продукт, а сколько таких коммерческих продуктов?


ВНИМАНИЕ!
Автор не несет ответственности за нанесенный ущерб кому либо этим способом взлома программ. Перечисленные действия в статье являются законными, поскольку с разработчиком программы было согласовано разрешение на проверку защиты менеджера лицензий.
 
Последнее редактирование:

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 207
Мало того что цена за такой софт высока, но они даже не защитили никак софт, несмотря на время последнего обновления 2017 год. Остается только думать как до сих пор пишут не защищенный софт в коммерции. Моя статья разобрала лишь один продукт, а сколько таких коммерческих продуктов?
Непонятно зачем эта программа вообще нужна.)))

Про защищенный софт в комерс, вообще-да, уже давно есть есть специализированный софт, вы пишите программу, потом её защищаете уже отлаженным софтом, который достаточно мощный и имеет кучу возможностей, вот например:

1586602215664.png


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

Причем не нужно самому настраивать сервер и т.д. все это делают сотрудники защитного софта, либо можно настраивать самому, что-бы не зависеть от кого-то.

Да и по стоимости 10000 рублей в месяц нетак много, если проект прибыльный.

Тут уже так просто невзломать.)
 

0b170xor

Уважаемый пользователь
Форумчанин
Регистрация
13.01.2020
Сообщения
70
Репутация
27
@X-Shar, программа была актуальна при dsl эпохи, когда можно было увеличить скорость провайдера на чуть больше заявленной.
 
Автор темы Похожие темы Форум Ответы Дата
0b170xor КРЯКИНГ ДЛЯ НОВИЧКОВ 0
Верх Низ