Исследование защиты программы PhotoFiltre Studio
Скриншот программы PhotoFiltre Studio
PhotoFiltre Studio - программа для ретуши и редактирования изображений. На борту много разных инструментов для работы с графикой, этакий фотошопчик на минималочках. Зато цена к минимальным значениям точно не относится. Не то, чтобы прямо ощущался дефицит программ для редактирования фотографий, но для тренировки сгодится.
Забираем с сайта дистрибутив, устанавливаем, смотрим. Главный исполняемый файл ничем не упакован и не защищен, что ж, нашим проще.
Триальное окно
При запуске программы первым делом появляется окно с триальным счетчиком. Хорошо, есть одна зацепка.
Окно регистрации
А вот окно регистрации с сюрпризом. Кнопка подтверждения ввода неактивная. Очевидно, что корректность серийника проверяется в момент его набора. Программа написана на Дельфи, так что для наиболее удобного анализа обработчиков форм лучше воспользоваться Interactive Delphi Reconstructor, он же IDR. Параллельно отправляем исполняемый файл на дизассемблирование, так как в IDA с листингом работать все-таки удобнее и привычнее.
Обработчик редактирования поля ввода
Форма регистрации легко находится в списке форм по названию TREGFORM. В ней находятся несколько текстовых полей: имя и отдельные кусочки серийника. Если посмотреть обработчик изменения содержимого поля ввода имени, то там обнаружится только один вызов какой-то функции. Аналогичный вызов выполняется и при изменении поля серийника, но там еще дополнительно проверяется заполненность отдельных кусочков. Несложно догадаться, что именно эта функция каким-то образом должна быть связана с активацией кнопки ввода. Давайте вернемся в дизассемблер и посмотрим на нее повнимательнее.
Code (Assembler) : Убрать нумерацию
- CODE:005CF8B8 push ebp
- CODE:005CF8B9 mov ebp, esp
- CODE:005CF8BB xor ecx, ecx
- CODE:005CF8BD push ecx
- CODE:005CF8BE push ecx
- CODE:005CF8BF push ecx
- CODE:005CF8C0 push ecx
- CODE:005CF8C1 push ecx
- CODE:005CF8C2 push ebx
- CODE:005CF8C3 mov ebx, eax
- CODE:005CF8C5 xor eax, eax
- CODE:005CF8C7 push ebp
- CODE:005CF8C8 push offset loc_5CF97C
- CODE:005CF8CD push dword ptr fs:[eax]
- CODE:005CF8D0 mov fs:[eax], esp
- CODE:005CF8D3 lea edx, [ebp+var_4]
- CODE:005CF8D6 mov eax, ebx
- CODE:005CF8D8 call sub_5CF704
- CODE:005CF8DD mov eax, [ebp+var_4]
- CODE:005CF8E0 call sub_5897B4
- CODE:005CF8E5 test al, al
- CODE:005CF8E7 jz short loc_5CF933
- CODE:005CF8E9 lea edx, [ebp+var_8]
- CODE:005CF8EC mov eax, ebx
- CODE:005CF8EE call sub_5CF7F4
- CODE:005CF8F3 mov eax, [ebp+var_8]
- CODE:005CF8F6 push eax
- CODE:005CF8F7 lea edx, [ebp+var_C]
- CODE:005CF8FA mov eax, ebx
- CODE:005CF8FC call sub_5CF704
- CODE:005CF901 mov eax, [ebp+var_C]
- CODE:005CF904 pop edx
- ; Вызвать функцию проверки
- CODE:005CF905 call sub_589838
- CODE:005CF90A test al, al
- ; Активировать кнопку ввода
- CODE:005CF90C jnz short loc_5CF937
- CODE:005CF90E lea edx, [ebp+var_10]
- CODE:005CF911 mov eax, ebx
- CODE:005CF913 call sub_5CF7F4
- CODE:005CF918 mov eax, [ebp+var_10]
- CODE:005CF91B push eax
- CODE:005CF91C lea edx, [ebp+var_14]
- CODE:005CF91F mov eax, ebx
- CODE:005CF921 call sub_5CF758
- CODE:005CF926 mov eax, [ebp+var_14]
- CODE:005CF929 pop edx
- ; Вызвать функцию проверки
- CODE:005CF92A call sub_589838
- CODE:005CF92F test al, al
- ; Активировать кнопку ввода
- CODE:005CF931 jnz short loc_5CF937
- CODE:005CF933 loc_5CF933:
- ; Состояние кнопки - отключена
- CODE:005CF933 xor edx, edx
- CODE:005CF935 jmp short loc_5CF939
- CODE:005CF937 ; --------------------------------------
- CODE:005CF937 loc_5CF937:
- ; Состояние кнопки - включена
- CODE:005CF937 mov dl, 1
- CODE:005CF939 loc_5CF939:
- ; CODE XREF: Svrmainform::TWebAppDbgMainForm::MainUpdateActionUpdate
- CODE:005CF939 mov eax, [ebx+314h]
- CODE:005CF93F mov ecx, [eax]
- CODE:005CF941 call dword ptr [ecx+64h]
- CODE:005CF944 mov eax, [ebx+314h]
- CODE:005CF94A mov edx, [eax]
- CODE:005CF94C call dword ptr [edx+50h]
- CODE:005CF94F test al, al
- CODE:005CF951 jz short loc_5CF961
- CODE:005CF953 mov eax, [ebx+314h]
- CODE:005CF959 mov edx, [eax]
- CODE:005CF95B call dword ptr [edx+0C4h]
- CODE:005CF961 loc_5CF961:
- CODE:005CF961 xor eax, eax
- CODE:005CF963 pop edx
- CODE:005CF964 pop ecx
- CODE:005CF965 pop ecx
- CODE:005CF966 mov fs:[eax], edx
- CODE:005CF969 push offset loc_5CF983
- CODE:005CF96E loc_5CF96E:
- CODE:005CF96E lea eax, [ebp+var_14]
- CODE:005CF971 mov edx, 5
- CODE:005CF976 call @System@@LStrArrayClr$qqrpvi
- CODE:005CF97B retn
- CODE:005CF97C loc_5CF97C:
- CODE:005CF97C jmp unknown_libname_69
- CODE:005CF981 ; --------------------------------------
- CODE:005CF981 jmp short loc_5CF96E
- CODE:005CF983 ; --------------------------------------
- CODE:005CF983 loc_5CF983:
- CODE:005CF983 pop ebx
- CODE:005CF984 mov esp, ebp
- CODE:005CF986 pop ebp
- CODE:005CF987 retn
Программа успешно "зарегистрирована"
Теперь проверим функционал. Перевод календаря на работоспособность не влияет, все триальные ограничения сняты, никаких окон не появляется, файлы сохраняются, в окне "О программе" красуется введенное регистрационное имя. Цель достигнута.
Просмотров: 899 | Комментариев: 2
Метки: исследование защиты, графика
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(30.07.2022 в 09:22):
0101, ну так логику никто ж не отменял. Это касаемо статьи. Остальное как в школе учили: если слово можно заменить на аналогичное по смыслу, то слитно. "Несложно" = "Легко", пишем слитно. А вот конструкции вида "Не сложно, а легко" или "совсем не сложно" пишем раздельно. https://nauka.club/russkiy-yaz...slozhno.html
0101
(30.07.2022 в 08:52):
Любимая фраза в каждой статье: "Несложно догадаться". Конечно, не сложно!)
п.с. сложнее определить слитно или раздельно писать "не@сложно")
п.с. сложнее определить слитно или раздельно писать "не@сложно")
Добавить комментарий
Заполните форму для добавления комментария