Blog. Just Blog

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

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

Happy Photo Viewer - программа для просмотра пачки фотографий в режиме слайдшоу с различными музыкальными и графическими эффектами. Без регистрации работает 15 дней, после чего требует прогуляться в кассу.

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

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

По текстовым строчкам из окна ввода серийного номера в исполняемом файле обнаружатся вот такие приметные сообщения:

Строки сообщений в файле
Строки сообщений в файле

Нас интересует строка с благодарностью за регистрацию. Как нетрудно догадаться, она должна появиться при вводе правильных регистрационных данных. Вернемся в дизассемблер и посмотрим, при каких условиях она будет задействована.
  1. .text:00538D96                 mov     eax, [ebx+364h]
  2. .text:00538D9C                 cmp     dword ptr [eax+260h], 1
  3. .text:00538DA3                 jnz     short loc_538E21
  4. .text:00538DA5                 lea     eax, [ebp+var_4]
  5. .text:00538DA8                 push    eax
  6. .text:00538DA9                 xor     ecx, ecx
  7. .text:00538DAB                 mov     edx, offset _str_Your_registrati.Text
  8. .text:00538DB0                 mov     eax, offset _str_Register.Text
  9. .text:00538DB5                 call    @Dialogs@InputBox
  10. ; Dialogs::InputBox(System::AnsiString,System::AnsiString,System::AnsiString)
  11. .text:00538DBA                 lea     edx, [ebp+var_8]
  12. .text:00538DBD                 mov     eax, 2000h
  13. ; Сконвертировать число 2000h (8192) в строку
  14. .text:00538DC2                 call    @Sysutils@IntToStr$qqri
  15. ; Sysutils::IntToStr(int)
  16. .text:00538DC7                 mov     eax, [ebp+var_8]
  17. .text:00538DCA                 mov     edx, [ebp+var_4]
  18. ; Поиск подстроки в строке
  19. .text:00538DCD                 call    @System@Pos$qqrx17System@AnsiStringt1
  20. ; System::Pos(System::AnsiString,System::AnsiString)
  21. .text:00538DD2                 dec     eax
  22. .text:00538DD3                 jl      short loc_538E21
  23. .text:00538DD5                 lea     edx, [ebp+var_C]
  24. .text:00538DD8                 mov     eax, 0FFFFFFF9h
  25. ; Сконвертировать число 0FFFFFFF9h (-7) в строку
  26. .text:00538DDD                 call    @Sysutils@IntToStr$qqri
  27. ; Sysutils::IntToStr(int)
  28. .text:00538DE2                 mov     eax, [ebp+var_C]
  29. .text:00538DE5                 mov     edx, [ebp+var_4]
  30. ; Поиск подстроки в строке
  31. .text:00538DE8                 call    @System@Pos$qqrx17System@AnsiStringt1
  32. ; System::Pos(System::AnsiString,System::AnsiString)
  33. .text:00538DED                 dec     eax
  34. .text:00538DEE                 jl      short loc_538E21
  35. .text:00538DF0                 lea     eax, [ebp+var_4]
  36. .text:00538DF3                 mov     edx, offset _str_Incorrect_Regis.Text
  37. .text:00538DF8                 call    @System@@LStrLAsg$qqrpvpxv
  38. ; System::__linkproc__ LStrLAsg(void *,void *)
  39. .text:00538DFD                 mov     eax, off_547BA0
  40. .text:00538E02                 mov     eax, [eax]
  41. .text:00538E04                 call    sub_53E0BC
  42. .text:00538E09                 mov     eax, off_547BA0
  43. .text:00538E0E                 mov     eax, [eax]
  44. .text:00538E10                 mov     byte ptr [eax+42Dh], 1
  45. .text:00538E17                 mov     eax, offset _str_Thank_you_for_r.Text
  46. .text:00538E1C                 call    @Dialogs@ShowMessage
  47. ; Dialogs::ShowMessage(System::AnsiString)
В листинге видны вызовы библиотечных функций поиска подстроки в строке, но что и где ищется пока непонятно. Для прояснения ситуации загрузим программу в отладчик, поставим точку останова где-нибудь по адресу 00538DA9 и отпустим программу на выполнение. При вводе левого серийника сработает точка останова. В пошаговом режиме выясняем, что первая проверка - поиск подстроки "8192" в строке серийника, причем ее позиция должна быть дальше первого символа. Вторая проверка - наличие подстроки "-7" в строке серийника, позиция также не первая. Остальные символы никакого значения не имеют. Например, валидным серийником, подходящим под эту схему, будет строка "0000-7000-8192" или что-то подобное. Перезапускаем программу, вводим найденный серийник.

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

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

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

Комментарии

Отзывы посетителей сайта о статье
ManHunter (03.07.2021 в 21:45):
Fedy, обязательно держи нас в курсе.
Fedy (03.07.2021 в 21:43):
Совсем не интересно такую глупость ковырять идея генерации серийника только интересна и всего, а все остальное в осадок
ManHunter (23.06.2021 в 19:27):
Такой же ущербный, как и сама программа.
wet (23.06.2021 в 13:31):
Там ещё и Хранитель экрана в комплекте!

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

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

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