Blog. Just Blog

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

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы DBF Viewer 2000
Скриншот программы DBF Viewer 2000

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

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

Ограничение незарегистрированной версии
Ограничение незарегистрированной версии

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

Строки в файле
Строки в файле

Посмотрим на этот текст и поищем его в листинге дизассемблера.
  1. CODE:004265E4                 mov     ecx, [ebp+var_1C4]
  2. CODE:004265EA                 mov     eax, ds:dword_461284[ecx*8]
  3. CODE:004265F1                 cmp     eax, [ebp+var_1BC]
  4. CODE:004265F7                 jnz     short loc_42661C
  5. ; Проверка в настройках
  6. CODE:004265F9                 mov     edx, [ebp+var_1C0]
  7. CODE:004265FF                 mov     ecx, [edx]
  8. CODE:00426601                 mov     eax, [ebp+var_1C4]
  9. CODE:00426607                 cmp     ecx, ds:dword_461288[eax*8]
  10. ; Проверка в настройках
  11. CODE:0042660E                 jnz     short loc_42661C
  12. ; Установка флага о удачной проверке
  13. CODE:00426610                 mov     [ebp+var_1B8], 1
  14. CODE:0042661A                 jmp     short loc_42662E
  15. CODE:0042661C ; --------------------------------------
  16. CODE:0042661C loc_42661C:
  17. CODE:0042661C                 inc     [ebp+var_1C4]
  18. CODE:00426622                 cmp     [ebp+var_1C4], 12Bh
  19. CODE:0042662C                 jl      short loc_4265E4
  20. CODE:0042662E loc_42662E:
  21. CODE:0042662E                                         ; sub_423831+2DE9 j
  22. CODE:0042662E                 cmp     [ebp+var_1B8], 0
  23. ; Проверка флага
  24. CODE:00426635                 jnz     short loc_4266B2
  25. CODE:00426637                 cmp     ds:dword_461274, 1
  26. CODE:0042663E                 jle     short loc_4266B2
  27. CODE:00426640                 mov     [ebp+var_1AC], 32h
  28. CODE:0042664A                 mov     [ebp+lpText], offset aWouldYouLikeTo
  29. ; "Would you like to get your registration"...
  30. CODE:00426654                 push    0FFh            ; nBufferMax
  31. CODE:00426659                 push    ds:lpBuffer     ; lpBuffer
  32. CODE:0042665F                 push    0CAh            ; uID
Тут видны проверки и переходы, к ним вернемся чуть-чуть позже. Мы помним, что главный файл не накрыт никаким упаковщиком. Но вот в листинге есть какие интересные строчки. Они встречаются до и после кода, связанного с проверкой.
  1. CODE:004263EF                 xor     edx, edx
  2. CODE:004263F1                 mov     [ebp+var_1B0], edx
  3. CODE:004263F7                 jmp     short loc_426409
  4. CODE:004263F7 ; --------------------------------------------------
  5. CODE:004263F9 aVmprotectBeg_2 db 'VMProtect begin',0
  6. CODE:00426409 ; --------------------------------------------------
  7. CODE:00426409 loc_426409:
  8. CODE:00426409                 cmp     [ebp+var_190], 0
  9. CODE:00426410                 jz      loc_4264B5
  10. CODE:00426416                 push    offset aWindows25282_2
  11. ; "windows-25282f0406cbe7006fbf6a6da2o9m3k"...
  12. CODE:0042641B                 push    offset aSergeiOvsann_2
  13. ; "Sergei Ovsannikov"
  14. CODE:00426420                 mov     ecx, [ebp+var_190]
  15. CODE:00426426                 push    dword ptr [ecx+0Ch]
  16. CODE:00426429                 call    xlBookSetKeyA
  1. CODE:004266AA                 push    [ebp+hWndParent] ; hwnd
  2. CODE:004266AD                 call    ShellExecuteA
  3. CODE:004266B2 loc_4266B2:
  4. CODE:004266B2                 jmp     short loc_4266C2
  5. CODE:004266B2 ; --------------------------------------------------
  6. CODE:004266B4 aVmprotectEnd_0 db 'VMProtect end',0
  7. CODE:004266C2 ; --------------------------------------------------
  8. CODE:004266C2 loc_4266C2:
  9. CODE:004266C2                 xor     ecx, ecx
  10. CODE:004266C4                 mov     [ebp+var_1CC], ecx
  11. CODE:004266CA                 xor     eax, eax
  12. CODE:004266CC                 mov     [ebp+var_1D0], eax
Теперь немного теории. Кто не знает, VMProtect - это коммерческий софт для защиты программ от взлома. Он "виртуализует" части кода, превращая их в байт-код для собственной виртуальной машины, что сильно затрудняет анализ. Есть специальные метки, которые разработчик вручную расставляет в исходном коде. Эти метки не влияют на логику программы, но служат четкими указаниями для VMProtect о том, какие именно участки кода нужно максимально защитить. В исходном коде они обычно выглядят как специальные макросы или функции, которые компилятор игнорирует или превращает в "пустышки", но которые VMProtect распознает при постобработке. Вот это и есть такие маркеры. Почему же нет ничего про саму защиту? Или автор забыл при сборке финальной версии и выставил программу без защиты, или автор решил больше не использовать VMProtect. В любом случае, у нас есть чистый код, в котором все видно. Реверс ошибок не прощает.

Возвращаемся к проверке. Посмотрим, где в листинге 00461288 используется конструкция, которая меняется на условные переходы, это будет dword_461288 dd 65D90077h

Перекрестные ссылки на указатель
Перекрестные ссылки на указатель

Если проверить в листинге похожие конструкции, которые задействуются на переходе, их всего шесть штук. Авторы не стали "заворачивать" в VMProtect всю программу, а защитили лишь несколько самых критичных мест. Патчим шесть конструкций, каждый по два перехода. Например, такой.
  1. CODE:004265F1                 cmp     eax, [ebp+var_1BC]
  2. ; Патч NOP
  3. CODE:004265F7                 jnz     short loc_42661C
  4. CODE:004265F9                 mov     edx, [ebp+var_1C0]
  5. CODE:004265FF                 mov     ecx, [edx]
  6. CODE:00426601                 mov     eax, [ebp+var_1C4]
  7. ; Поиск dword_461288
  8. CODE:00426607                 cmp     ecx, ds:dword_461288[eax*8]
  9. ; Патч NOP
  10. CODE:0042660E                 jnz     short loc_42661C
  11. CODE:00426610                 mov     [ebp+var_1B8], 1
Найти их очень просто, они идут с dword_461288, каждый до перехода и после. Код в переходах меняем на NOP. Сохраняем изменения.

Программа успешно "зарегистрирована"
Программа успешно "зарегистрирована"

Проверяем программу на отсутствие ограничений: функции экспорта и защиты доступны, триальных надписей при просмотре не появляется. Если хотите, можно поменять имя или лицензию. Цель достигнута.

Поделиться ссылкой ВКонтакте
Просмотров: 127 | Комментариев: 2

Комментарии

Отзывы посетителей сайта о статье
ManHunter (04.11.2025 в 19:42):
Так в программе уже есть файл с примером данных. Даже с сотней строк, которые можно протестировать, ничего дополнительно готовить не нужно.
0101 (04.11.2025 в 19:10):
К статье хорошо бы прикрепить пример файла dbf, на котором вываливаливается окно регистрации, чтобы долго в инете не искать. Кстати, dbf открывается excel'ем версий выше 2007.

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2025
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0045 сек.) / Память: 4.5 Mb
Наверх