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

Скриншот программы BeeConverter
BeeConverter - мультимедийный комбайн для конвертации медиафайлов между наиболее популярными форматами. Дополнительно есть функции обрезки видео, сборки видеоролика из фрагментов, конвертирования видео в анимированный GIF. Полезная штука, хотя ничего принципиально нового в программе нет. С другой стороны являет собой кучу новомодных технологий, таких как регистрация по подписке, постоянные онлайновые проверки, слив данных разработчику и всякое такое. Несанкционированная сетевая активность лечится фаерволом, а вот с регистрацией придется помочь.
Забираем дистрибутив, устанавливаем, смотрим что и как. Программа написана на Qt, ничем не упакована. При старте вываливает триальное окно:

Триальное окно
По строчке "Trial" в листинге обнаруживается несколько вхождений, но нас пока интересует только следующий код:
Code (Assembler) : Убрать нумерацию
- ; Проверить значение переменной
- .text:0043FA5E cmp [ebp+var_D], 0
- .text:0043FA62 mov ecx, [ebx+48h]
- .text:0043FA65 mov [ebp+var_4], 0FFFFFFFFh
- .text:0043FA6C mov eax, [ecx]
- ; Если она равна 0, то вывести в заголовок строку "Trial"
- .text:0043FA6E jz short loc_43FAAD
- .text:0043FA70 push 0
- .text:0043FA72 call dword ptr [eax+2Ch]
- .text:0043FA75 mov ecx, [ebx+4Ch]
- .text:0043FA78 push 0
- .text:0043FA7A mov eax, [ecx]
- .text:0043FA7C call dword ptr [eax+2Ch]
- .text:0043FA7F mov ecx, [ebx+50h]
- .text:0043FA82 push 1
- .text:0043FA84 mov eax, [ecx]
- .text:0043FA86 call dword ptr [eax+2Ch]
- .text:0043FA89 push 0FFFFFFFFh
- ; Вывести в заголовок строку "Pro"
- .text:0043FA8B push 0
- .text:0043FA8D push offset aPro_0 ; "Pro"
- .text:0043FA92 lea eax, [ebp+Memory]
- .text:0043FA95 mov ecx, offset off_5C89AC
- .text:0043FA9A push eax
- .text:0043FA9B call ds:?tr@QMetaObject@@QBE?AVQString
- .text:0043FAA1 mov [ebp+var_4], 5
- .text:0043FAA8 jmp loc_43F9F1
- .text:0043FAAD ; --------------------------------------------
- .text:0043FAAD loc_43FAAD:
- .text:0043FAAD push 1
- .text:0043FAAF call dword ptr [eax+2Ch]
- .text:0043FAB2 mov ecx, [ebx+4Ch]
- .text:0043FAB5 push 1
- .text:0043FAB7 mov eax, [ecx]
- .text:0043FAB9 call dword ptr [eax+2Ch]
- .text:0043FABC mov ecx, [ebx+50h]
- .text:0043FABF push 0
- .text:0043FAC1 mov eax, [ecx]
- .text:0043FAC3 call dword ptr [eax+2Ch]
- .text:0043FAC6 push 0FFFFFFFFh
- .text:0043FAC8 push 0
- .text:0043FACA push offset aTrial ; "Trial"
- .text:0043FACF lea eax, [ebp+var_1C]
- .text:0043FAD2 mov ecx, offset off_5C89AC
- .text:0043FAD7 push eax
Code (Assembler) : Убрать нумерацию
- .text:0043FA12 mov ecx, [eax]
- .text:0043FA14 mov [ebp+var_4], 3
- ; Вызвать функцию проверки
- .text:0043FA1B call sub_43B810
- .text:0043FA20 mov esi, [ebp+Memory]
- ; Сохранить ее возвращенное значение в переменную
- .text:0043FA23 mov [ebp+var_D], al
- .text:0043FA26 mov [ebp+var_4], 4
Code (Assembler) : Убрать нумерацию
- .text:0043B810 sub_43B810 proc near
- .text:0043B810 mov al, [ecx+14Bh]
- .text:0043B816 retn
- .text:0043B816 sub_43B810 endp

