Blog. Just Blog

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

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

Программа Any Photo Recovery предназначена для восстановления удаленных и поврежденных файлов на жестких дисках и их образах, флешках и картах памяти. Работает шустренько, результат восстановления не хуже аналогичных утилит, так что вполне имеет место быть. Хоть разработчик заявляет ее как бесплатную, некоторые критичные ограничения по функционалу все-таки присутствуют. Несложно догадаться, что для снятия этих ограничений придется потратить неплохую сумму денег. Ну или не придется.

Скачиваем с сайта дистрибутив, устанавливаем, смотрим. Главный файл ничем не упакован, отправляем его на разбор в дизассемблер. Теперь можно посмотреть, как ведет себя программа в бесплатном режиме. В главном меню и на панели вкладок присутствуют пункты регистрации. Но основное ограничение по функционалу проявляется, когда мы пытаемся восстановить удаленные данные. Для безлимитного восстановления требуется проапгрейдить.

Триальное ограничение
Триальное ограничение

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

Сообщение о неправильной регистрации
Сообщение о неправильной регистрации

Программа мультиязычная, файлы с текстовыми строчками хранятся в подкаталоге Languages. Это файлы в стандартном формате ini, интересующее нас сообщение соответствует параметру MSG1004:

MSG1004=Your email or key is not correct!
Поиском по строке "MSG1004" в разобранном листинге исполняемого файла обнаруживается единственный фрагмент кода с предельно понятной логикой:
  1. .text:0044EE86                 call    sub_44F020
  2. .text:0044EE8B                 mov     byte ptr [esp+8DCh+var_4], 10h
  3. .text:0044EE93                 mov     edi, [esp+8DCh+var_8C8]
  4. ; Вызвать функцию проверки
  5. .text:0044EE97                 call    sub_430860
  6. ; Если результат EAX нулевой, то вывести сообщение о неправильной регистрации
  7. .text:0044EE9C                 test    eax, eax
  8. .text:0044EE9E                 jz      short loc_44EEB7
  9. .text:0044EEA0                 mov     ecx, esi
  10. .text:0044EEA2                 call    sub_42FC70
  11. .text:0044EEA7                 mov     ecx, [esp+8DCh+var_8C4]
  12. .text:0044EEAB                 push    1               ; wParam
  13. .text:0044EEAD                 call    sub_46EC00
  14. .text:0044EEB2                 jmp     loc_44EF3C
  15. .text:0044EEB7 ; ---------------------------------------
  16. ; Загрузить строку из языковых ресурсов и вывести сообщение
  17. .text:0044EEB7 loc_44EEB7:
  18. .text:0044EEB7                 lea     ecx, [esp+8DCh+var_3C8]
  19. .text:0044EEBE                 push    ecx
  20. .text:0044EEBF                 call    sub_449600
  21. .text:0044EEC4                 mov     eax, offset aMsg1004 ; "MSG1004"
  22. .text:0044EEC9                 lea     ecx, [esp+8DCh+var_8BC]
  23. .text:0044EECD                 mov     byte ptr [esp+8DCh+var_4], 15h
  24. .text:0044EED5                 call    sub_4062F0
  25. .text:0044EEDA                 mov     esi, [esp+8DCh+var_8C4]
  26. .text:0044EEDE                 lea     edx, [esp+8DCh+var_8BC]
