Blog. Just Blog

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

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

Программа PhotoEQ предназначена для редактирования изображений. PhotoEQ автоматически исправляет баланс белого, экспозицию и контрастность, позволяет изменять размер, обрезать, вращать изображение, увеличивать резкость, устранять шумы и удалять эффект "красных глаз". Все делается через интуитивно понятный интерфейс, результат редактирования отображается рядом с оригиналом, поэтому легко визуально сравнить что было, и что стало. Но, в отличие от изображений, слова "софт" и "купить" в моем понимании рядом находиться не могут.

Скачиваем дистрибутив, устанавливаем. Если зайти в папку с установленной программой, то там обнаружится целая куча исполняемых файлов, нас пока интересует только главный файл photoEQ.exe. Он ничем не упакован, отправляем его в дизассемблер. При запуске сразу появляется окно с предложением зарегистрироваться.

Окно регистрации программы
Окно регистрации программы

Первое, что бросается в глаза - окно отличается по стилю от окна основного приложения. Менеджер процессов подтверждает, что это не просто так, а приложением был запущен файл RegisterPhotoEQ.exe, который отвечает за ввод регистрационного ключа. Этот файл ковырять не имеет смысла, ведь в основном файле все равно остается нетронутой проверка введенного серийника. Значит надо привязываться к внешним проявлениям триальности, например, к надписи в заголовке программы "Unlicensed Trial Version".

Строка сообщения
Строка сообщения

Никаких проблем, юникодная строка найдена. Теперь в дизассемблере посмотрим, где и при каких условиях она используется.
  1. .text:009F8070                 push    ebx
  2. .text:009F8071                 mov     ebx, eax
  3. .text:009F8073                 mov     eax, [ebx+880h]
  4. .text:009F8079                 mov     eax, [eax+18h]
  5. ; Вызвать функцию проверки
  6. .text:009F807C                 call    sub_9ED0B8
  7. ; AL!=0 - программа считается зарегистрированной
  8. .text:009F8081                 test    al, al
  9. .text:009F8083                 jnz     short loc_9F80E6
  10. ; Изменить текст в заголовке окна на "Unlicensed Trial Version"
  11. .text:009F8085                 mov     byte ptr [ebx+834h], 0
  12. .text:009F808C                 mov     byte ptr [ebx+835h], 0
  13. .text:009F8093                 mov     eax, [ebx+880h]
  14. .text:009F8099                 mov     eax, [eax+18h]
  15. .text:009F809C                 call    sub_9ED2AC
  16. .text:009F80A1                 mov     edx, 0Ah
  17. .text:009F80A6                 sub     edx, eax
  18. .text:009F80A8                 mov     [ebx+830h], edx
  19. .text:009F80AE                 mov     edx, offset aPhotoeqUnlicen
  20. ; "PhotoEQ -  Unlicensed Trial Version"
  21. .text:009F80B3                 mov     eax, ebx
  22. .text:009F80B5                 call    sub_4C92B4
  23. .text:009F80BA                 cmp     dword ptr [ebx+830h], 0
  24. .text:009F80C1                 jge     short loc_9F80CB
  25. .text:009F80C3                 xor     eax, eax
  26. .text:009F80C5                 mov     [ebx+830h], eax
Тут все просто, один раз вызывается функция проверки, по ее результатам выполняется или не выполняется условный переход. Вариантов патча два: заменить условный переход на безусловный или заменить начало функции проверки на две команды MOV AL,1 и RET. В любом случае программа больше не вспомнит о том, что она не зарегистрирована, окно регистрации никогда не появится и триальный срок перестанет тикать. Цель достигнута.

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

Кстати, целая куча исполняемых файлов в папке с программой - это не просто так. Вместо того, чтобы самостоятельно разобраться в вопросе и написать что-то свое, аффтар использует БЕСПЛАТНЫЕ утилиты других разработчиков для выполнения различных операций, заявленных в своей программе. Так что я не вижу ничего предосудительного в том, чтобы сделать оболочку для их запуска тоже бесплатной.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 3421 | Комментариев: 6

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

Комментарии

Отзывы посетителей сайта о статье
ManHunter (07.09.2015 в 14:55):
После RET ничего не выполняется
hatmaster (06.09.2015 в 23:01):
С заменой перехода более-менне понятно. А вот с функцией проверки - т.е. подменяются первые 2 команды, а оставшаяся часть кода нас никак не затрагивает?
X-Wing Top Ace (26.08.2015 в 15:29):
Цитатазаменить начало функции проверки на две команды MOV AL,1 и RET

Замечу, что такая взломка устойчива к введению в исходники дополнительных вызовов чекушки рега, хотя понятно, что этим примитивом улучшение кода защиты, очевидно, не исчерпывается. Но многие аффтары как раз с этого начинают.

Цитатазаменить условный переход на безусловный

Если можно не материться в коде, то в нем незачем материться. Второй вариант с подменой результата намного лучше.

Цитатааффтар использует БЕСПЛАТНЫЕ утилиты других разработчиков для выполнения различных операций, заявленных в своей программе.

И даже не пишет, что это он для них написал оболочку. Тем более поддерживаю и одобряю взломку этой оболочки! ;)

Цитатая не вижу ничего предосудительного в том, чтобы сделать оболочку для их запуска тоже бесплатной

Я тоже - мы ж не копирасты какие, чтоб в этом видеть что-то предосудительное! ;)
user (22.08.2015 в 15:21):
Понятно.. Версия 8.42
У меня старьё. Юникодные таблицы-то есть для кириллицы, но отображается всё байт-в-байт.
Есть и новые версии, использую только в некоторых случаях. Видимо, с юникодом это тоже будет такой вот случай.
ManHunter (22.08.2015 в 13:11):
В текстовом режиме можно переключиться на юникод (F8 - Unicode-CP_OEMCP) и потом искать строку без всяких нулей. http://rghost.ru/6VSzbJBmy/image.png
user (22.08.2015 в 10:21):
Кстати, если не секрет, как ищете в Hiew юникодные строки?
Тоже тупо вставкой 0 (или 4)после каждого символа?

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

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

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