Исследование защиты программы PicPick
Скриншот программы PicPick
PicPick - навороченный комбайн для работы с изображениями. На борту имеется захват экрана, графический редактор, инструмент выбора цвета, цветовая палитра, пиксельная линейка, угломер и многое другое. Готовый файл можно сразу же отправить в облачное хранилище, загрузить на фотохостинг, послать по электронной почте, или залить на FTP. Есть даже бесплатная версия для домашнего использования, но в ней, судя по описанию на офсайте, присутствует реклама. Платная версия рекламу не показывает, но работает в ознакомительном режиме всего 30 дней, что не есть правильно.
Забираем с офсайта дистрибутив платной версии, устанавливаем, смотрим. Основные признаки незарегистрированной версии - окно с предложением активировать вашу копию и характерные надписи в окне "О программе".
Триальное окно
Окно "О программе"
На первый взгляд главный исполняемый файл ничем не упакован, но в папке с программой обнаруживается файл VMProtectSDK32.dll, который жирненько так намекает на использование защиты VMProtect, а в главном файле при более внимательном осмотре обнаруживаются секции ".vmp0" и ".vmp1", что подтверждает первоначальную догадку. Как бы то ни было, отправляем файл на разбор в дизассемблер.
Строки в файле
Поиском по файлу обнаруживаем юникодные строчки, которые появляются в окне "О программе". Это строки для триальной версии, зарегистрированной, и еще какой-то с недоступным ключем. Давайте посмотрим в листинге дизассемблера, где и как эти строки используются.
Code (Assembler) : Убрать нумерацию
- .text:00ECB07A push dword ptr fs:[eax]
- .text:00ECB07D mov fs:[eax], esp
- .text:00ECB080 lea eax, [ebp+var_1C]
- ; Вызвать функцию проверки
- .text:00ECB083 call sub_EC4FF8
- ; Сохранить ее результат из EAX в ESI
- .text:00ECB088 mov esi, eax
- .text:00ECB08A mov eax, off_10BA35C
- .text:00ECB08F mov eax, [eax]
- .text:00ECB091 mov [eax], esi
- ; Контрольное значение ESI = 2710h ?
- .text:00ECB093 cmp esi, 2710h
- .text:00ECB099 jnz loc_ECB123
- .text:00ECB09F lea eax, [ebp+var_18]
- .text:00ECB0A2 push eax
- .text:00ECB0A3 lea eax, [ebp+var_A]
- .text:00ECB0A6 push eax
- .text:00ECB0A7 lea ecx, [ebp+var_9]
- .text:00ECB0AA lea edx, [ebp+var_8]
- .text:00ECB0AD lea eax, [ebp+var_4]
- .text:00ECB0B0 call sub_EC52D8
- .text:00ECB0B5 xor edx, edx
- .text:00ECB0B7 mov eax, [ebx+3E8h]
- .text:00ECB0BD call sub_544D58
- .text:00ECB0C2 cmp [ebp+var_A], 0
- .text:00ECB0C6 jz short loc_ECB0EA
- .text:00ECB0C8 mov edx, offset aYourLicenseKey
- ; "Your license key is no longer available"...
- .text:00ECB0CD mov eax, [ebx+430h]
- .text:00ECB0D3 call sub_544EA8
- .text:00ECB0D8 xor edx, edx
- .text:00ECB0DA mov eax, [ebx+434h]
- .text:00ECB0E0 call sub_544EA8
- .text:00ECB0E5 jmp loc_ECB22D
- .text:00ECB0EA ; ----------------------------------------
- .text:00ECB0EA loc_ECB0EA:
- .text:00ECB0EA lea eax, [ebp+var_20]
- .text:00ECB0ED push eax
- .text:00ECB0EE mov ecx, offset aThisProductIsL
- ; "This product is licensed to : "
- .text:00ECB0F3 mov edx, offset aLbllicenseto
- ; "lblLicenseTo"
- .text:00ECB0F8 mov eax, offset aAbout ; "About"
- .text:00ECB0FD call sub_104A4D8
- .text:00ECB102 mov edx, [ebp+var_20]
- .text:00ECB105 mov eax, [ebx+430h]
- .text:00ECB10B call sub_544EA8
- .text:00ECB110 mov edx, [ebp+var_4]
- .text:00ECB113 mov eax, [ebx+434h]
- .text:00ECB119 call sub_544EA8
- .text:00ECB11E jmp loc_ECB22D
- .text:00ECB123 ; ----------------------------------------
- .text:00ECB123 loc_ECB123:
- ; Контрольное значение ESI = 2711h ?
- .text:00ECB123 cmp esi, 2711h
- .text:00ECB129 jnz loc_ECB202
- .text:00ECB12F lea eax, [ebp+var_18]
- .text:00ECB132 push eax
- .text:00ECB133 lea eax, [ebp+var_A]
- .text:00ECB136 push eax
- .text:00ECB137 lea ecx, [ebp+var_9]
- .text:00ECB13A lea edx, [ebp+var_8]
- .text:00ECB13D lea eax, [ebp+var_4]
- .text:00ECB140 call sub_EC52D8
- .text:00ECB145 mov dl, 1
- .text:00ECB147 mov eax, [ebx+3E8h]
- .text:00ECB14D call sub_544D58
- .text:00ECB152 lea eax, [ebp+var_24]
- .text:00ECB155 push eax
- .text:00ECB156 mov ecx, offset aUnregisteredTr
- ; "UNREGISTERED : TRIAL"
- .text:00ECB15B mov edx, offset aLbltrial ; "lblTrial"
- .text:00ECB160 mov eax, offset aAbout ; "About"
- .text:00ECB165 call sub_104A4D8
- .text:00ECB16A mov edx, [ebp+var_24]
- .text:00ECB16D mov eax, [ebx+430h]
- .text:00ECB173 call sub_544EA8
- .text:00ECB178 lea eax, [ebp+var_28]
- .text:00ECB17B push eax
- .text:00ECB17C mov ecx, offset aExpires ; "Expires :"
- .text:00ECB181 mov edx, offset aLbltrialexpire
- ; "lblTrialExpiredDate"
- .text:00ECB186 mov eax, offset aAbout ; "About"
- .text:00ECB18B call sub_104A4D8
- .text:00ECB190 lea eax, [ebp+var_28]
Программа успешно "зарегистрирована"
Если хотите, то можете заменить эту надпись на что-нибудь более благозвучное, хотя основная цель все равно достигнута. Программа работает без ограничений по времени и без надоедливых окон. А что же VMProtect? А ничего, он тут только обеспечивает регистрационную схему, без реализаций функций защиты.
Просмотров: 1850 | Комментариев: 18
Метки: исследование защиты, графика
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Vladimir
(05.02.2021 в 23:17):
brute, спасибо, ознакомлюсь. Вообще идеальная программа для того, чтобы быстро кому-то что-то показать в картинках, ничего лишнего.
LaScala
(05.02.2021 в 22:57):
brute, спасибо большое!
вариант с переименованием en.txt --> ru.txt вполне приемлем.
И, да, Вы правы: на английском совсем не сложно.
вариант с переименованием en.txt --> ru.txt вполне приемлем.
И, да, Вы правы: на английском совсем не сложно.
brute
(05.02.2021 в 21:31):
LaScala, Можно взять файл ru.txt из последней версии на сайте, исправлять этот (переименовав в en.txt), перевести в редакторе ресурсов, использовать спец. прогу для локализации программ.. или пользоваться английской.
LaScala
(05.02.2021 в 21:01):
Brute, спасибо! Непонятно, как включить русскую локаль.
Файл locales\ru.txt присутствует. В окне Options -- Language в выпадающем списке только - English. Возможно, я несколько туп... ))
Файл locales\ru.txt присутствует. В окне Options -- Language в выпадающем списке только - English. Возможно, я несколько туп... ))
brute
(05.02.2021 в 17:16):
Vladimir, вот "моя" (патченная):
https://yadi.sk/d/6NJbv0rUvFFX6A
эта версия и последняя заливают на разные хостинги, у "моей" ссылка "прямая", подходит для размещения на сайтах. Сам подсмотрел как патчить, не помню где..
https://yadi.sk/d/6NJbv0rUvFFX6A
эта версия и последняя заливают на разные хостинги, у "моей" ссылка "прямая", подходит для размещения на сайтах. Сам подсмотрел как патчить, не помню где..
Vladimir
(05.02.2021 в 12:10):
brute, спасибо, тогда я вполне мог и не знать, потому что не пользуюсь этой возможностью, сразу шлю в скайпе/слаке.
brute
(05.02.2021 в 09:59):
Vladimir, не помню уже) Кажется, там какие-то ограничения с заливкой скрина в облако.. Может, в последних версиях и убрали все ограничения. У меня v5.4.0.1
Vladimir
(04.02.2021 в 23:18):
brute, стало интересно, а от чего нужно лечить lightshot? Пользуюсь несколько лет, просто работает, ничем о себе не напоминая.
brute
(28.01.2021 в 20:12):
14Мб дистрибутив? Есть же Lightshot, который "лечится" за минуту, ничем не накрыт и весит 1,5Мб после установки. И без "любимого" плиточного дизайна. На сервере скрины хранятся недолго (м/быть пару месяцев), но это у всех подобных программ так.
Fury
(26.01.2021 в 14:16):
Thank you...
https://ibb.co/KXhhG15
https://ibb.co/KXhhG15
Павел
(26.01.2021 в 12:04):
Exit, бесплатная версия время от времени выдаёт сообщение с предложением то ли купить про, то ли ещё что (не помню).
Exit
(26.01.2021 в 10:16):
ManHunter, нет, не блочил.
Да и на Ru-Board нет жалоб, что реклама лезет.
Давно ей пользуюсь, нравится, что можно сразу залить картинку.
Сейчас погонял несколько разных версий - рекламы нет)
Разраб, наверное, пугает, чтоб народ ломился в кассу ))
P.S. ссыль на старые версии _https://www.filepuma.com/download/picpick-206/versions/
Если будет нужна портабельная, то сетап распаковывается 7-Zip'ом,
только надо удалить saveappdata.ini
Забыл добавить.
В бесплатной версии, можно удалить из папки VMProtectSDK32.dll
Прога запускается и без этой dll )))
Да и на Ru-Board нет жалоб, что реклама лезет.
Давно ей пользуюсь, нравится, что можно сразу залить картинку.
Сейчас погонял несколько разных версий - рекламы нет)
Разраб, наверное, пугает, чтоб народ ломился в кассу ))
P.S. ссыль на старые версии _https://www.filepuma.com/download/picpick-206/versions/
Если будет нужна портабельная, то сетап распаковывается 7-Zip'ом,
только надо удалить saveappdata.ini
Забыл добавить.
В бесплатной версии, можно удалить из папки VMProtectSDK32.dll
Прога запускается и без этой dll )))
ManHunter
(26.01.2021 в 09:12):
Может на фаерволе заблочена, вот и не качает всякую гадость.
Exit
(26.01.2021 в 08:47):
Обновился, на последнюю бесплатную, тоже рекламы нет.
Это только я такой "особенный" или просто "не вижу" ее?)
Это только я такой "особенный" или просто "не вижу" ее?)
Exit
(26.01.2021 в 08:16):
Еще при чтении заголовка, челюсть упала на клаву, т.к знаю, что в папке лежит VMProtectSDK32.dll
А оказалось, что автор проги не использовал все возможности протектора))
Странный гражданин... Это так, мысли в слух.
Спасибо за интересный разбор!
P.S. пользуюсь v_4.2.8 - рекламы нет.
А оказалось, что автор проги не использовал все возможности протектора))
Странный гражданин... Это так, мысли в слух.
Спасибо за интересный разбор!
P.S. пользуюсь v_4.2.8 - рекламы нет.
ManHunter
(25.01.2021 в 21:58):
Конечно. Этим занимаются совершенно другие люди и совсем не ради спортивного интереса, а за вполне ощутимый прайс. Да и методы, которые они используют, никто по полочкам с красивыми картиночками выкладывать тоже не будет.
Жека
(25.01.2021 в 21:09):
А что насчёт VMProtect? Фейк? Лично я думаю, автор бы не осилил его анпакнуть не при каком раскладе:)
doz.me
(25.01.2021 в 20:20):
начало располагало на эпичную греблю с VMProtect)
Добавить комментарий
Заполните форму для добавления комментария