
Исследование защиты программы Chaotica

Скриншот программы Chaotica
Chaotica - программа для генерации фрактальных изображений по заранее заданному или случайному набору исходных параметров. Готовое изображение хорошо использовать в качестве обоев для рабочего стола или для создания завораживающей анимации. Для работы используются мощности графического процессора видеокарты, но все равно работает Chaotica, мягко говоря, не быстро. Если учитывать ограничения триальной версии программы, то образуется весомая причина, чтобы обратить на нее более пристальное внимание.
Забираем с сайта дистрибутив последней доступной 32-битной версии, устанавливаем, смотрим. Без регистрации можно сгенерить изображение не более 1,23 мегапикселов, причем при изменении высоты или ширины второй размер подгоняется таким образом, чтобы не превышать лимит.

Сообщение незарегистрированной версии
Исходные данные есть, отправляем исполняемый файл в дизассемблер. Когда он закончит работу, поищем в листинге строку сообщения, которое появляется при превышении возможностей лицензии. Сообщение лепится из нескольких подстрок.
Code (Assembler) : Убрать нумерацию
- .text:004AC8B6 mov [ebp+var_1C], 4
- .text:004AC8BD mov eax, [eax]
- .text:004AC8BF mov [ebp+var_1C], eax
- .text:004AC8C2 mov dword ptr [ebp+var_24+4], eax
- ; Проверить значение флага
- .text:004AC8C5 mov eax, [edi+4ACh]
- ; Если значение нулевое, то сразу перейти на пересчет значений
- ; и вывод сообщение
- .text:004AC8CB test eax, eax
- .text:004AC8CD jz short loc_4AC8EF
- ; Если EAX=1, то ничего вредного не делать
- .text:004AC8CF cmp eax, 1
- .text:004AC8D2 jz loc_4ACAE7
- ; Значение 2 тоже приводит к плохим результатам
- .text:004AC8D8 cmp eax, 2
- .text:004AC8DB jz short loc_4AC8EF
- ; Значение 3 и 4 тоже хорошие значения
- .text:004AC8DD cmp eax, 3
- .text:004AC8E0 jz loc_4ACAE7
- .text:004AC8E6 cmp eax, 4
- .text:004AC8E9 jz loc_4ACAE7
- ; Пересчитать значения спинбоксов и вывести сообщение о лимите
- .text:004AC8EF loc_4AC8EF:
- .text:004AC8EF mov ecx, [edi+0F8h]
- .text:004AC8F5 push 4
- .text:004AC8F7 call ds:?setMaximum@QSpinBox@@QAEXH@Z
- .text:004AC8FD cmp [ebp+var_1C], 4
- ...
- ; Часть кода пропущена для удобства чтения
- ...
- .text:004AC9E5 fstp [ebp+var_34]
- .text:004AC9E8 movsd xmm1, [ebp+var_34]
- .text:004AC9ED mulsd xmm1, ds:qword_6F7BA8
- .text:004AC9F5 mulsd xmm1, ds:qword_6F7BA8
- .text:004AC9FD movapd xmm2, xmm1
- .text:004ACA01 call sub_4DE0A0
- .text:004ACA06 push offset aChaotica_3 ; "Chaotica"
- .text:004ACA0B lea ecx, [ebp+var_34+4]
- .text:004ACA0E mov [ebp+var_4], 2
- .text:004ACA15 call ds:??0QString@@QAE@PBD@Z
- .text:004ACA1B lea edx, [ebp+var_5C]
- .text:004ACA1E lea ecx, [ebp+var_24+4]
- .text:004ACA21 mov byte ptr [ebp+var_4], 3
- .text:004ACA25 call sub_4C0C30
- .text:004ACA2A push eax
- .text:004ACA2B mov edx, offset aTheRequestedIm
- ; "The requested image dimensions exceed t"...
- .text:004ACA30 lea ecx, [ebp+var_28]
- .text:004ACA33 mov byte ptr [ebp+var_4], 4
- .text:004ACA37 call sub_407500
- .text:004ACA3C add esp, 4
- .text:004ACA3F push offset aMegapixels_
- ; " megapixels)."
- .text:004ACA44 mov edx, eax
- .text:004ACA46 lea ecx, [ebp+var_2C]
- .text:004ACA49 mov byte ptr [ebp+var_4], 5
Code (Assembler) : Убрать нумерацию
- .text:004A8E50 sub_4A8E50 proc near
- .text:004A8E50 push ebp
- .text:004A8E51 mov ebp, esp
- .text:004A8E53 push 0FFFFFFFFh
- .text:004A8E55 push offset SEH_4A8E50
- .text:004A8E5A mov eax, large fs:0
- .text:004A8E60 push eax
- .text:004A8E61 mov large fs:0, esp
- .text:004A8E68 sub esp, 28h
- .text:004A8E6B push ebx
- .text:004A8E6C push esi
- .text:004A8E6D mov [ebp+var_4], 0
- .text:004A8E74 push edi
- .text:004A8E75 mov esi, ecx
- .text:004A8E77 mov [ebp+var_10], esp
- .text:004A8E7A mov [ebp+var_18], esi
- .text:004A8E7D mov [ebp+var_14], 0
- .text:004A8E84 mov [ebp+var_1C], 0Fh
- .text:004A8E8B mov [ebp+var_20], 0
- .text:004A8E92 mov byte ptr [ebp+var_30], 0
- .text:004A8E96 lea eax, [ebp+var_30]
- .text:004A8E99 push eax
- .text:004A8E9A lea ecx, [esi+4B0h]
- .text:004A8EA0 lea edx, [ebp+var_14]
- .text:004A8EA3 mov byte ptr [ebp+var_4], 1
- .text:004A8EA7 call sub_4CE730
- .text:004A8EAC add esp, 4
- .text:004A8EAF cmp [ebp+var_1C], 10h
- .text:004A8EB3 jb short loc_4A8ED3
- .text:004A8EB5 push [ebp+var_30]
- .text:004A8EB8 call ds:__imp_??3@YAXPAX@Z
- .text:004A8EBE add esp, 4
- .text:004A8EC1 jmp short loc_4A8ED3
- .text:004A8EC3 ; ----------------------------------------
- .text:004A8EC3 mov [ebp+var_14], 0
- .text:004A8ECA mov eax, offset loc_4A8ED0
- .text:004A8ECF retn
- .text:004A8ED0 ; ----------------------------------------
- .text:004A8ED0 loc_4A8ED0:
- .text:004A8ED0 mov esi, [ebp+var_18]
- .text:004A8ED3 loc_4A8ED3:
- ; Получить значение состояния регистрации
- .text:004A8ED3 mov eax, [ebp+var_14]
- .text:004A8ED6 mov ecx, [ebp+var_C]
- .text:004A8ED9 pop edi
- ; Записать его в ячейку памяти
- .text:004A8EDA mov [esi+4ACh], eax
- .text:004A8EE0 pop esi
- .text:004A8EE1 mov large fs:0, ecx
- .text:004A8EE8 pop ebx
- .text:004A8EE9 mov esp, ebp
- .text:004A8EEB pop ebp
- .text:004A8EEC retn
- .text:004A8EEC sub_4A8E50 endp

Программа успешно "зарегистрирована"
Проверяем наличие ограничений, устанавливая параметры изображения, гарантированно выходящие за пределы триального лимита. Никаких сообщений при этом не выводится, изображение успешно генерится, сохраняется в файл и все такое. В окне "О программе" присутствует надпись, что лицензия отсутствует, но на функционал это никак не влияет. Цель достигнута.
Просмотров: 1122 | Комментариев: 5
Метки: исследование защиты, графика

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье

ManHunter
(23.04.2023 в 12:47):
Поиском

Илья
(23.04.2023 в 12:46):
Как вы находите подопытных для рубрики "исследование защиты программ"?

ManHunter
(20.04.2023 в 18:38):
В этом мире всё уже написано и сломано до нас. Что ж теперь сидеть на попе ровно и ничего не делать? :)

Vnv
(20.04.2023 в 17:42):
Все сломано до нас:
4CE0F3 01 00
и ключ, типа:
"You name;chaotica-studio-1.0;1234567890123456789012345678901234567890" ;
4CE0F3 01 00
и ключ, типа:
"You name;chaotica-studio-1.0;1234567890123456789012345678901234567890" ;

Добавить комментарий
Заполните форму для добавления комментария

Освою ли я хакерство на старости лет? Мне 68.