
Исследование защиты скринсейверов 3Planesoft

Исследование защиты скринсейверов 3Planesoft
3Planesoft - один из производителей очень красивых трехмерных скринсейверов. За годы существования компании было выпущено несколько десятков качественных скринсейверов и анимированных обоев различной тематики. К сожалению, практически все скринсейверы платные. Да, цена невысокая, но все-таки и не нулевая, поэтому добро пожаловать на мой разделочный стол. Защиту будем разбирать на примере одного из моих любимых скринсейверов The Lost Watch.
Забираем с офсайта дистрибутив, устанавливаем, смотрим. Скринсейвер состоит из двух частей, это лаунчер-конфигуратор, который записывается в папку WINDOWS\System32, а также основной графический модуль, который устанавливается в %ProgramFiles%. Начнем с конфигуратора. После запуска скринсейвера появляется инструкция о горячих клавишах, в том числе и о запуске настроек. Этим и воспользуемся. Попробуем зарегистрировать какими-нибудь левыми данными.

Сообщение о неправильной регистрации
Жесть какая... "Навереный"... Как я понимаю, это сообщение вообще никто никогда не видел. Легальные пользователи вводят корректные регистрационные данные, а любители халявы пользуются варезом. Другого объяснения я не вижу, иначе бы кто-нибудь уже давно сообщил разработчикам об ошибке.

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

Строки в файле
По наименованию тега в файле найдутся нужные строки. Теперь загоним исполняемый файл в дизассемблер и посмотрим, как и при каких условиях эти строки задействуются.
Code (Assembler) : Убрать нумерацию
- .text:00664573 call sub_764620
- .text:00664578 mov ecx, eax
- .text:0066457A call sub_764B80
- .text:0066457F mov byte ptr [ebp+var_4], 0Ch
- .text:00664583 push eax
- ; Вызвать функцию проверки
- .text:00664584 call sub_65D320
- .text:00664589 add esp, 4
- ; Сохранить результат проверки
- .text:0066458C mov [esi+29h], al
- .text:0066458F mov byte ptr [ebp+var_4], 0Bh
- .text:00664593 lea ecx, [ebp+var_840]
- .text:00664599 call sub_41DF50
- .text:0066459E mov byte ptr [ebp+var_4], 0Ah
- .text:006645A2 lea ecx, [ebp+var_880]
- .text:006645A8 call sub_41DF50
- .text:006645AD sub esp, 18h
- ; Проверить результат проверки ;)
- .text:006645B0 cmp byte ptr [esi+29h], 0
- .text:006645B4 mov ecx, esp
- .text:006645B6 mov [ebp+var_89C], esp
- .text:006645BC push 0Ch
- .text:006645BE mov dword ptr [ecx+10h], 0
- .text:006645C5 mov dword ptr [ecx+14h], 0Fh
- .text:006645CC push offset aRegistration
- ; "Registration"
- .text:006645D1 mov byte ptr [ecx], 0
- ; По результатам проверки результата проверки отработать условный переход
- .text:006645D4 jz loc_6647C0
- .text:006645DA call sub_41D370
- .text:006645DF mov byte ptr [ebp+var_4], 0Dh
- .text:006645E3 lea eax, [ebp+var_898]
- .text:006645E9 push eax
- .text:006645EA mov byte ptr [ebp+var_4], 0Ah
- .text:006645EE mov ecx, offset dword_958C70
- .text:006645F3 call sub_766840
- .text:006645F8 mov edi, eax
- .text:006645FA mov byte ptr [ebp+var_4], 0Eh
- .text:006645FE cmp dword ptr [edi+14h], 10h
- .text:00664602 jb short loc_664606
- .text:00664604 mov edi, [edi]
- .text:00664606 loc_664606:
- .text:00664606 sub esp, 18h
- .text:00664609 mov ecx, esp
- .text:0066460B mov [ebp+var_89C], esp
- .text:00664611 push 1Bh
- .text:00664613 mov dword ptr [ecx+10h], 0
- .text:0066461A mov dword ptr [ecx+14h], 0Fh
- .text:00664621 push offset aThankYouForReg
- ; "Thank you for registration!"
- .text:00664626 mov byte ptr [ecx], 0

Конфигуратор успешно "зарегистрирован"
Визуально все в порядке, конфигуратор находится в зарегистрированном состоянии. Запускаем скринсейвер. Через некоторое время поверх основного изображения выплывает наг-окно с требованием зарегистрироваться.

Сообщение незарегистрированной версии
Ну логично, чо. Конфигуратор-лаунчер мы пропатчили на предмет "регистрации", а основной файл скринсейвера об этом ничего не знает. Идем в Программы, находим здоровенный файл "The Lost Watch 3D Screensaver.exe", чтобы не терять времени отправляем его в дизассемблер. Кода в нем не так много, распотрошится быстро.
Теперь подумаем. Логично предположить, что схема проверки регистрации в обоих модулях должна если не совпадать, то быть очень похожей. Ненадолго вернемся к дизассемблерному листингу конфигуратора и посмотрим на функцию проверки. Обнаружится вот такая интересная строка:
Code (Assembler) : Убрать нумерацию
- .text:0065D426 push offset aSerials_sgn ; "\\serials.sgn"

Строка в файле
Во внутренностях исполняемого файла действительно обнаружится упоминание "serials.sgn", а в дизассемблерном листинге только одна функция, где эта строчка задействуется. Это функция по адресу 00833260. Если сравнить ее с проверкой из конфигуратора, то обнаружится много совпадений, значит мы нашли то, что искали. Разница только в том, что при возврате она дополнительно очищает стек, поэтому патчить ее начало придется парой команд MOV AL,1 и RET 8. Сохраняем изменения, запускаем. Больше никаких посторонних окон не появляется. Цель достигнута. Лаунчер-конфигуратор, в принципе, можно было и не патчить, там "регистрация" дает исключительно косметические изменения. Точно таким же образом нейтрализуется защита и на всех остальных скринсейверах 3Planesoft. Хотя, имхо, это один из редчайших случаев, когда действительно не западло раскошелиться на покупку.
Просмотров: 3010 | Комментариев: 8
Метки: исследование защиты

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
leonid
(19.06.2020 в 20:12):
ManHunter,это,что шутка?или ты предлагаешь ставить туда патч,раскрывающий память??)))

ManHunter
(18.06.2020 в 14:48):
Значит надо поставить Windows 7 x86 и нормальный антивирус.

Leonid
(18.06.2020 в 14:43):
Странно,касперский удалил этот скринсейвер у меня,посчитав трояном,на 32 версии семерки все работало отлично)

ManHunter
(14.08.2018 в 18:21):
Криптор плохо дружит с десяткой, потому и убрали. Хоть какая-то польза от этой говносистемы. Да и висел он там не всегда, какое-то время был аспр, а до него были такие же чистые файлы.

Isaev
(14.08.2018 в 18:07):
Как странно... EXECryptor решили сами убрать? Он у них на всех продуктах всегда висел

ManHunter
(22.07.2018 в 14:44):
А что, симпатичная девчонка.

Never
(22.07.2018 в 14:41):
Ох любишь ты Сашку )))

voffka
(14.07.2018 в 09:32):
ИМХО. Проще и лучше 1 байтом пропатчить проверку хэшей в конце этой процедуры.

Добавить комментарий
Заполните форму для добавления комментария