Программа успешно "зарегистрирована"
Все триальные надписи, а также пункты меню, относящиеся к регистрации, из интерфейса пропали. Триальное окно при старте тоже не появляется. В заголовке окна красуется надпись "Pro". При переводе времени вперед в интерфейсе появляются надписи "Expired". За них отвечает код, расположенный немного выше:
Code (Assembler) : Убрать нумерацию
- .text:0043F958 mov [ebp+var_4], 0
- ; Вызвать функцию проверки
- .text:0043F95F call sub_43B790
- .text:0043F964 mov esi, [ebp+Memory]
- ; Сохранить ее результат в переменной
- .text:0043F967 mov [ebp+var_D], al
- .text:0043F96A or edi, 0FFFFFFFFh
- .text:0043F96D mov [ebp+var_4], 1
- .text:0043F974 test esi, esi
- .text:0043F976 jz short loc_43F9A7
- .text:0043F978 mov ecx, edi
- .text:0043F97A lock xadd [esi+4], ecx
- .text:0043F97F dec ecx
- .text:0043F980 setnz al
- ...
- ...
- ...
- ; Проверить значение переменной
- .text:0043F9A7 cmp [ebp+var_D], 0
- .text:0043F9AB mov [ebp+var_4], 0FFFFFFFFh
- ; Если оно не равно 0, то продолжить дальше
- .text:0043F9B2 jnz short loc_43FA06
- .text:0043F9B4 mov ecx, [ebx+48h]
- .text:0043F9B7 push 1
- .text:0043F9B9 mov eax, [ecx]
- .text:0043F9BB call dword ptr [eax+2Ch]
- .text:0043F9BE mov ecx, [ebx+4Ch]
- .text:0043F9C1 push 1
- .text:0043F9C3 mov eax, [ecx]
- .text:0043F9C5 call dword ptr [eax+2Ch]
- .text:0043F9C8 mov ecx, [ebx+50h]
- .text:0043F9CB push 0
- .text:0043F9CD mov eax, [ecx]
- .text:0043F9CF call dword ptr [eax+2Ch]
- .text:0043F9D2 push 0FFFFFFFFh
- ; Вывести строку "Expired"
- .text:0043F9D4 push 0
- .text:0043F9D6 push offset aExpired_0 ; "Expired"
- .text:0043F9DB lea eax, [ebp+Memory]
- .text:0043F9DE mov ecx, offset off_5C89AC
- .text:0043F9E3 push eax
Но это еще не все, осталась заключительная косметическая правка - окно информации о лицензии.

Окно информации о лицензии
По строке "7-day free trial" обнаруживается следующий код. Часть листинга я пропустил для наглядности.
Code (Assembler) : Убрать нумерацию
- .text:004391E1 add esp, 4
- .text:004391E4 mov byte ptr [ebp+var_4], 0
- ; Проверить регистр ESI
- .text:004391E8 test esi, esi
- ; Если оно равно 0, то вывести строки "7-day free trial"
- .text:004391EA jz loc_43936E
- ; Вывести информацию о владельце лицензии
- .text:004391F0 lea eax, [ebp+var_40]
- .text:004391F3 push eax
- .text:004391F4 call sub_43AD40
- .text:004391F9 mov eax, [eax]
- ...
- ...
- ...
- .text:00439357 dec eax
- .text:00439358 setnz al
- .text:0043935B test al, al
- .text:0043935D jnz short loc_439368
- .text:0043935F push ecx ; Memory
- .text:00439360 call j_free
- .text:00439365 add esp, 4
- .text:00439368 mov byte ptr [ebp+var_4], 0
- .text:0043936C jmp short loc_4393D4
- .text:0043936E ; -----------------------------------------------
- .text:0043936E loc_43936E:
- .text:0043936E push 10h
- .text:00439370 push offset a7DayFreeTria_0
- ; "7-day free trial"
- .text:00439375 call ds:?fromAscii_helper@QString
- .text:0043937B add esp, 8
- .text:0043937E mov [ebp+var_2C], eax
- .text:00439381 mov ecx, [ebx+18h]
- .text:00439384 lea eax, [ebp+var_2C]
- .text:00439387 mov esi, ds:?setText@QLabel
- .text:0043938D push eax
- .text:0043938E mov byte ptr [ebp+var_4], 0Ch
- .text:00439392 mov ecx, [ecx+1Ch]
Просмотров: 1028 | Комментариев: 0
Метки: исследование защиты, мультимедиа

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет

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