Blog. Just Blog

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

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

Программа Unified Color HDR Express предназначена для создания и обработки с HDR-снимков. Позволяет регулировать цвет, яркость, цветность и контраст, выбирать настройки изображения из большого числа предустановленных фильтров, а также устанавливать их вручную. Все бы ничего, если б не цена в сотку баксов.

Скачиваем дистрибутив, устанавливаем, запускаем. Нас сразу дается выбор: продолжить в триальном режиме, купить или зарегистрировать. Пока выберем триальный режим, надо осмотреться получше.

Триальное окно
Триальное окно

Заглянем в окно "О программе". Сразу же бросается в глаза строка "Trial version". Это очень удобный ориентир для поиска.

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

Так и есть. Исполняемый файл ничем не упакован, строка легко находится. Там же неподалеку находится строчка "Licensed version", которая, как несложно догадаться, появится в случае успешной регистрации программы.

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

Обратимся к дизассемблеру. Нам надо выяснить, при каких условиях в окне "О программе" появляется либо триальная, либо лицензионная строка.
  1. .text:0047FB61                 push    edi
  2. .text:0047FB62                 lea     ecx, [esp+60h]
  3. .text:0047FB66                 mov     byte ptr [esp+0C0h], 14h
  4. ; Вызывать функцию проверки состояния программы
  5. .text:0047FB6E                 call    sub_415720
  6. .text:0047FB73                 push    0
  7. ; Сохранить ее результат в регистр EDI
  8. .text:0047FB75                 mov     edi, eax
  9. .text:0047FB77                 lea     eax, [esp+34h]
  10. .text:0047FB7B                 push    offset aTrialPeriodHas
  11. ; "Trial period has expired"
  12. .text:0047FB80                 push    eax
  13. .text:0047FB81                 call    sub_47DC90
  14. .text:0047FB86                 add     esp, 0Ch
  15. ; Если EDI = 2, то программа зарегистрирована
  16. .text:0047FB89                 cmp     edi, 2
  17. .text:0047FB8C                 mov     byte ptr [esp+0BCh], 15h
  18. .text:0047FB94                 jnz     loc_47FC43
  19. ; Лицензионная ветка алгоритма
  20. .text:0047FB9A                 push    0
  21. .text:0047FB9C                 lea     ecx, [esp+1Ch]
  22. .text:0047FBA0                 push    offset aLicensedVersio
  23. ; "Licensed version"
  24. .text:0047FBA5                 push    ecx
  25. .text:0047FBA6                 call    sub_47DC90
  26. .text:0047FBAB                 add     esp, 0Ch
  27. .text:0047FBAE                 push    eax
  28. .text:0047FBAF                 lea     ecx, [esp+34h]
  29. .text:0047FBB3                 mov     byte ptr [esp+0C0h], 16h
  30. ; ...
  31. ; Часть кода пропущена
  32. ; ...
  33. .text:0047FC3E                 jmp     loc_47FD4D
  34. .text:0047FC43 ; --------------------------------------------
  35. .text:0047FC43 loc_47FC43:
  36. ; Триальная ветка алгоритма
  37. .text:0047FC43                 test    edi, edi
  38. ; Если EDI = 0, то триальный срок вообще закончился, иначе
  39. ; просто перевести программу в триальный режим
  40. .text:0047FC45                 jnz     loc_47FD47
  41. .text:0047FC4B                 mov     byte ptr [esp+18h], 20h
  42. .text:0047FC50                 mov     eax, [esp+18h]
  43. .text:0047FC54                 push    eax
  44. .text:0047FC55                 lea     ecx, [esp+18h]
  45. .text:0047FC59                 call    ds:??0QChar@@QAE@UQLatin1Char@@@Z
  46. .text:0047FC5F                 push    edi
  47. .text:0047FC60                 lea     ecx, [esp+24h]
  48. .text:0047FC64                 push    offset aTrialVersion1D
  49. ; "Trial version (%1 days left)"
  50. .text:0047FC69                 push    ecx
  51. .text:0047FC6A                 call    sub_47DC90
  52. .text:0047FC6F                 add     esp, 0Ch
  53. .text:0047FC72                 mov     edi, eax
  54. .text:0047FC74                 lea     edx, [esp+14h]
  55. .text:0047FC78                 push    edx
  56. ...
