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


Скриншот программы Fhotoroom HDR

Fhotoroom HDR - еще одна программа для работы с HDR-изображениями и не только. Это полноценный графический редактор для профессиональных фотографов и любителей. Fhotoroom HDR позволяет обрабатывать цифровые снимки в формате JPEG, RAW и HDR. Имеет богатый инструментарий для корректировки фото, набор фильтров с различными эффектами панорамирования, создания 3D пространств, рыбий глаз и много других. Аффтар рассчитывает поиметь с нас полтинничек вечнозеленых денег, но, похоже, придется его в этом разочаровать.

Скачиваем дистрибутив, устанавливаем, запускаем. Нам сразу предлагают зарегистрироваться в оффлайновом режиме или через Интернет. Естественно, выбираем оффлайновую активацию, палево наших данных на сервере разработчика нам вовсе ни к чему. На ввод левых данных программа реагирует сообщением "Invalid Registration Key":


Сообщение о неправильной регистрации

Поищем эту строчку в исполняемом файле. К счастью, никаких упаковщиков или протекторов на нем не навешано. Поиском находится юникодная строка:


Нехорошая строка найдена

Дальше все по классической схеме. Нам надо в дизассемблере определить место и условия срабатывания алгоритма, при котором показывается это сообщение.
.text:00AAE932                 mov     ecx, [ebp-44h]
.text:00AAE935                 push    eax
.text:00AAE936                 push    ecx
; Сравнение двух строк
.text:00AAE937                 call    ds:__vbaStrCmp
.text:00AAE93D                 test    eax, eax
; Если строчки не равны, то выполнить переход
.text:00AAE93F                 jnz     loc_AAEC39
.text:00AAE945                 mov     ecx, 80020004h
.text:00AAE94A                 mov     eax, 0Ah
.text:00AAE94F                 mov     [ebp-0A0h], ecx
.text:00AAE955                 mov     [ebp-90h], ecx
.text:00AAE95B                 mov     [ebp-80h], ecx
.text:00AAE95E                 lea     edx, [ebp-0C8h]
.text:00AAE964                 lea     ecx, [ebp-78h]
.text:00AAE967                 mov     [ebp-0A8h], eax
.text:00AAE96D                 mov     [ebp-98h], eax
.text:00AAE973                 mov     [ebp-88h], eax
.text:00AAE979                 mov     dword ptr [ebp-0C0h], offset off_4A298C
; "Fhotoroom has been registered successfully!"
.text:00AAE983                 mov     dword ptr [ebp-0C8h], 8
.text:00AAE98D                 call    ds:__vbaVarDup
.text:00AAE993                 lea     edx, [ebp-0A8h]
.text:00AAE999                 lea     eax, [ebp-98h]
.text:00AAE99F                 push    edx
.text:00AAE9A0                 lea     ecx, [ebp-88h]
.text:00AAE9A6                 push    eax
.text:00AAE9A7                 push    ecx
.text:00AAE9A8                 lea     edx, [ebp-78h]
.text:00AAE9AB                 push    0
.text:00AAE9AD                 push    edx
.text:00AAE9AE                 call    ds:rtcMsgBox
.text:00AAE9B4                 lea     eax, [ebp-0A8h]
.text:00AAE9BA                 lea     ecx, [ebp-98h]
.text:00AAE9C0                 push    eax
.text:00AAE9C1                 lea     edx, [ebp-88h]
.text:00AAE9C7                 push    ecx
.text:00AAE9C8                 lea     eax, [ebp-78h]
.text:00AAE9CB                 push    edx
.text:00AAE9CC                 push    eax
.text:00AAEC34                 jmp     loc_AAED34
; ...
; Часть кода пропущена
; ...
.text:00AAEC39 ; ------------------------------------------------------
; Регистрационный код неправильный
.text:00AAEC39 loc_AAEC39:
.text:00AAEC39                 xor     ebx, ebx
.text:00AAEC3B loc_AAEC3B:
.text:00AAEC3B                 mov     ecx, 80020004h
.text:00AAEC40                 mov     eax, 0Ah
.text:00AAEC45                 mov     [ebp-0A0h], ecx
.text:00AAEC4B                 mov     [ebp-90h], ecx
.text:00AAEC51                 mov     [ebp-80h], ecx
.text:00AAEC54                 lea     edx, [ebp-0C8h]
.text:00AAEC5A                 lea     ecx, [ebp-78h]
.text:00AAEC5D                 mov     [ebp-0A8h], eax
.text:00AAEC63                 mov     [ebp-98h], eax
.text:00AAEC69                 mov     [ebp-88h], eax
.text:00AAEC6F                 mov     dword ptr [ebp-0C0h], offset aI_0
; "Invalid Registration Key!"
.text:00AAEC79                 mov     dword ptr [ebp-0C8h], 8
.text:00AAEC83                 call    ds:__vbaVarDup
.text:00AAEC89                 lea     eax, [ebp-0A8h]
.text:00AAEC8F                 lea     ecx, [ebp-98h]
.text:00AAEC95                 push    eax
.text:00AAEC96                 lea     edx, [ebp-88h]
.text:00AAEC9C                 push    ecx
.text:00AAEC9D                 push    edx
.text:00AAEC9E                 lea     eax, [ebp-78h]
.text:00AAECA1                 push    ebx
.text:00AAECA2                 push    eax
.text:00AAECA3                 call    ds:rtcMsgBox
.text:00AAECA9                 lea     ecx, [ebp-0A8h]
.text:00AAECAF                 lea     edx, [ebp-98h]
.text:00AAECB5                 push    ecx
.text:00AAECB6                 lea     eax, [ebp-88h]
.text:00AAECBC                 push    edx
.text:00AAECBD                 lea     ecx, [ebp-78h]
...

С одной стороны, программы на Visual Basic ковырять неудобно, но с другой стороны, все функции лежат на виду. Вот и здесь выполняется стандартная функция сравнения строчек vbaStrCmp. А поставим-ка на ней точку останова в отладчике! Запускаем программу под отладчиком и пробуем ее зарегистрировать с левыми данными. Отладчик остановится на функции сравнения. Смотрим регистры:


Указатели на строчки в регистрах

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


Программа успешно зарегистрирована

Регистрация проходит успешно, все ограничения исчезают, заголовок окна программы меняется на "Fhotoroom HDR", ну и все такое прочее. Цель достигнута, а затрачено времени на все меньше десяти минут.


Челубей борется с Пересветом

При написании статьи была использована картина "Челубей борется с Пересветом" неизвестного автора.
Добавлено: 13 Сентября 2013 10:23:18 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...