Blog. Just Blog

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

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

Donemax Data Recovery - программа для восстановления удаленных и поврежденных данных с жестких дисков. Как метко подметили в комментариях к разбору аналогичного поделия: "Такое ощущение, что все начинающие погромисты учатся по одному учебнику, в котором одно из заданий - написать свою дата рекавери прогу". Но зато платная, все как полагается.

Забираем с офсайта дистрибутив, устанавливаем, смотрим что и как. Главный исполняемый файл ничем не накрыт, отправляем его в дизассемблер. Когда тот закончит свою работу, проверим, как функционирует программа без регистрации.

Первое, что бросается в глаза, это надписи "Trial". Но главное ограничение проявляется при попытке восстановить большой объем информации. Вылезает вот такое окно с требованием зарегистрироваться.

Сообщение незарегистрированной версии
Сообщение незарегистрированной версии

Хех, и тут лимит в 200 мегов, может быть шутка про книжку не такая уж и шутка? Покупку оставим до лучших времен, начнем поиск по слову "Trial". В файле сразу обнаружатся строки с двумя вариантами названия программы, а в листинге им соответствует вот такой характерный код:
  1. .text:0056DAC4                 call    sub_403080
  2. .text:0056DAC9                 mov     ecx, eax
  3. ; Вызвать функцию проверки
  4. .text:0056DACB                 call    sub_407110
  5. .text:0056DAD0                 test    al, al
  6. ; Если AL=0, то программа работает в триальном режиме
  7. .text:0056DAD2                 jnz     short loc_56DB13
  8. .text:0056DAD4                 push    1Fh
  9. .text:0056DAD6                 push    offset aDonemaxDataR_1
  10. ; "Donemax Data Recovery Trial 1.1"
  11. .text:0056DADB                 call    esi
  12. .text:0056DADD                 add     esp, 8
  13. .text:0056DAE0                 mov     [esp+74h+var_4C], eax
  14. .text:0056DAE4                 lea     eax, [esp+74h+var_4C]
  15. .text:0056DAE8                 mov     bl, 9
  16. .text:0056DAEA                 push    eax
  17. .text:0056DAEB                 mov     ecx, edi
  18. .text:0056DAED                 mov     byte ptr [esp+78h+var_4], bl
  19. .text:0056DAF1                 call    ds:?setText@QLabel
  20. .text:0056DAF7                 push    38h
  21. .text:0056DAF9                 push    offset aFontFamilyS_18
  22. ; "font-family: \"Segoe UI\";font-size:30px;"...
  23. .text:0056DAFE                 call    esi
  24. .text:0056DB00                 add     esp, 8
  25. .text:0056DB03                 mov     [esp+70h+var_40], eax
  26. .text:0056DB07                 lea     ecx, [esp+70h+var_40]
  27. .text:0056DB0B                 mov     byte ptr [esp+70h], 0Ah
  28. .text:0056DB10                 push    ecx
  29. .text:0056DB11                 jmp     short loc_56DB50
  30. .text:0056DB13 ; ---------------------------------------
  31. .text:0056DB13 loc_56DB13:
  32. .text:0056DB13                 push    19h
  33. .text:0056DB15                 push    offset aDonemaxDataR_2
  34. ; "Donemax Data Recovery 1.1"
  35. .text:0056DB1A                 call    esi
  36. .text:0056DB1C                 add     esp, 8
  37. .text:0056DB1F                 mov     [esp+74h+var_4C], eax
  38. .text:0056DB23                 lea     edx, [esp+74h+var_4C]
  39. .text:0056DB27                 mov     bl, 0Bh
  40. .text:0056DB29                 push    edx
  41. .text:0056DB2A                 mov     ecx, edi
  42. .text:0056DB2C                 mov     byte ptr [esp+78h+var_4], bl
Если посмотреть функцию, которая вроде как должна отвечать за проверку, то никакой проверки там нет:
  1. .text:00407110 sub_407110      proc near
  2. .text:00407110                 mov     al, [ecx+78h]
  3. .text:00407113                 retn
  4. .text:00407113 sub_407110      endp
Байт результата инициализируется значением из параметров. Причем используется регистр ECX и определенное фиксированное смещение. Если посмотреть откуда этот регистр берется, то сперва вызывается некая функция, ее результат записывается в ECX и потом передается по назначению. Очень похоже, что первая функция возвращает адрес блока памяти с настройками программы, где по смещению 78h находится байт признака зарегистрированности. Надо найти место, где этот байт инициализируется. Для этого по строке "+78h]" в листинге дизассемблера находим все места, где туда заносится какое-то значение. И главное, что рядом обязательно должен быть вызов функции с получением адреса настроек. Обнаружится вот такой код, причем аккурат над предыдущей функцией:
  1. .text:00407100 sub_407100      proc near
  2. .text:00407100                 mov     al, [esp+arg_0]
  3. .text:00407104                 mov     [ecx+78h], al
  4. .text:00407107                 retn    4
  5. .text:00407107 sub_407100      endp
Это единственное место инициализации, в остальных участках кода только проверки. Значит будем патчить тут. Заменяем первую команду на MOV AL,1 и не забываем про два байта остатка от оригинального опкода, их забиваем парой NOP'ов. Сохраняем изменения, проверяем результат.

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

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

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

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

Комментарии

Отзывы посетителей сайта о статье
Жека (13.03.2023 в 01:08):
Здравствуйте, пропатчив вашим методом, безуспешно пытаясь побороть кнопку Активации, сделал свой "кряк". Прога проверяет присутствия, некого файла - Configure.dat с прописанным в нём правильным серийником. Этот файл, естественно, создаётся после правильной активации. Найдя в коде эти проверки, получилось всё по классике, JMP и NOP наше всё! Первый фикс: 005CBE83  7410 <-- EB10, второй фикс: 005CBEC3  751E <-- 9090. Всё, прога активирована и никаких лишних кнопок. Ковыряясь в коде, нашёл для нас с вами послание от разрабов 'We are a small company,it',27h,'s so hard to live.please stop crack,thank you.' Интересно, это как надо её крякнуть, чтоб высветилась эта надпись:)

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

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

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