Простой проверочный код без всяких сюрпризов. Я его немного прокомментировал для большей ясности, на всякий случай повторю словами. По умолчанию принимается, что триальный срок уже истек. Затем программа вызывает процедуру проверки состояния регистрации по адресу 415720. Она возвращает одно из трех значений: 2 - программа зарегистрирована, 1 - триальный срок истек, 0 - просто триальный режим. Нам остается пропатчить функцию проверки, чтобы она возвращала нужное нам значение, то есть 2. Почему я сразу выбрал вариант с патчем и даже не попытался разобрать алгоритм проверки? Посмотрите внимательнее на триальное окно, которое появляется при запуске. В программе используется он-лайн активация, значит серийники проверяются на сервере разработчика, и если ключ не был легально приобретен, то при любом раскладе мы получим отлуп. Так что патч и ничего кроме патча. Единственное, что нас интересует в процедуре проверки, это ее финальные строчки, где выполняется команда возврата:
  1. .text:00415896                 pop     ebp
  2. .text:00415897                 pop     ebx
  3. .text:00415898                 add     esp, 64h
  4. .text:0041589B                 retn    4
  5. .text:0041589B sub_415720      endp
Значит и нам при патче надо использовать команду RETN 4, чтобы стек был правильно восстановлен. Итак, патчим начало функции проверки парой команд MOV EAX,2 / RETN 4. Сохраняем изменения, запускаем.

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

Триальное окно при старте исчезло, перевод календаря на пару месяцев вперед на работоспособности никак не сказывается, а в окне "О программе" мы видим сообщение, что программа лицензирована. Вот так мы в очередной раз сэкономили сотку баксов на добрые дела.

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

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

Комментарии

Отзывы посетителей сайта о статье
ManHunter (03.04.2013 в 18:57):
Команда RETN XXX выполняет возврат из процедуры и снимает со стека XXX байт.
В языках высокого уровня это всё как раз делается автоматически.
Vopros (03.04.2013 в 18:50):
Manhunter - вопрос от новичка, что в ассемблере означает RET 4 и имеются аналогии с языками высокого уровня ?
Если кто - я ассемблере дуб. заранее спасибо.
ManHunter (01.04.2013 в 15:04):
Пасиб :)
Vladimir (01.04.2013 в 14:58):
Я собственно потому и спрашивал, что в IDA иногда строки находить получалось лишь прямым поиском в hex и последующим переходом к коду. Спасибо, пойду качать Hiew. Хорошего дня.))
ManHunter (01.04.2013 в 14:51):
Никаких секретов нет :) В HiEW есть приятная фича - если поставить курсор на начало строки и нажать F6, то получим код, который ссылается на эту строку. Соответственно, Shift+F6 - следующий кусочек кода. Но это тут к делу не относится. Дальше смотрим в левой колонке адрес и переходим по нему (Ctrl+G если чо) в IDA. Ну а дальше дело техники.
Можно обойтись и без HiEW, задать в IDA поиск строки, затем через Ctrl+X посмотреть перекрестные ссылки на нее. Но IDA иногда промахивается с идентификацией строк, поэтому я обычно использую HiEW как промежуточный инструмент.
Vladimir (01.04.2013 в 14:41):
А Вы не могли бы рассказать, каким образом Вы переходите от найденной в Hiew текстовой строки к ней же в дизассемблере? Или это какая-то штатная функция именно Hiew? Заранее прошу прощения за возможно глупый вопрос, так как Hiew никогда не пользовался.
ManHunter (26.03.2013 в 19:14):
Очевидно же :)
Vnv (26.03.2013 в 13:54):
unreal666,
> Use the following serial code to activate HDR Express 2 online:
Последнее слово :)
unreal666 (25.03.2013 в 23:12):
> Посмотрите внимательнее на триальное окно, которое появляется при запуске.

А как ты по этому окну определил, что активация онлайн? ничего такого особого там не вижу.
ManHunter (25.03.2013 в 19:24):
Google в помощь. Последнюю версию вряд ли найдешь, но версии чуть постарее тоже прекрасно работают.
DagalProject (25.03.2013 в 19:22):
Здравствуйте ManHunter! Вам нетрудно поделиться утилитой hiew 8.32
ManHunter (25.03.2013 в 10:49):
Ну я сейчас озадачился HDR, вот и подбираю себе инструментарий. Попутно поддерживаю себя в тонусе, а то уже почти отошел от дел.
Never (25.03.2013 в 10:48):
И опять по фото )))

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

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

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