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

Скриншот программы DBF Viewer 2000
DBF Viewer 2000 - это приложение для просмотра и редактирования файлов формата DBF, поддерживающее все основные типы: Clipper, dBase, FoxPro, Visual FoxPro и Visual dBase. Программа обеспечивает выполнение широкого спектра операций, включая выполнение запросов, удаление дублирующихся записей и экспорт данных в различные форматы, обеспечивая высокую скорость обработки. Без регистрации функционал программы значительно ограничен, особенно с учетом интереса к адаптивным и модифицируемым инструментам.
Забираем с офсайта дистрибутив, устанавливаем, смотрим. Основной исполняемый файл ничем не упакован, отправляем его на разбор в дизассемблер. Параллельно проверяем триальные ограничения.

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

Строки в файле
Посмотрим на этот текст и поищем его в листинге дизассемблера.
Code (Assembler) : Убрать нумерацию
- CODE:004265E4 mov ecx, [ebp+var_1C4]
- CODE:004265EA mov eax, ds:dword_461284[ecx*8]
- CODE:004265F1 cmp eax, [ebp+var_1BC]
- CODE:004265F7 jnz short loc_42661C
- ; Проверка в настройках
- CODE:004265F9 mov edx, [ebp+var_1C0]
- CODE:004265FF mov ecx, [edx]
- CODE:00426601 mov eax, [ebp+var_1C4]
- CODE:00426607 cmp ecx, ds:dword_461288[eax*8]
- ; Проверка в настройках
- CODE:0042660E jnz short loc_42661C
- ; Установка флага о удачной проверке
- CODE:00426610 mov [ebp+var_1B8], 1
- CODE:0042661A jmp short loc_42662E
- CODE:0042661C ; --------------------------------------
- CODE:0042661C loc_42661C:
- CODE:0042661C inc [ebp+var_1C4]
- CODE:00426622 cmp [ebp+var_1C4], 12Bh
- CODE:0042662C jl short loc_4265E4
- CODE:0042662E loc_42662E:
- CODE:0042662E ; sub_423831+2DE9 j
- CODE:0042662E cmp [ebp+var_1B8], 0
- ; Проверка флага
- CODE:00426635 jnz short loc_4266B2
- CODE:00426637 cmp ds:dword_461274, 1
- CODE:0042663E jle short loc_4266B2
- CODE:00426640 mov [ebp+var_1AC], 32h
- CODE:0042664A mov [ebp+lpText], offset aWouldYouLikeTo
- ; "Would you like to get your registration"...
- CODE:00426654 push 0FFh ; nBufferMax
- CODE:00426659 push ds:lpBuffer ; lpBuffer
- CODE:0042665F push 0CAh ; uID
Code (Assembler) : Убрать нумерацию
- CODE:004263EF xor edx, edx
- CODE:004263F1 mov [ebp+var_1B0], edx
- CODE:004263F7 jmp short loc_426409
- CODE:004263F7 ; --------------------------------------------------
- CODE:004263F9 aVmprotectBeg_2 db 'VMProtect begin',0
- CODE:00426409 ; --------------------------------------------------
- CODE:00426409 loc_426409:
- CODE:00426409 cmp [ebp+var_190], 0
- CODE:00426410 jz loc_4264B5
- CODE:00426416 push offset aWindows25282_2
- ; "windows-25282f0406cbe7006fbf6a6da2o9m3k"...
- CODE:0042641B push offset aSergeiOvsann_2
- ; "Sergei Ovsannikov"
- CODE:00426420 mov ecx, [ebp+var_190]
- CODE:00426426 push dword ptr [ecx+0Ch]
- CODE:00426429 call xlBookSetKeyA
Code (Assembler) : Убрать нумерацию
- CODE:004266AA push [ebp+hWndParent] ; hwnd
- CODE:004266AD call ShellExecuteA
- CODE:004266B2 loc_4266B2:
- CODE:004266B2 jmp short loc_4266C2
- CODE:004266B2 ; --------------------------------------------------
- CODE:004266B4 aVmprotectEnd_0 db 'VMProtect end',0
- CODE:004266C2 ; --------------------------------------------------
- CODE:004266C2 loc_4266C2:
- CODE:004266C2 xor ecx, ecx
- CODE:004266C4 mov [ebp+var_1CC], ecx
- CODE:004266CA xor eax, eax
- CODE:004266CC mov [ebp+var_1D0], eax
Возвращаемся к проверке. Посмотрим, где в листинге 00461288 используется конструкция, которая меняется на условные переходы, это будет dword_461288 dd 65D90077h

Перекрестные ссылки на указатель
Если проверить в листинге похожие конструкции, которые задействуются на переходе, их всего шесть штук. Авторы не стали "заворачивать" в VMProtect всю программу, а защитили лишь несколько самых критичных мест. Патчим шесть конструкций, каждый по два перехода. Например, такой.
Code (Assembler) : Убрать нумерацию
- CODE:004265F1 cmp eax, [ebp+var_1BC]
- ; Патч NOP
- CODE:004265F7 jnz short loc_42661C
- CODE:004265F9 mov edx, [ebp+var_1C0]
- CODE:004265FF mov ecx, [edx]
- CODE:00426601 mov eax, [ebp+var_1C4]
- ; Поиск dword_461288
- CODE:00426607 cmp ecx, ds:dword_461288[eax*8]
- ; Патч NOP
- CODE:0042660E jnz short loc_42661C
- CODE:00426610 mov [ebp+var_1B8], 1

Программа успешно "зарегистрирована"
Проверяем программу на отсутствие ограничений: функции экспорта и защиты доступны, триальных надписей при просмотре не появляется. Если хотите, можно поменять имя или лицензию. Цель достигнута.
Просмотров: 127 | Комментариев: 2
Метки: исследование защиты
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(04.11.2025 в 19:42):
Так в программе уже есть файл с примером данных. Даже с сотней строк, которые можно протестировать, ничего дополнительно готовить не нужно.
0101
(04.11.2025 в 19:10):
К статье хорошо бы прикрепить пример файла dbf, на котором вываливаливается окно регистрации, чтобы долго в инете не искать. Кстати, dbf открывается excel'ем версий выше 2007.
Добавить комментарий
Заполните форму для добавления комментария


