Blog. Just Blog

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

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы Fhotoroom HDR
Скриншот программы Fhotoroom HDR

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

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

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

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

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

Дальше все по классической схеме. Нам надо в дизассемблере определить место и условия срабатывания алгоритма, при котором показывается это сообщение.
  1. .text:00AAE932                 mov     ecx, [ebp-44h]
  2. .text:00AAE935                 push    eax
  3. .text:00AAE936                 push    ecx
  4. ; Сравнение двух строк
  5. .text:00AAE937                 call    ds:__vbaStrCmp
  6. .text:00AAE93D                 test    eax, eax
  7. ; Если строчки не равны, то выполнить переход
  8. .text:00AAE93F                 jnz     loc_AAEC39
  9. .text:00AAE945                 mov     ecx, 80020004h
  10. .text:00AAE94A                 mov     eax, 0Ah
  11. .text:00AAE94F                 mov     [ebp-0A0h], ecx
  12. .text:00AAE955                 mov     [ebp-90h], ecx
  13. .text:00AAE95B                 mov     [ebp-80h], ecx
  14. .text:00AAE95E                 lea     edx, [ebp-0C8h]
  15. .text:00AAE964                 lea     ecx, [ebp-78h]
  16. .text:00AAE967                 mov     [ebp-0A8h], eax
  17. .text:00AAE96D                 mov     [ebp-98h], eax
  18. .text:00AAE973                 mov     [ebp-88h], eax
  19. .text:00AAE979                 mov     dword ptr [ebp-0C0h], offset off_4A298C
  20. ; "Fhotoroom has been registered successfully!"
  21. .text:00AAE983                 mov     dword ptr [ebp-0C8h], 8
  22. .text:00AAE98D                 call    ds:__vbaVarDup
  23. .text:00AAE993                 lea     edx, [ebp-0A8h]
  24. .text:00AAE999                 lea     eax, [ebp-98h]
  25. .text:00AAE99F                 push    edx
  26. .text:00AAE9A0                 lea     ecx, [ebp-88h]
  27. .text:00AAE9A6                 push    eax
  28. .text:00AAE9A7                 push    ecx
  29. .text:00AAE9A8                 lea     edx, [ebp-78h]
  30. .text:00AAE9AB                 push    0
  31. .text:00AAE9AD                 push    edx
  32. .text:00AAE9AE                 call    ds:rtcMsgBox
  33. .text:00AAE9B4                 lea     eax, [ebp-0A8h]
  34. .text:00AAE9BA                 lea     ecx, [ebp-98h]
  35. .text:00AAE9C0                 push    eax
  36. .text:00AAE9C1                 lea     edx, [ebp-88h]
  37. .text:00AAE9C7                 push    ecx
  38. .text:00AAE9C8                 lea     eax, [ebp-78h]
  39. .text:00AAE9CB                 push    edx
  40. .text:00AAE9CC                 push    eax
  41. .text:00AAEC34                 jmp     loc_AAED34
  42. ; ...
  43. ; Часть кода пропущена
  44. ; ...
  45. .text:00AAEC39 ; ------------------------------------------------------
  46. ; Регистрационный код неправильный
  47. .text:00AAEC39 loc_AAEC39:
  48. .text:00AAEC39                 xor     ebx, ebx
  49. .text:00AAEC3B loc_AAEC3B:
  50. .text:00AAEC3B                 mov     ecx, 80020004h
  51. .text:00AAEC40                 mov     eax, 0Ah
  52. .text:00AAEC45                 mov     [ebp-0A0h], ecx
  53. .text:00AAEC4B                 mov     [ebp-90h], ecx
  54. .text:00AAEC51                 mov     [ebp-80h], ecx
  55. .text:00AAEC54                 lea     edx, [ebp-0C8h]
  56. .text:00AAEC5A                 lea     ecx, [ebp-78h]
  57. .text:00AAEC5D                 mov     [ebp-0A8h], eax
  58. .text:00AAEC63                 mov     [ebp-98h], eax
  59. .text:00AAEC69                 mov     [ebp-88h], eax
  60. .text:00AAEC6F                 mov     dword ptr [ebp-0C0h], offset aI_0
  61. ; "Invalid Registration Key!"
  62. .text:00AAEC79                 mov     dword ptr [ebp-0C8h], 8
  63. .text:00AAEC83                 call    ds:__vbaVarDup
  64. .text:00AAEC89                 lea     eax, [ebp-0A8h]
  65. .text:00AAEC8F                 lea     ecx, [ebp-98h]
  66. .text:00AAEC95                 push    eax
  67. .text:00AAEC96                 lea     edx, [ebp-88h]
  68. .text:00AAEC9C                 push    ecx
  69. .text:00AAEC9D                 push    edx
  70. .text:00AAEC9E                 lea     eax, [ebp-78h]
  71. .text:00AAECA1                 push    ebx
  72. .text:00AAECA2                 push    eax
  73. .text:00AAECA3                 call    ds:rtcMsgBox
  74. .text:00AAECA9                 lea     ecx, [ebp-0A8h]
  75. .text:00AAECAF                 lea     edx, [ebp-98h]
  76. .text:00AAECB5                 push    ecx
  77. .text:00AAECB6                 lea     eax, [ebp-88h]
  78. .text:00AAECBC                 push    edx
  79. .text:00AAECBD                 lea     ecx, [ebp-78h]
  80. ...
С одной стороны, программы на Visual Basic ковырять неудобно, но с другой стороны, все функции лежат на виду. Вот и здесь выполняется стандартная функция сравнения строчек vbaStrCmp. А поставим-ка на ней точку останова в отладчике! Запускаем программу под отладчиком и пробуем ее зарегистрировать с левыми данными. Отладчик остановится на функции сравнения. Смотрим регистры:

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

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

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

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

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

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

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 4755 | Комментариев: 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 тогда в сообщении будет правильный серийник!
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
- Ваш КО
Never (25.03.2013 в 14:07):
Ну ты понимаешь, что я не могу не спросить почему Челубей? )))

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2017
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.06 сек. / MySQL: 2 (0.0035 сек.) / Память: 4.5 Mb
Наверх