
Исследование защиты программы DLNow Video Downloader

Скриншот программы DLNow Video Downloader
DLNow Video Downloader - платная надстройка над бесплатными инструментами для загрузки видео с множества популярных видеохостингов и конвертирования их в разные форматы. Как это принято среди аффтаров подобных поделий, никаких благодарностей разработчикам бесплатных инструментов они не выражают, придется сделать это самому. Итак, за существование DLNow Video Downloader объявляется благодарность RTMPDump, FFmpeg и youtube-dl. А вот аффтара самой программы за подобные косяки мы сейчас будем опускать на денежку.
Забираем с сайта дистрибутив, устанавливаем, запускаем. Первым делом нас встречает окно ввода серийного номера.

Окно регистрации
После ввода серийного номера программа лезет проверять его на свой сервер. Если закрыть доступ фаерволом, то получим сообщение об ошибке.

Сообщение о неправильной регистрации
Другое сообщение об ошибке мы получим после ввода левого серийника. Алгоритм генерации, как и алгоритм проверки, мы не знаем, все находится на сервере разработчика. Но можно попробовать сделать так, чтобы программа любой ответ от сервера приняла как корректный. Мы знаем строку сообщения, которое появляется при неправильном ключе. Исполняемый файл ничем не упакован, отправляем его на дизассемблирование и поищем строчку в файле:

Строка в файле
Теперь обратимся к листингу. Нас интересует участок кода, где эта строка используется. Вот он:
Code (Assembler) : Убрать нумерацию
- .text:004120ED mov esi, ds:lstrcmpA
- .text:004120F3 lea eax, [ebp-3D8h]
- ; Сравнить полученный результат со строкой "ok"
- .text:004120F9 push offset aOk_0 ; "ok"
- .text:004120FE push eax ; lpString1
- .text:004120FF call esi ; lstrcmpA
- .text:00412101 test eax, eax
- ; Если не равно, то перейти дальше
- .text:00412103 jnz short loc_41217C
- ...
- ...
- ...
- ; Ключ не найден или лицензия уже просрочена
- .text:0041217C loc_41217C:
- .text:0041217C push offset aKeyNotFound ; "key not found"
- .text:00412181 lea eax, [ebp-3D8h]
- .text:00412187 push eax ; lpString1
- .text:00412188 call esi ; lstrcmpA
- .text:0041218A test eax, eax
- .text:0041218C jz loc_412350
- .text:00412192 push offset aLicenseExpired ; "license expired"
- .text:00412197 lea eax, [ebp-3D8h]
- .text:0041219D push eax ; lpString1
- .text:0041219E call esi ; lstrcmpA
- .text:004121A0 test eax, eax
- .text:004121A2 jz loc_412350
- ...
- ...
- ...
- .text:00412350 loc_412350:
- .text:00412350 mov ecx, dword_437654
- .text:00412356 push offset aThisIsNotAVali
- ; "This is not a valid license key."
- .text:0041235B call sub_40F550

Программа успешно активирована
Вот и все, теперь можно откатывать из бэкапа оригинальный файл, активация сохранится. Если вдруг при каком-нибудь очередном обновлении активация слетит, то процесс придется повторить.
В строке с параметрами, которая отправляется серверному активатору, одним из значений является какой-то идентификатор. Можно предположить, что при активации выполняется привязка к компьютеру (UPD: я проверил, это действительно так). Если мы хотим, чтобы программа работала, например, с флешки и на любом компьютере, то придется ее патчить. В качестве зацепки для поиска триала лучше всего воспользоваться строчкой, которая дописывается в заголовок незарегистрированной версии. Поищем строчку "Trial" в файле:

Строка в файле
По перекрестным ссылкам в листинге дизассемблера переходим на следующий код:
Code (Assembler) : Убрать нумерацию
- .text:00412718 lea ecx, [ecx+edi*2]
- .text:0041271B call sub_4011D0
- .text:00412720 loc_412720:
- .text:00412720 push offset aTrial ; "Trial"
- .text:00412725 mov ecx, ebx
- .text:00412727 call sub_40F550
- .text:0041272C mov edi, eax
- .text:0041272E lea ecx, [ebp+String]
- .text:00412734 mov edx, esi
Code (Assembler) : Убрать нумерацию
- .text:004125F0 cmp dword_436794, 0
- .text:004125F7 jz loc_412840
Code (Assembler) : Убрать нумерацию
- .data:00436794 dword_436794 dd 1
Триальная надпись в заголовке программы исчезла, окно ввода серийника не появляется, кнопка активации в интерфейсе главного окна пропала. При переводе системных часов на пару месяцев вперед ничего страшного не происходит. Цель достигнута. Защита нейтрализована одним байтом, а точнее даже одним битом.
Просмотров: 3199 | Комментариев: 9
Метки: исследование защиты, мультимедиа

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(13.03.2024 в 11:37):
Надо же.. в последней версии FFmpeg и youtube-dl упомянули в About. Прогресс налицо.

ManHunter
(03.02.2019 в 21:27):
MassTube последнее время часто косячит, а эта ничо, качает и не пищит. Так что сам пользуюсь и очень доволен.

ManHunter
(20.09.2018 в 10:42):
Да было б за что :)

Алексей
(14.09.2018 в 19:18):
Надо будет попробовать её в деле.. А то я качал постоянно 4K Video Downloader но версия у меня уже старенькая... А эта всё как не как поновее будет. Спасибо ManHunter.

ManHunter
(07.09.2018 в 11:52):
Добавил в статью подмену активации. И да, там действительно привязка к железу.

wet
(07.09.2018 в 06:21):
А если обновлённая программа больше не проверяет ни какие ключи на сервере, а только регистрацию в реестре, то значит можно REG файл сделать на все времена? Будет ли от одинаков для разных компьютеров?

ManHunter
(06.09.2018 в 23:26):
Зато в патченном виде она прекрасно будет жить на флешке без необходимости активировать на каждом компе :)

pawel97
(06.09.2018 в 23:00):
"Активация нам ничем не поможет"
Ещё как поможет. Разбирал я её, там строка с сервера сравнивается со строкой "ok". Если убедить программу, что строки равны при любых раскладах, она активируется и можно будет даже обновлять.
Есть бесплатный youtube-dl gui, кстати (что статья не о том - знаю).
Ещё как поможет. Разбирал я её, там строка с сервера сравнивается со строкой "ok". Если убедить программу, что строки равны при любых раскладах, она активируется и можно будет даже обновлять.
Есть бесплатный youtube-dl gui, кстати (что статья не о том - знаю).

wet
(06.09.2018 в 20:19):
Оригинальное решение. Ведь кто-то же заморочился с проверкой на сервере, придумал, как им казалось, крутую защиту :)
А тут 1 байт бабах... Спасибо
А тут 1 байт бабах... Спасибо

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