Исследование защиты программы PhotoRestorer
Скриншот программы PhotoRestorer
Программа PhotoRestorer предназначена для восстановления удаленных фотографий с цифровых носителей: SD-карт разных форматов, цифровых рамок, внутренней памяти фотоаппаратов и т.п. PhotoRestorer сканирует носитель на предмет наличия удаленных JPEG-файлов, показывает их в виде превьюшек, а затем предлагает сохранить восстановленные полноразмерные файлы на жесткий диск. В незарегистрированном режиме сохраняемые фотографии уменьшаются в 10 раз, что сводит полезность программы к нулю. А вот если к нулю свести стоимость программы, то по закону сохранения вареза, ее практическая ценность сразу увеличится до бесконечности. Этим мы сейчас и займемся.
Скачиваем дистрибутив, устанавливаем, запускаем. Внешних проявлений триальности особо нет, если не считать надпись в окне "О программе", а вот при попытке сканирования диска сразу появляется окно с предложением зарегистрироваться:
Окно регистрации программы
Если посмотреть на содержимое папки с установленной программой, то станет ясно, что она поддерживает несколько языков, в том числе и русский. В языковом файле Languages\Russian.lng обнаруживается вот такой блок с текстовыми строками:
[Trial]
Message1=Эта программа не зарегистрирована!
Message2=Размер изображений будет как 1:10.
Message3=Приобрести PhotoRestorer!
Message4=Ввод лицензионого ключа
Message5=Пожалуйста введите регистрационную информацию ниже
Message6=посетите сайт
Message7=Вы должны набрать ваше имя!
Message8=Вы должны набрать ваш ключ!
Message9=Спасибо за регистрацию!
Message10=Неверная регистрационная информация!
Message11=Пожалуйста попытайтесь снова!
Name=Ваше имя
Key=Лицензионный ключ
Licensed=Зарегистрированно на:
Нас интересует следующее: "Trial" - название секции языкового файла, из которого загружаются строки, и пара "Message9" и "Message10" с сообщениями о правильной и неправильной регистрации. Нам надо найти в файле место, где рядом одновременно задействуются первая и любая из вторых строк. Надеюсь, что ко второй сотне статей мне уже не стоит упоминать, что сразу после установки надо отправить главный исполняемый файл в дизассемблер? Итак, поиском в дизассемблере обнаруживается следующий фрагмент кода:
Code (Assembler) : Убрать нумерацию
- CODE:00475457 mov eax, ds:off_47EBB4
- CODE:0047545C mov eax, [eax]
- CODE:0047545E push eax
- CODE:0047545F mov ecx, offset aUsername_0
- ; "UserName"
- CODE:00475464 mov edx, offset aSoftwareNtec_0
- ; "SOFTWARE\\NTechnologies\\PhotoRestorer"
- CODE:00475469 mov eax, 80000001h
- CODE:0047546E call sub_473810
- CODE:00475473 mov eax, ds:off_47E8DC
- CODE:00475478 mov eax, [eax]
- CODE:0047547A push eax
- CODE:0047547B mov edx, offset aSoftwareNtec_0
- ; "SOFTWARE\\NTechnologies\\PhotoRestorer"
- CODE:00475480 mov ecx, offset aLicensekey_0
- ; "LicenseKey"
- CODE:00475485 mov eax, 80000001h
- CODE:0047548A call sub_473810
- CODE:0047548F call sub_473D1C
- ; Сохранить байт в ячейку памяти, затем сравнить его с нулем
- CODE:00475494 mov edx, ds:off_47EC94
- CODE:0047549A mov [edx], al
- CODE:0047549C mov eax, ds:off_47EC94
- CODE:004754A1 cmp byte ptr [eax], 0
- ; Если ноль, то регистрация не прошла
- CODE:004754A4 jz short loc_4754F8
- CODE:004754A6 mov eax, ebx
- ; Сообщение об успешной регистрации
- CODE:004754A8 call sub_457014
- CODE:004754AD push offset aThankYouForReg
- ; "Thank you for registration!"
- CODE:004754B2 lea eax, [ebp+var_2C]
- CODE:004754B5 push eax
- CODE:004754B6 mov eax, ds:off_47ECCC
- CODE:004754BB mov eax, [eax]
- CODE:004754BD mov ecx, offset aMessage9 ; "Message9"
- CODE:004754C2 mov edx, offset aTrial_0 ; "Trial"
- CODE:004754C7 mov esi, [eax]
- CODE:004754C9 call dword ptr [esi]
- CODE:004754CB mov edx, [ebp+var_2C]
- CODE:004754CE mov eax, ds:off_47ECA8
- CODE:004754D3 mov eax, [eax]
- CODE:004754D5 mov eax, [eax+300h]
- CODE:004754DB call sub_43AC84
- CODE:004754E0 mov eax, ds:off_47ECA8
- CODE:004754E5 mov eax, [eax]
- CODE:004754E7 mov edx, [eax]
- CODE:004754E9 call dword ptr [edx+0ECh]
- CODE:004754EF mov eax, ebx
- CODE:004754F1 call sub_456E74
- CODE:004754F6 jmp short loc_475570
- CODE:004754F8 ; ------------------------------
- CODE:004754F8 loc_4754F8:
- ; Сообщение о неправильной регистрации
- CODE:004754F8 push offset aIncorrectRegis
- ; "Incorrect registration info!"
- CODE:004754FD lea eax, [ebp+var_34]
- CODE:00475500 push eax
- CODE:00475501 mov eax, ds:off_47ECCC
- CODE:00475506 mov eax, [eax]
- CODE:00475508 mov ecx, offset aMessage10 ; "Message10"
- CODE:0047550D mov edx, offset aTrial_0 ; "Trial"
- CODE:00475512 mov ebx, [eax]
- CODE:00475514 call dword ptr [ebx]
- CODE:00475516 push [ebp+var_34]
- CODE:00475519 push offset dword_475730
Code (Assembler) : Убрать нумерацию
- ; Прочитать регистрационные данные из реестра
- CODE:00473D32 lea eax, [ebp+var_4]
- CODE:00473D35 push eax
- CODE:00473D36 mov ecx, offset aUsername ; "UserName"
- CODE:00473D3B mov edx, offset aSoftwareNtechn
- ; "SOFTWARE\\NTechnologies\\PhotoRestorer"
- CODE:00473D40 mov eax, 80000001h
- CODE:00473D45 call sub_473744
- CODE:00473D4A mov edx, [ebp+var_4]
- CODE:00473D4D mov eax, offset unk_47FBF0
- CODE:00473D52 call sub_404488
- CODE:00473D57 lea eax, [ebp+var_8]
- CODE:00473D5A push eax
- CODE:00473D5B mov edx, offset aSoftwareNtechn
- ; "SOFTWARE\\NTechnologies\\PhotoRestorer"
- CODE:00473D60 mov ecx, offset aLicensekey ; "LicenseKey"
- CODE:00473D65 mov eax, 80000001h
- CODE:00473D6A call sub_473744
- CODE:00473D6F mov edx, [ebp+var_8]
- CODE:00473D72 mov eax, offset dword_47FBF4
- CODE:00473D77 call sub_404488
- ; Строка серийного номера
- CODE:00473D7C mov edx, ds:dword_47FBF4
- ; Искомая подстрока "17A2"
- CODE:00473D82 mov eax, offset a17a2 ; "17A2"
- CODE:00473D87 call sub_404A48
- CODE:00473D8C test eax, eax
- ; Подстрока найдена?
- CODE:00473D8E jle short loc_473D94
- ; Введенный серийник правильный
- CODE:00473D90 mov bl, 1
- CODE:00473D92 jmp short loc_473D96
- CODE:00473D94 ; --------------------------------------
- CODE:00473D94 loc_473D94:
- ; Введенный серийник неправильный
- CODE:00473D94 xor ebx, ebx
- CODE:00473D96 loc_473D96:
- CODE:00473D96 xor eax, eax
- CODE:00473D98 pop edx
- CODE:00473D99 pop ecx
Программа успешно зарегистрирована
После перезапуска в окне "О программе" появляется введенное регистрационное имя, а окно с предложением регистрации больше не появляется. Ну и главное, что восстановленные фотографии сохраняются в полном размере, без всяких принудительных искажений.
Программа успешно зарегистрирована
Цель достигнута. Ну а любителям фотографировать подобный инструмент лучше всегда иметь под рукой, мало ли чего. Также у меня есть подозрение, что аналогичная защита и у других программ этого же разработчика, но эти исследования я оставлю вам.
Просмотров: 2935 | Комментариев: 3
Метки: исследование защиты, графика
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
brute
(20.09.2015 в 06:38):
прога в оле не отлаживается (у меня) - в начале стоят мьютексы и брекпойнты вываливают исключения. Можно только сразу патчить и смотреть результат. Вообще, об эту школьную поделку даже мышку пачкать не хочется - не хватает этой проге только протектора и цены в сотню баксов.. Не стоит она 2000р, бесплатных универсальных undelete'ров полно!
user
(18.09.2015 в 21:34):
Там ещё намекают, что обязательно надо скачать программу IMAGESIGN.
Пришлось скачать...
Обе программы патчатся поиском и заменой байтов:
OLD: 85,C0,7E,04,B3,01,EB
NEW: 85,C0,7E,00,B3,01,EB
Пришлось скачать...
Обе программы патчатся поиском и заменой байтов:
OLD: 85,C0,7E,04,B3,01,EB
NEW: 85,C0,7E,00,B3,01,EB
Добавить комментарий
Заполните форму для добавления комментария
Проверил, как работает их NTFileRestore - восстанавливает мало файлов, в "восстановленных" файлах грязь.
Доверия не внушает короче.
Эти прожки (PhotoRestorer и ImageSign) ,похоже, только и работают более-менее.
В общем, пацаны пришли к успеху.