Исследование защиты программы AceMovi Video Editor
Скриншот программы AceMovi Video Editor
AceMovi Video Editor - полупрофессиональное решение для домашнего видеомонтажа. По функционалу более простой, чем признанные видеоредакторы, но при этом инструментов в нем вполне достаточно, чтобы без особых сложностей превратить ваши видеоролики в настоящие шедевры. В незарегистрированном виде редактор накладывает на сохраняемые файлы водяной знак. Цена кусается. Для 60 баксов я бы точно нашел более подходящее применение.
Забираем с офсайта дистрибутив, устанавливаем, смотрим. Программа написана на Qt, о чем свидетельствует огромная пачка библиотек с характерными названиями. Главный исполняемый файл ничем не упакован, отправляем его на разбор в дизассемблер.
Триальное окно
При попытке сохранить видео появляется окно с предупреждением, что программа не зарегистрирована и готовый ролик будет испорчен. Отлично, исходная строка для работы у нас есть.
Строка в файле
Строка легко обнаруживается в исполняемом файле. Дизассемблер уже закончил работу, поищем код, где эта строка используется.
Code (Assembler) : Убрать нумерацию
- .text:0056D2E0 sub_56D2E0 proc near
- .text:0056D2E0 push 0FFFFFFFFh
- .text:0056D2E2 push offset loc_73A223
- .text:0056D2E7 mov eax, large fs:0
- .text:0056D2ED push eax
- .text:0056D2EE sub esp, 14h
- .text:0056D2F1 push ebx
- .text:0056D2F2 push ebp
- .text:0056D2F3 push esi
- .text:0056D2F4 push edi
- .text:0056D2F5 mov eax, dword_878750
- .text:0056D2FA xor eax, esp
- .text:0056D2FC push eax
- .text:0056D2FD lea eax, [esp+34h+var_C]
- .text:0056D301 mov large fs:0, eax
- .text:0056D307 mov esi, ecx
- .text:0056D309 lea eax, [esp+34h+var_20]
- .text:0056D30D push 1
- .text:0056D30F push eax
- .text:0056D310 call sub_5C5710
- .text:0056D315 add esp, 4
- .text:0056D318 push offset aImageBtn_close
- ; "/image/btn_close.png"
- .text:0056D31D mov ecx, eax
- .text:0056D31F mov [esp+3Ch+var_4], 0
- .text:0056D327 call ds:?append@QString@@QAEAAV1@PBD@Z
- ; QString::append(char const *)
- .text:0056D32D push ecx
- .text:0056D32E mov ecx, esp
- .text:0056D330 mov [esp+40h+var_20], esp
- .text:0056D334 push eax
- .text:0056D335 call ds:??0QString@@QAE@ABV0@@Z
- ; QString::QString(QString const &)
- .text:0056D33B mov ecx, esi
- .text:0056D33D call sub_56BCB0
- .text:0056D342 or ebp, 0FFFFFFFFh
- .text:0056D345 lea ecx, [esp+3Ch+var_28]
- .text:0056D349 mov [esp+3Ch+var_C], ebp
- .text:0056D34D call ds:??1QString@@QAE@XZ
- ; QString::~QString(void)
- .text:0056D353 mov ecx, [esi+20h]
- .text:0056D356 push 8
- .text:0056D358 push 1C7h
- .text:0056D35D call ds:?move@QWidget@@QAEXHH@Z
- ; QWidget::move(int,int)
- .text:0056D363 mov ecx, [esi+20h]
- .text:0056D366 mov ebx, ds:?connect
- .text:0056D36C push 0
- .text:0056D36E push offset a1close ; "1close()"
- .text:0056D373 push esi
- .text:0056D374 push offset a2clicked ; "2clicked()"
- .text:0056D379 push ecx
- .text:0056D37A lea edx, [esp+58h+var_30]
- .text:0056D37E push edx
- .text:0056D37F call ebx
- .text:0056D381 add esp, 18h
- .text:0056D384 lea ecx, [esp+44h+var_30]
- .text:0056D388 call ds:??1Connection@QMetaObject@@QAE@XZ
- ; QMetaObject::Connection::~Connection(void)
- .text:0056D38E mov ecx, [esi+3Ch]
- .text:0056D391 push 29h
- .text:0056D393 push 14h
- .text:0056D395 call ds:?move@QWidget@@QAEXHH@Z
- ; QWidget::move(int,int)
- .text:0056D39B push ebp
- .text:0056D39C push 0
- .text:0056D39E lea eax, [esp+4Ch+var_30]
- .text:0056D3A2 push offset aTheTrialVersio
- ; "The trial version exports video with a "...
- .text:0056D3A7 push eax
- .text:0056D3A8 call ds:?tr@QObject@@SA?AVQString@@PBD0H@Z
- ; QObject::tr(char const *,char const *,int)
- .text:0056D3AE add esp, 10h
Code (Assembler) : Убрать нумерацию
- .text:0057CB9E lea eax, [esp+1A4h+var_C]
- .text:0057CBA5 mov large fs:0, eax
- .text:0057CBAB mov esi, ecx
- ; Вызвать функцию проверки
- .text:0057CBAD call sub_40A440
- .text:0057CBB2 test al, al
- ; Если AL не равно 0, то окно с предупреждением не показывать
- .text:0057CBB4 jnz short loc_57CC04
- .text:0057CBB6 push esi
- .text:0057CBB7 lea ecx, [esp+1A8h+var_148]
- ; Открыть окно с предупреждением
- .text:0057CBBB call sub_56D6E0
- .text:0057CBC0 lea ecx, [esp+1A4h+var_148]
- .text:0057CBC4 mov [esp+1A4h+var_4], 0
- .text:0057CBCF call ds:__imp_?exec@QDialog@@UAEHXZ
- .text:0057CBD5 lea ecx, [esp+1A4h+var_148]
- .text:0057CBD9 cmp eax, 1
- .text:0057CBDC jz short loc_57CBF3
- .text:0057CBDE mov [esp+1A4h+var_4], 0FFFFFFFFh
- .text:0057CBE9 call sub_56CBB0
- .text:0057CBEE jmp loc_57D33C
- .text:0057CBF3 ; ---------------------------------------------------------
- .text:0057CBF3 loc_57CBF3:
- .text:0057CBF3 or ebp, 0FFFFFFFFh
Code (Assembler) : Убрать нумерацию
- .text:0040A440 sub_40A440 proc near
- .text:0040A440 jmp sub_4031C0
- .text:0040A440 sub_40A440 endp
Программа успешно "зарегистрирована"
Окно регистрации поменяло свой вид, теперь там типа показывается регистрационный email и серийник, а всяких ссылок на покупку больше нет. При попытке сохранить обработанное видео никаких предупреждений не появляется и никаких водяных знаков не накладывается. Цель достигнута.
Просмотров: 1168 | Комментариев: 4
Метки: исследование защиты, мультимедиа
Внимание! Статья опубликована больше года назад, информация могла устареть!
Добавить комментарий
Заполните форму для добавления комментария
Правда в скачанной сегодня версии AceMovi Video Editor 4.9.20 адреса не совпадают со статьёй, но принцип остаётся тем же.