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

Назначение программы Video Rotator, как несложно догадаться по названию , поворот видео и зеркальное отражение по вертикали и горизонтали. В век мобильных устройств и вертикального видео очень актуально. Не обошла аффтаров и типичная болезнь современных программ – шароварность. Что ж, мы не гордые, подлечим.

Начинаем с дистрибутива. Скачиваем, устанавливаем, все как обычно. Размер инсталлятора великоват, потом посмотрим, с чем это связано. А пока запустим программу и выясним, как она будет реагировать на неправильную регистрацию.

http://s019.radikal.ru/i626/1709/92/1d8138ed4765.png

Посмотрим на исполняемый файл. Он написан на визуальном басице (Visual Basic, кто не понял) и ничем не упакован. В свое время я считал визуальный басиц абсолютным злом для ковыряния, но это ровно до появления дотнета 🙂 Но сейчас речь не об этом. Загоняем файл в дизассемблер и смотрим, где появляется строка сообщения о неправильной регистрации:

Цитата:

.text:004926A4 test eax, eax
.text:004926A6 jz loc_492759
.text:004926AC mov [ebp+var_4], 0Bh
.text:004926B3 mov [ebp+var_80], 80020004h
.text:004926BA mov [ebp+var_88], 0Ah
.text:004926C4 mov [ebp+var_70], 80020004h
.text:004926CB mov [ebp+var_78], 0Ah
.text:004926D2 mov [ebp+var_D0], offset aInvaild
; "Invaild"
.text:004926DC mov [ebp+var_D8], 8
.text:004926E6 lea edx, [ebp+var_D8]
.text:004926EC lea ecx, [ebp+var_68]
.text:004926EF call __vbaVarDup
.text:004926F4 mov [ebp+var_C0], offset aInvalidCode_
; "Invalid Code."
.text:004926FE mov [ebp+var_C8], 8
.text:00492708 lea edx, [ebp+var_C8]
.text:0049270E lea ecx, [ebp+var_58]
.text:00492711 call __vbaVarDup

Чуть выше два похожих участка кода, в которых выполняются операции сравнения с очень интересными строками:

Цитата:

.text:00492549 lea eax, [ebp+var_58]
.text:0049254C push eax
.text:0049254D lea eax, [ebp+var_68]
.text:00492550 push eax
.text:00492551 call rtcTrimVar
.text:00492556 mov [ebp+var_C0], offset aVr8374d12cb
; Сравнение со строкой "VR8374D12CB"
.text:00492560 mov [ebp+var_C8], 8008h
.text:0049256A mov eax, [ebp+arg_0]
.text:0049256D mov eax, [eax]
.text:0049256F push [ebp+arg_0]
.text:00492572 call dword ptr [eax+308h]
.text:00492578 push eax

Цитата:

.text:004925F1 mov [ebp+var_88], 8
.text:004925FB lea eax, [ebp+var_88]
.text:00492601 push eax
.text:00492602 lea eax, [ebp+var_98]
.text:00492608 push eax
.text:00492609 call rtcTrimVar
.text:0049260E mov [ebp+var_D0], offset aVrsa277c5wd
; Сравнение со строкой "VRSA277C5WD"
.text:00492618 mov [ebp+var_D8], 8008h
.text:00492622 lea eax, [ebp+var_68]
.text:00492625 push eax
.text:00492626 lea eax, [ebp+var_C8]
.text:0049262C push eax
.text:0049262D lea eax, [ebp+var_78]
.text:00492630 push eax
.text:00492631 call __vbaVarCmpEq
.text:00492636 push eax

Если хоть одно совпадение найдено, то введенный серийник признается неправильным. Как несложно догадаться, это проверка на "черный список" скомпрометированных серийных номеров. Немного ниже еще одна интересная проверка:

Цитата:

.text:004927EE lea eax, [ebp+var_58]
.text:004927F1 push eax
.text:004927F2 lea eax, [ebp+var_68]
.text:004927F5 push eax
.text:004927F6 call rtcTrimVar
.text:004927FB mov [ebp+var_C0], offset aVr1i3d4chip
; Сравнение со строкой "VR1I3D4CHIP"
.text:00492805 mov [ebp+var_C8], 8008h
.text:0049280F lea eax, [ebp+var_68]
.text:00492812 push eax
.text:00492813 lea eax, [ebp+var_C8]
.text:00492819 push eax
.text:0049281A call __vbaVarTstEq



.text:0049286E mov [ebp+var_78], 0Ah
.text:00492875 mov [ebp+var_D0], offset aExpired
; "Expired"
.text:0049287F mov [ebp+var_D8], 8
.text:00492889 lea edx, [ebp+var_D8]
.text:0049288F lea ecx, [ebp+var_68]
.text:00492892 call __vbaVarDup
.text:00492897 mov [ebp+var_C0], offset aTheSpecialVers
; "The Special Version Expired. Please buy"…
.text:004928A1 mov [ebp+var_C8], 8

Тут тоже не надо быть семи пядей во лбу, чтобы догадаться, что когда-то была выпущена специальная версия программы для читателей журнала "CHIP", после чего акционный серийный номер был также заблокирован. Итого у нас на руках имеется три валидных серийника, которые занесены в "черный список". В таких случаях достаточно вычистить из программы упоминания о них, заменив на какой-нибудь заведомо левый мусор, а сами серийники можно будет использовать для регистрации. Такие фокусы мы уже проделывали раньше. Поищем в файле строчки с любым из трех серийных номеров.

http://s015.radikal.ru/i333/1709/57/447f66906401.png

Но что это? В "черном списке" три серийника, а тут их явно больше. Не участвуют в проверках на наличие в "черном списке" следующие серийники: "VR7341658WD", "VRSAGK852WD", "VRSAP0461WD", "VRSA99F20WD" и "VRSA099T3WD". Попробуем воспользоваться одним из них, чтобы посмотреть на реакцию программы.

http://s012.radikal.ru/i320/1709/ea/b6c92e25e82e.png

Вот такие пироги с котятами. Небольшой список правильных серийных номеров хранится в открытом виде в самой программе. Да, такое тоже до сих пор встречается. Регистрация хранится в файле %APPDATA%vsound.dll.

Возвращаясь к вопросу, почему инсталлятор имеет такой размер. Если заглянуть в папку data, то там обнаружится файл "conv.exe", который, в свою очередь, является ни чем иным, как бесплатным медиаконвертером FFmpeg. То есть программа Video Rotator является платной оболочкой для запуска бесплатной программы, которая и делает всю основную работу. Естественно, никаких упоминаний о FFmpeg ни на сайте, ни в программе нет.

• Author: ManHunter

Оставьте комментарий