
Скриншот программы 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", ну и все такое прочее. Цель достигнута, а затрачено времени на все меньше десяти минут.

Челубей борется с Пересветом
При написании статьи была использована картина "Челубей борется с Пересветом" неизвестного автора.