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

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

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

Нехорошая строка найдена
Дальше все по классической схеме. Нам надо в дизассемблере определить место и условия срабатывания алгоритма, при котором показывается это сообщение.
Code (Assembler) : Убрать нумерацию
- .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]
- ...

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

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

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

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Станислав
(29.06.2013 в 08:17):
Или прочли вашу статью, или не все так просто. Регистрационный ключь уже видать другой, а может и генерируется по новой.

SVS
(12.04.2013 в 20:03):
У нас менталитет другой ;)

Never
(12.04.2013 в 13:01):
Вот же тему развили ))))

ManHunter
(11.04.2013 в 21:49):
Не ищите потаенного смысла там, где его нет. Просто прикольная игра слов, сопоставленная с картинкой, и ничего больше.

КО
(11.04.2013 в 21:29):
Челубей это программа, и она борется с засвеченной фотографией пользователя. То бишь правильно выставляет баланс белого. Думаю это автор имел в виду.
Ваш КО
Ваш КО

unix3d
(29.03.2013 в 14:58):
Программа сама выступает в роли генератора правильного ключа
просто за нопить
.text:00AAEC6F mov dword ptr [ebp-0C0h], offset off_4A29E8 тогда в сообщении будет правильный серийник!
просто за нопить
.text:00AAEC6F mov dword ptr [ebp-0C0h], offset off_4A29E8 тогда в сообщении будет правильный серийник!

ManHunter
(28.03.2013 в 19:14):
"... много в мире историй нереальных ..."
Рисунок, кстати, действительно выдернут из каких-то интернетов, так что авторство не мое.
Рисунок, кстати, действительно выдернут из каких-то интернетов, так что авторство не мое.

SVS
(28.03.2013 в 19:14):
ManHunter, немножко не так, ты же закрасил Пересвета. Копьишко Челубея не достаёт тебя, ты - выкоко и далеко. Так что мы по-своему видим перекрашенную картину. Раз она перекрашена, то и история другая уже.

ManHunter
(28.03.2013 в 19:11):
SVS, если я правильно помню школьный курс истории, то Пересвет при этом тоже погиб. Так что аналогия неправильная. Но жажда денег действительно должна быть наказуема.

SVS
(28.03.2013 в 19:09):
Never, Пересвет=ManHunter ))) пронзил копьём Челубея - басурмана, охочего до денег ;)) что-то типа того.

Андрей
(28.03.2013 в 13:42):
Опять rусских обижают, одного Челубея оставили :)

Never
(25.03.2013 в 14:18):
Как всегда жжошь! ))) Чет не сразу понял )

ManHunter
(25.03.2013 в 14:08):
Ну видимо потому что именно он боролся с Пересветом :)
http://ru.wikipedia.org/wiki/%...%EF%EE%EB%E5
- Ваш КО
http://ru.wikipedia.org/wiki/%...%EF%EE%EB%E5
- Ваш КО

Never
(25.03.2013 в 14:07):
Ну ты понимаешь, что я не могу не спросить почему Челубей? )))

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