Blog. Just Blog

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

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

Программа Magoshare Data Recovery, как можно понять из названия, - очередная утилита для восстановления удаленных данных с различных носителей. В пробном режиме позволяет обработать только 200 мегов, после регистрации все ограничения, естественно, снимаются. Насыпать почти сотню зелени за лицензию, на мой взгляд, слишком кучеряво, поэтому попробуем обойтись народными средствами.

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

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

Это оставим для контроля успешности решения задачи. А в заголовке окна бросается в глаза надпись "Trial", вот с нее и начнем исследование. В файле обнаружится несколько вхождений, но ссылка есть только на одно из них.

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

Если посмотреть внимательно, то рядышком находятся строки "Free", "Technician" и "AdvancedPE". Очень похоже, что это типы лицензий. Теперь давайте посмотрим на код, где это все используется.
  1. .text:0046DE8B                 mov     ecx, eax
  2. ; Вызвать функцию проверки
  3. .text:0046DE8D                 call    sub_458A20
  4. ; Сохранить результат в переменную
  5. .text:0046DE92                 mov     [ebp+var_14], eax
  6. .text:0046DE95                 cmp     [ebp+var_14], 2
  7. .text:0046DE99                 jl      short loc_46DEBD
  8. .text:0046DE9B                 lea     ecx, [ebp+var_18]
  9. .text:0046DE9E                 call    sub_494EF0
  10. .text:0046DEA3                 mov     byte ptr [ebp+var_4], 1
  11. .text:0046DEA7                 push    1
  12. .text:0046DEA9                 lea     ecx, [ebp+var_18]
  13. .text:0046DEAC                 call    sub_495150
  14. .text:0046DEB1                 mov     byte ptr [ebp+var_4], 0
  15. .text:0046DEB5                 lea     ecx, [ebp+var_18]
  16. .text:0046DEB8                 call    sub_494F10
  17. .text:0046DEBD loc_46DEBD:
  18. ; Загрузить результат из переменной
  19. .text:0046DEBD                 mov     ecx, [ebp+var_14]
  20. .text:0046DEC0                 mov     [ebp+var_134], ecx
  21. .text:0046DEC6                 cmp     [ebp+var_134], 5 ; switch 6 cases
  22. .text:0046DECD                 ja      short loc_46DF3A
  23. .text:0046DECF                 mov     edx, [ebp+var_134]
  24. ; На основании результата выполнить переход
  25. .text:0046DED5                 jmp     ds:off_46E4D4[edx*4] ; switch jump
  26. .text:0046DEDC ; ---------------------------------------
  27. .text:0046DEDC loc_46DEDC:
  28. .text:0046DEDC                 push    offset aFree    ; case 0
  29. .text:0046DEE1                 lea     ecx, [ebp+var_10]
  30. .text:0046DEE4                 call    ds:??Y?$CStringT
  31. .text:0046DEEA                 jmp     short loc_46DF3A
  32. .text:0046DEEC ; ---------------------------------------
  33. .text:0046DEEC loc_46DEEC:
  34. .text:0046DEEC                 push    offset aTrial   ; case 1
  35. .text:0046DEF1                 lea     ecx, [ebp+var_10]
  36. .text:0046DEF4                 call    ds:??Y?$CStringT
  37. .text:0046DEFA                 jmp     short loc_46DF3A
  38. .text:0046DEFC ; ---------------------------------------
  39. .text:0046DEFC loc_46DEFC:
  40. .text:0046DEFC                 push    offset unk_76C4E3 ; case 2
  41. .text:0046DF01                 lea     ecx, [ebp+var_10]
  42. .text:0046DF04                 call    ds:??Y?$CStringT
  43. .text:0046DF0A                 jmp     short loc_46DF3A
  44. .text:0046DF0C ; ---------------------------------------
  45. .text:0046DF0C loc_46DF0C:
  46. .text:0046DF0C                 push    offset aTechnician ; case 3
  47. .text:0046DF11                 lea     ecx, [ebp+var_10]
  48. .text:0046DF14                 call    ds:??Y?$CStringT
  49. .text:0046DF1A                 jmp     short loc_46DF3A
  50. ...
Вызывается функция проверки, по ее результату отрабатывает стандартная конструкция SWITCH-CASE и устанавливается соответствующий заголовок в главное окно. Лицензии типа "Technician" соответствует выбор 3, значит именно это значение и должна возвращать функция проверки. Она совсем маленькая, но вызывается из кучи мест.
  1. .text:00458A20 sub_458A20      proc near
  2. .text:00458A20 var_4           = dword ptr -4
  3. .text:00458A20                 push    ebp
  4. .text:00458A21                 mov     ebp, esp
  5. .text:00458A23                 push    ecx
  6. .text:00458A24                 mov     [ebp+var_4], ecx
  7. .text:00458A27                 call    ?make@DNameStatusNode
  8. .text:00458A2C                 mov     ecx, eax
  9. .text:00458A2E                 call    sub_493070
  10. .text:00458A33                 mov     esp, ebp
  11. .text:00458A35                 pop     ebp
  12. .text:00458A36                 retn
  13. .text:00458A36 sub_458A20      endp
Патчим начало функции по адресу 00458A20 парой команд MOV EAX,3 и RET. Теперь она всегда будет возвращать нужный нам тип лицензии. Сохраняем изменения, запускаем.

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

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

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

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

Комментарии

Отзывы посетителей сайта о статье
Федор (12.11.2021 в 18:07):
64 бита оля отдыхает поэтому пролитаем дальше

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

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

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