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

Скриншот программы VCap Downloader
Программа VCap Downloader позволяет сохранять видео и аудио с различных хостингов. Работает на движке браузера Chrome, по интерфейсу очень сильно этот браузер напоминает. Вы просто переходите по ссылкам в основном окне, а справа появляются предложения на загрузку. В незарегистрированном варианте часть функций закрыты, в том числе и сохранение видео в хорошем качестве. Но раз уж мы собрались тырить видосики, то попутно притырим и инструмент для их скачивания.
Забираем с сайта дистрибутив последней версии, устанавливаем. В процессе установки загружаются дополнительные компоненты, без них ничего работать не будет. После установки смотрим, что и как. Сразу бросается в глаза надпись "Незарегистрировано" в заголовке главного окна. С этого и начнем. Хотя начать надо, конечно, с дизассемблера, но вы это и так хорошо знаете.

Строка в языковом файле
Программа мультиязычная, соответствующий языковой файл находится в папке Languages. Код строки 10776 или 2A18h, если смотреть в шестнадцатеричной системе счисления. Код, в котором используется это значение, выглядит следующим образом:
Code (Assembler) : Убрать нумерацию
- ; Загрузить в AL флаг регистрации
- .text:004E6444 mov al, byte_6BEEEC
- .text:004E6449 loc_4E6449:
- .text:004E6449 test al, al
- ; Если он не нулевой, то перепрыгнуть загрузку строки
- .text:004E644B jnz loc_4E657E
- ; Загрузить строку "Незарегистрированная"
- .text:004E6451 mov ecx, 2A18h
- .text:004E6456 call sub_581980
- .text:004E645B mov edx, eax

Перекрестные ссылки на флаг
Фигвам. Только проверки или же загрузка значения флага. Никаких прямых инициализиаций. Ничего страшного, там, где не помогает дизассемблер, поможет отладчик. Загружаем программу в отладчик и ставим хардварную точку останова на запись в байт памяти по адресу 006BEEEC.

Ставим точку останова
Запускаем программу на выполнение. Запись в память сработает только в двух местах.
Code (Assembler) : Убрать нумерацию
- ; Первая инициализация флага регистрации
- .text:0058E9D9 mov byte ptr [ecx+4], 0
- .text:0058E9DD mov dword ptr [ecx+8], 0
- .text:0058E9E4 mov dword ptr