Исследование защиты программы Happy Photo Viewer
Скриншот программы Happy Photo Viewer
Happy Photo Viewer - программа для просмотра пачки фотографий в режиме слайдшоу с различными музыкальными и графическими эффектами. Без регистрации работает 15 дней, после чего требует прогуляться в кассу.
Забираем с офсайта дистрибутив, устанавливаем, смотрим. Исполняемый файл ничем не упакован, отправляем его на дизассемблирование. При каждом запуске программа предлагает выбрать дальнейшие действия: продолжить пробный период, ввести серийный номер или оплатить лицензию.
Триальное окно
По текстовым строчкам из окна ввода серийного номера в исполняемом файле обнаружатся вот такие приметные сообщения:
Строки сообщений в файле
Нас интересует строка с благодарностью за регистрацию. Как нетрудно догадаться, она должна появиться при вводе правильных регистрационных данных. Вернемся в дизассемблер и посмотрим, при каких условиях она будет задействована.
Code (Assembler) : Убрать нумерацию
- .text:00538D96 mov eax, [ebx+364h]
- .text:00538D9C cmp dword ptr [eax+260h], 1
- .text:00538DA3 jnz short loc_538E21
- .text:00538DA5 lea eax, [ebp+var_4]
- .text:00538DA8 push eax
- .text:00538DA9 xor ecx, ecx
- .text:00538DAB mov edx, offset _str_Your_registrati.Text
- .text:00538DB0 mov eax, offset _str_Register.Text
- .text:00538DB5 call @Dialogs@InputBox
- ; Dialogs::InputBox(System::AnsiString,System::AnsiString,System::AnsiString)
- .text:00538DBA lea edx, [ebp+var_8]
- .text:00538DBD mov eax, 2000h
- ; Сконвертировать число 2000h (8192) в строку
- .text:00538DC2 call @Sysutils@IntToStr$qqri
- ; Sysutils::IntToStr(int)
- .text:00538DC7 mov eax, [ebp+var_8]
- .text:00538DCA mov edx, [ebp+var_4]
- ; Поиск подстроки в строке
- .text:00538DCD call @System@Pos$qqrx17System@AnsiStringt1
- ; System::Pos(System::AnsiString,System::AnsiString)
- .text:00538DD2 dec eax
- .text:00538DD3 jl short loc_538E21
- .text:00538DD5 lea edx, [ebp+var_C]
- .text:00538DD8 mov eax, 0FFFFFFF9h
- ; Сконвертировать число 0FFFFFFF9h (-7) в строку
- .text:00538DDD call @Sysutils@IntToStr$qqri
- ; Sysutils::IntToStr(int)
- .text:00538DE2 mov eax, [ebp+var_C]
- .text:00538DE5 mov edx, [ebp+var_4]
- ; Поиск подстроки в строке
- .text:00538DE8 call @System@Pos$qqrx17System@AnsiStringt1
- ; System::Pos(System::AnsiString,System::AnsiString)
- .text:00538DED dec eax
- .text:00538DEE jl short loc_538E21
- .text:00538DF0 lea eax, [ebp+var_4]
- .text:00538DF3 mov edx, offset _str_Incorrect_Regis.Text
- .text:00538DF8 call @System@@LStrLAsg$qqrpvpxv
- ; System::__linkproc__ LStrLAsg(void *,void *)
- .text:00538DFD mov eax, off_547BA0
- .text:00538E02 mov eax, [eax]
- .text:00538E04 call sub_53E0BC
- .text:00538E09 mov eax, off_547BA0
- .text:00538E0E mov eax, [eax]
- .text:00538E10 mov byte ptr [eax+42Dh], 1
- .text:00538E17 mov eax, offset _str_Thank_you_for_r.Text
- .text:00538E1C call @Dialogs@ShowMessage
- ; Dialogs::ShowMessage(System::AnsiString)
Программа успешно зарегистрирована
После ввода серийника программа благодарит за регистрацию, а триальное окно при последующих запусках больше не появляется. Цель достигнута. Кейген сделать, конечно, можно, но не вижу смысла.
Просмотров: 1049 | Комментариев: 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):
Там ещё и Хранитель экрана в комплекте!
Добавить комментарий
Заполните форму для добавления комментария