Blog. Just Blog

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

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

Donemax Disk Clone Enterprise - безопасное решение для клонирования дисков в корпоративной среде. Программа предлагает два режима клонирования: полный диск или отдельный раздел. Инструмент обеспечивает 100% безопасность данных, совместим с Windows, в том числе серверными редакциями, позволяет создавать загрузочные копии и легко мигрировать с HDD на SSD. Лицензия Enterprise делает его экономически выгодным выбором для бизнеса, образовательных учреждений и организаций, особенно если сделать его бесплатным.

Забираем с офсайта дистрибутив, устанавливаем, смотрим. В папке с программой несколько исполняемых файлов, нас интересует только DMclone.exe в папке \bin. Он ничем не упакован, отправляем его на дизассемблирование. Но сперва протестируем программу в работе: проверяем триальный режим, ограничения, поведение при запуске.

Триальное окно
Триальное окно

В главном окне сразу бросается в глаза большая кнопка "Active" и маленькая - для перехода на сайт покупки. Кнопка активации с неправильными данными не работает, а для понимания, что это ошибка, выводится красная строка "License code is invalid."

Окно "О программе"
Окно "О программе"

А вот окно "О программе" с надписью "Trial" - сразу понятно, за что именно браться. Такая явная метка сильно упрощает поиск в дизассемблере, не нужно перебирать функции наугад. Достаточно найти строку в листинге и посмотреть, кто ее вызывает.
  1. .text:004963D6                 call    sub_48DA90
  2. .text:004963DB                 mov     ecx, eax
  3. ; Проверка функции
  4. .text:004963DD                 call    sub_48E1D0
  5. ; EAX = 0 если ошибка, иначе все хорошо
  6. .text:004963E2                 test    eax, eax
  7. ; Переход на тральную ветку
  8. .text:004963E4                 jz      short loc_496435
  9. .text:004963E6                 call    sub_48DA90
  10. .text:004963EB                 mov     ecx, eax
  11. ; Проверка функции
  12. .text:004963ED                 call    sub_48E210
  13. ; EAX = 0 если это не Enterprise, иначе все хорошо
  14. .text:004963F2                 test    eax, eax
  15. ; Переход на обычную версию
  16. .text:004963F4                 jz      short loc_496433
  17. .text:004963F6                 push    0FFFFFFFFh
  18. .text:004963F8                 push    0
  19. ; Строка "Enterprise"
  20. .text:004963FA                 push    offset aEnterprise ; "Enterprise"
  21. .text:004963FF                 lea     edx, [ebp+var_34]
  22. .text:00496402                 push    edx
  23. .text:00496403                 call    ds:?tr@QObject@@SA?AVQString@@PBD0H@Z
  24. .text:00496409                 add     esp, 10h
  25. .text:0049640C                 mov     [ebp+var_4C], eax
  26. .text:0049640F                 mov     eax, [ebp+var_4C]
  27. .text:00496412                 mov     [ebp+var_50], eax
  28. .text:00496415                 mov     byte ptr [ebp+var_4], 4
  29. .text:00496419                 mov     ecx, [ebp+var_50]
  30. .text:0049641C                 push    ecx
  31. .text:0049641D                 lea     ecx, [ebp+var_14]
  32. .text:00496420                 call    ds:??YQString@@QAEAAV0@ABV0@@Z
  33. .text:00496426                 mov     byte ptr [ebp+var_4], 3
  34. .text:0049642A                 lea     ecx, [ebp+var_34]
  35. .text:0049642D                 call    ds:??1QString@@QAE@XZ
  36. .text:00496433 loc_496433:
  37. .text:00496433                 jmp     short loc_496472
  38. .text:00496435 ; -----------------------------------------------
  39. .text:00496435 loc_496435:
  40. .text:00496435                 push    0FFFFFFFFh
  41. .text:00496437                 push    0
  42. ; Строка "Trial"
  43. .text:00496439                 push    offset aTrial_0 ; "Trial"
  44. .text:0049643E                 lea     edx, [ebp+var_38]
  45. .text:00496441                 push    edx
  46. .text:00496442                 call    ds:?tr@QObject@@SA?AVQString@@PBD0H@Z
  47. .text:00496448                 add     esp, 10h
  48. .text:0049644B                 mov     [ebp+var_54], eax
  49. .text:0049644E                 mov     eax, [ebp+var_54]
  50. .text:00496451                 mov     [ebp+var_58], eax
  51. .text:00496454                 mov     byte ptr [ebp+var_4], 5
В самом начале проверяются две функции. Первая переходит на ветку со строкой "Trial", а вторая, как я понимаю, позволяет работать с обычными лицензиями или с "Enterprise". Если не первый раз читаете мой блог, то знаете, как мы поступаем с королевами, алкоголем и с лицензиями "Enterprise". Но сперва разберемся с триалом. Ищем адрес 004963DD и переходим на функцию sub_48E1D0. В ней обнаруживается коротенькая функция, отвечающая за проверку.
  1. .text:0048E1D0 sub_48E1D0      proc near
  2. .text:0048E1D0                 push    ebp
  3. .text:0048E1D1                 mov     ebp, esp
  4. .text:0048E1D3                 push    ecx
  5. .text:0048E1D4                 mov     [ebp+var_4], ecx
  6. .text:0048E1D7                 mov     eax, [ebp+var_4]
  7. .text:0048E1DA                 mov     eax, [eax+0D0h]
  8. .text:0048E1E0                 mov     esp, ebp
  9. .text:0048E1E2                 pop     ebp
  10. .text:0048E1E3                 retn
  11. .text:0048E1E3 sub_48E1D0      endp
Впечатываем код MOV EAX,1 и RET в начало функции, сохраняем изменения и проверяем. Все триальные сообщения исчезли, программа работает штатно.

Теперь надо заменить обычную лицензию на Enterprise. Формально лицензии различаются только количеством компьютеров, которые можно использовать с Donemax Disk Clone. Короче - ничем не отличаются, только строкой в окне "О программе". Переходим к адресу 004963ED и открываем функцию sub_48E210. Это тоже малюсенькая функция.
  1. .text:0048E210 sub_48E210      proc near
  2. .text:0048E210                 push    ebp
  3. .text:0048E211                 mov     ebp, esp
  4. .text:0048E213                 push    ecx
  5. .text:0048E214                 mov     [ebp+var_4], ecx
  6. .text:0048E217                 mov     eax, [ebp+var_4]
  7. .text:0048E21A                 mov     eax, [eax+0D4h]
  8. .text:0048E220                 mov     esp, ebp
  9. .text:0048E222                 pop     ebp
  10. .text:0048E223                 retn
  11. .text:0048E223 sub_48E210      endp
Точно так же впечатываем код MOV EAX,1 и RET в начало функции, сохраняем изменения. Проверяем, что изменилось в "О программе". Теперь она становится Enterprise.

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

В интерфейсе теперь чисто - никаких триальных надписей нет. Весь заявленный функционал доступен полностью, никаких ограничений нет. Цель достигнута.

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

Комментарии

Отзывы посетителей сайта о статье
Лестер Глючный (05.05.2026 в 11:45):
мм… в папке BUILDPE есть ещё и 64-разрядная версия, и там ещё продублирована точно такая же 32-разрядная, как и в корневой \bin — у обоих уже присутствует файлик SN.dat :)

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

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

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