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

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

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

Сообщение о неправильной регистрации
Программа мультиязычная, файлы с текстовыми строчками хранятся в подкаталоге Languages. Это файлы в стандартном формате ini, интересующее нас сообщение соответствует параметру MSG1004:
MSG1004=Your email or key is not correct!
Поиском по строке "MSG1004" в разобранном листинге исполняемого файла обнаруживается единственный фрагмент кода с предельно понятной логикой:
Code (Assembler) : Убрать нумерацию
- .text:0044EE86 call sub_44F020
- .text:0044EE8B mov byte ptr [esp+8DCh+var_4], 10h
- .text:0044EE93 mov edi, [esp+8DCh+var_8C8]
- ; Вызвать функцию проверки
- .text:0044EE97 call sub_430860
- ; Если результат EAX нулевой, то вывести сообщение о неправильной регистрации
- .text:0044EE9C test eax, eax
- .text:0044EE9E jz short loc_44EEB7
- .text:0044EEA0 mov ecx, esi
- .text:0044EEA2 call sub_42FC70
- .text:0044EEA7 mov ecx, [esp+8DCh+var_8C4]
- .text:0044EEAB push 1 ; wParam
- .text:0044EEAD call sub_46EC00
- .text:0044EEB2 jmp loc_44EF3C
- .text:0044EEB7 ; ---------------------------------------
- ; Загрузить строку из языковых ресурсов и вывести сообщение
- .text:0044EEB7 loc_44EEB7:
- .text:0044EEB7 lea ecx, [esp+8DCh+var_3C8]
- .text:0044EEBE push ecx
- .text:0044EEBF call sub_449600
- .text:0044EEC4 mov eax, offset aMsg1004 ; "MSG1004"
- .text:0044EEC9 lea ecx, [esp+8DCh+var_8BC]
- .text:0044EECD mov byte ptr [esp+8DCh+var_4], 15h
- .text:0044EED5 call sub_4062F0
- .text:0044EEDA mov esi, [esp+8DCh+var_8C4]
- .text:0044EEDE lea edx, [esp+8DCh+var_8BC]
Code (Assembler) : Убрать нумерацию
- .text:00430860 sub_430860 proc near
- .text:00430860 xor eax, eax
- .text:00430862 mov edx, offset aHancfchv8ynvpq
- ; "hanCfcHV8YNvPQnEw4y1GCQ3XhCBkD"
- .text:00430867 mov ecx, edi
- .text:00430869 push esi
- .text:0043086A lea ebx, [ebx+0]
- .text:00430870 loc_430870:
- .text:00430870 mov si, [ecx]
- .text:00430873 cmp si, [edx]
- .text:00430876 jnz short loc_430896
- .text:00430878 test si, si
- .text:0043087B jz short loc_430892
- .text:0043087D mov si, [ecx+2]
- .text:00430881 cmp si, [edx+2]
- .text:00430885 jnz short loc_430896
- .text:00430887 add ecx, 4
- .text:0043088A add edx, 4
- .text:0043088D test si, si
- .text:00430890 jnz short loc_430870
- .text:00430892 loc_430892:
- .text:00430892 xor ecx, ecx
- .text:00430894 jmp short loc_43089B
- .text:00430896 ; ---------------------------------------
- .text:00430896 loc_430896:
- .text:00430896 sbb ecx, ecx
- .text:00430898 sbb ecx, 0FFFFFFFFh
- .text:0043089B loc_43089B:
- .text:0043089B test ecx, ecx
- .text:0043089D jz short loc_4308D5
- .text:0043089F mov edx, offset aJuuw3ies5zg659
- ; "Juuw3IES5Zg6597Snuz2JRBBgpKJsL"
- .text:004308A4 mov ecx, edi
- .text:004308A6 loc_4308A6:
- .text:004308A6 mov si, [ecx]
- .text:004308A9 cmp si, [edx]
- .text:004308AC jnz short loc_4308CC
- .text:004308AE test si, si
- .text:004308B1 jz short loc_4308C8
- .text:004308B3 mov si, [ecx+2]
- .text:004308B7 cmp si, [edx+2]
- .text:004308BB jnz short loc_4308CC
- .text:004308BD add ecx, 4
- .text:004308C0 add edx, 4
- .text:004308C3 test si, si
- .text:004308C6 jnz short loc_4308A6
- .text:004308C8 loc_4308C8:
- .text:004308C8 xor ecx, ecx
- .text:004308CA jmp short loc_4308D1
- .text:004308CC ; ---------------------------------------
- .text:004308CC loc_4308CC:
- .text:004308CC sbb ecx, ecx
- .text:004308CE sbb ecx, 0FFFFFFFFh
- .text:004308D1 loc_4308D1:
- .text:004308D1 test ecx, ecx
- .text:004308D3 jnz short loc_4308DA
- .text:004308D5 loc_4308D5:
- .text:004308D5 mov eax, 1
- .text:004308DA loc_4308DA:
- .text:004308DA pop esi
- .text:004308DB retn
- .text:004308DB sub_430860 endp

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

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Kaktustv
(14.08.2019 в 13:15):
Отличная защита, побольше бы таких.

xussr
(05.07.2019 в 17:34):
Прям совсем легкотень для тех кто еще в танке))))

Добавить комментарий
Заполните форму для добавления комментария