Вызывается функция проверки по адресу 00430860, если она вернула ненулевой результат, то сообщение о неправильной регистрации не выводится. Давайте посмотрим функцию проверки, она совсем небольшая:
  1. .text:00430860 sub_430860      proc near
  2. .text:00430860                 xor     eax, eax
  3. .text:00430862                 mov     edx, offset aHancfchv8ynvpq
  4. ; "hanCfcHV8YNvPQnEw4y1GCQ3XhCBkD"
  5. .text:00430867                 mov     ecx, edi
  6. .text:00430869                 push    esi
  7. .text:0043086A                 lea     ebx, [ebx+0]
  8. .text:00430870 loc_430870:
  9. .text:00430870                 mov     si, [ecx]
  10. .text:00430873                 cmp     si, [edx]
  11. .text:00430876                 jnz     short loc_430896
  12. .text:00430878                 test    si, si
  13. .text:0043087B                 jz      short loc_430892
  14. .text:0043087D                 mov     si, [ecx+2]
  15. .text:00430881                 cmp     si, [edx+2]
  16. .text:00430885                 jnz     short loc_430896
  17. .text:00430887                 add     ecx, 4
  18. .text:0043088A                 add     edx, 4
  19. .text:0043088D                 test    si, si
  20. .text:00430890                 jnz     short loc_430870
  21. .text:00430892 loc_430892:
  22. .text:00430892                 xor     ecx, ecx
  23. .text:00430894                 jmp     short loc_43089B
  24. .text:00430896 ; ---------------------------------------
  25. .text:00430896 loc_430896:
  26. .text:00430896                 sbb     ecx, ecx
  27. .text:00430898                 sbb     ecx, 0FFFFFFFFh
  28. .text:0043089B loc_43089B:
  29. .text:0043089B                 test    ecx, ecx
  30. .text:0043089D                 jz      short loc_4308D5
  31. .text:0043089F                 mov     edx, offset aJuuw3ies5zg659
  32. ; "Juuw3IES5Zg6597Snuz2JRBBgpKJsL"
  33. .text:004308A4                 mov     ecx, edi
  34. .text:004308A6 loc_4308A6:
  35. .text:004308A6                 mov     si, [ecx]
  36. .text:004308A9                 cmp     si, [edx]
  37. .text:004308AC                 jnz     short loc_4308CC
  38. .text:004308AE                 test    si, si
  39. .text:004308B1                 jz      short loc_4308C8
  40. .text:004308B3                 mov     si, [ecx+2]
  41. .text:004308B7                 cmp     si, [edx+2]
  42. .text:004308BB                 jnz     short loc_4308CC
  43. .text:004308BD                 add     ecx, 4
  44. .text:004308C0                 add     edx, 4
  45. .text:004308C3                 test    si, si
  46. .text:004308C6                 jnz     short loc_4308A6
  47. .text:004308C8 loc_4308C8:
  48. .text:004308C8                 xor     ecx, ecx
  49. .text:004308CA                 jmp     short loc_4308D1
  50. .text:004308CC ; ---------------------------------------
  51. .text:004308CC loc_4308CC:
  52. .text:004308CC                 sbb     ecx, ecx
  53. .text:004308CE                 sbb     ecx, 0FFFFFFFFh
  54. .text:004308D1 loc_4308D1:
  55. .text:004308D1                 test    ecx, ecx
  56. .text:004308D3                 jnz     short loc_4308DA
  57. .text:004308D5 loc_4308D5:
  58. .text:004308D5                 mov     eax, 1
  59. .text:004308DA loc_4308DA:
  60. .text:004308DA                 pop     esi
  61. .text:004308DB                 retn
  62. .text:004308DB sub_430860      endp
Адрес email нигде в проверках не используется, достаточно только, чтобы он имел правильный формат. В функции проверки последовательно выполняется сравнение введенного серийника с двумя строками, если хоть с одной совпало, то возвращается EAX=1. Получается, что валидных серийников для программы всего два, и оба они прописаны в файле в открытом виде. Это строчки "hanCfcHV8YNvPQnEw4y1GCQ3XhCBkD" и "Juuw3IES5Zg6597Snuz2JRBBgpKJsL". Теперь давайте попробуем зарегистрировать программу любым из них.

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

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

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 746 | Комментариев: 2

Комментарии

Отзывы посетителей сайта о статье
Kaktustv (14.08.2019 в 13:15):
Отличная защита, побольше бы таких.
xussr (05.07.2019 в 17:34):
Прям совсем легкотень для тех кто еще в танке))))

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

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

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