Исследование защиты программы Stellar Phoenix Digital Media Recovery
Скриншот программы Stellar Phoenix Digital Media Recovery
Программа Stellar Phoenix Digital Media Recovery - одна из лучших, на мой взгляд, утилит для восстановления удаленных фотографий и видеофайлов с цифровых камер и карт памяти. Также она позволяет создавать образы дисков, чтобы случайно не затереть восстанавливаемые данные на оригинальном носителе. В незарегистрированном режиме программа только показывает список файлов, не давая их сохранить. Это ограничение сегодня мы будем устранять.
Начнем, естественно, со скачивания дистрибутива. Устанавливаем программу, запускаем и пробуем с ее помощью что-нибудь восстановить. Получаем безвариантное сообщение о необходимости зарегистрироваться.
Ограничение программы
В окне "О программе" вместо регистрационного имени отображается надпись "Demo". Это тоже будем считать одним из основных признаков незарегистрированной программы и зацепкой для дальнейших исследований.
Программа не зарегистрирована
Основной исполняемый файл накрыт навесным протектором Armadillo. Он без труда снимается в автоматическом режиме утилитой ArmaGeddon. Обязательно проверяем, чтобы распакованный файл нормально запускался.
Распаковываем файл
Теперь надо обрезать секции, оставшиеся после протектора. Во-первых, они уже нигде не задействуются и посему ненужны, а во-вторых, размер файла после такой оптимизации заметно сократится. Удобнее всего удалять секции в CFF Explorer. Удалению подлежат секции ".text1", ".adata", ".data1" и ".pdata". Сохраняем файл и снова убеждаемся в его работоспособности.
Удаляем секции протектора
Треть работы сделана. Отправляем распакованный файл в дизассемблер. Когда он завершит процесс анализа, поищем место, где используется строчка "Demo" из окна "О программе".
Code (Assembler) : Убрать нумерацию
- .text:00401B9B push ecx
- .text:00401B9C call sub_9059B0
- .text:00401BA1 add esp, 8
- .text:00401BA4 mov [esp+77Ch+var_744], eax
- ; Проверить флаг регистрации
- .text:00401BA8 cmp byte_115B2B0, 0
- .text:00401BAF mov byte ptr [esp+77Ch+var_4], 5
- ; Если он равен 0, то программа не зеарегистрирована
- .text:00401BB7 jz short loc_401BC8
- .text:00401BB9 mov ecx, [edi+48h]
- .text:00401BBC lea edx, [esp+77Ch+var_744]
- .text:00401BC0 push edx
- .text:00401BC1 call sub_5A7CD0
- .text:00401BC6 jmp short loc_401C0E
- .text:00401BC8 ; -------------------------------------------------
- .text:00401BC8 loc_401BC8:
- ; Вывести текст "Demo" на форму "О программе"
- .text:00401BC8 push ebp
- .text:00401BC9 lea eax, [esp+780h+var_764]
- .text:00401BCD push offset aDemo ; "Demo"
- .text:00401BD2 push eax
- .text:00401BD3 call sub_401980
- .text:00401BD8 add esp, 0Ch
Перекрестные ссылки на байт
Как ни странно, такое место всего лишь одно. Все остальные перекрестные ссылки - проверки этого флага. Посмотрим на код инициализации:
Code (Assembler) : Убрать нумерацию
- .text:00405C0D push ebx
- .text:00405C0E push ebp
- .text:00405C0F call eax
- .text:00405C11 movzx eax, al
- .text:00405C14 mov [esp+420h+var_400], offset dword_11598B8
- .text:00405C1C mov ecx, offset dword_11598B8
- .text:00405C21 mov edx, 1
- .text:00405C26 lock xadd [ecx], edx
- .text:00405C2A mov bl, 4
- .text:00405C2C mov byte ptr [esp+420h+var_4], bl
- .text:00405C33 test eax, eax
- .text:00405C35 jz loc_405D47
- ; Установить флаг "зарегистрировано"
- .text:00405C3B mov byte_115B2B0, 1
- .text:00405C42 mov eax, [esi]
- .text:00405C44 mov edx, [eax+2Ch]
- .text:00405C47 push 0
- .text:00405C49 mov ecx, esi
- .text:00405C4B call edx
- .text:00405C4D push 0 ; int
- .text:00405C4F push ecx ; void *
- .text:00405C50 mov eax, esp
- .text:00405C52 mov [esp+428h+Memory], esp
- .text:00405C56 push 0
- .text:00405C58 push offset aProductIsActiv
- ; "Product is activated successfully !"
- .text:00405C5D push eax
- .text:00405C5E call sub_4054D0
- .text:00405C63 add esp, 0Ch
Патчим файл
Байт сразу же обнаруживается в сегменте данных исполняемого файла. То есть нам ничего не мешает сразу же вписать туда нужное значение - единичку. Поскольку больше нигде инициализация этого байта не происходит, то и правильное значение ничем не перезапишется. Вносим изменения, запускаем программу.
Программа успешно "зарегистрирована"
В окне "О программе" вместо надписи "Demo" отображается имя компьютера. Ну хоть так, уже что-то. Проверяем основное ограничение - невозможность сохранить восстановленные файлы.
Ограничение успешно нейтрализовано
Тут тоже все в порядке, вместо предложения выложить бабло появляется диалог выбора папки для восстановленных файлов. Ну и сами файлы тоже восстанавливаются без каких-либо ограничений. Цель достигнута. Кстати, после распаковки и патча Stellar Phoenix Digital Media Recovery может работать со съемного носителя.
Просмотров: 3053 | Комментариев: 14
Метки: исследование защиты, мультимедиа
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(21.06.2016 в 07:20):
Жека, может pawel97 пригодится, я по-старинке hiew пользуюсь.
Жека
(21.06.2016 в 02:00):
ManHunter, кстати на счёт FlexHex, у меня есть полностью русифицированная мной и крякнутая самим же, последняя их версия 2.6, я это к тому... может вам в коллекцию инструментов надо, то могу залить куда скажете... те которые есть в сети - кривые до безобразия... даже импорт восстановлен не верно в некоторых моментах...
ManHunter
(10.06.2016 в 23:18):
pawel97, с FlexHex прекрасно справляется ASProtect SKE Inline Patcher v0.2. Выставляешь Method 2 и делаешь инлайн. В инлайн уже впечатываешь все изменения.
ManHunter
(03.06.2016 в 23:47):
Нет, не сталкивался.
Vladimir
(03.06.2016 в 23:42):
Раз тут вопросы такого рода звучат, то и я спрошу: а вам с Enigma четвёртой версии сталкиваться доводилось? Я немного посмотрел про распаковку, ужаснулся и решил, что и так сойдёт, с краденым ключом.
pawel97
(03.06.2016 в 21:21):
ManHunter, да без разницы, хоть бы тот же FlexHex интересно было поковырять (наткнулся, пока искал альтернативу по второму вопросу). Да, там не последний (2008 год), но не думаю, что принцип сильно изменился. То что ломанный есть - знаю.
ManHunter
(03.06.2016 в 20:53):
HIEW умеет. Надо переключить просмотр текста в юникод и искать как обычную строку.
Имя жертвы?
pawel97
(03.06.2016 в 20:11):
Очень прошу, даже умоляю! Черканите пару строк про аспр последний, желательно про изготовление лодыря без навыков программирования. .Сам пробовал в DUP, protection error 45. Арму одной кнопкой мы уже могём. :) А флеш-туторы - не наша тема.
И ещё вопрос не в тему - какой хекс-редактор умеет искать кириллицу в юникоде без перевода поисковой строки в байты? Т.к. аскет, всю жизнь пользовал минималистичный HxD, всё устраивало, но на русском юникоде он обломался.
И ещё вопрос не в тему - какой хекс-редактор умеет искать кириллицу в юникоде без перевода поисковой строки в байты? Т.к. аскет, всю жизнь пользовал минималистичный HxD, всё устраивало, но на русском юникоде он обломался.
irokkezz
(30.05.2016 в 07:21):
К сожалению, не работает. При запуске на чистой системе (пробовал на XP,7 и 8.1) портативной версии в ней не отображаются форматы для восстановления. Они, видимо, в реестре прописываются.
Vladimir
(30.05.2016 в 01:12):
Master, спасибо за идею, я старой версией не подумал попробовать распаковать. Всё получилось.
ManHunter
(30.05.2016 в 00:44):
Поэтому и приходится держать не виртуальную машину с XP, а физический ноут, специально для корректной распаковки. На виртуалке ошибки распаковки проявляются гораздо чаще.
Master
(29.05.2016 в 23:48):
Vladimir такая же ошибка под XP. Распаковал ArmaGeddon v 2.0 и все ок. :)
Vladimir
(29.05.2016 в 21:30):
У меня в XP пишет "ошибка инициализации приложения (0x80000003)" и не стартует. На семёрке всё замечательно, но работает тоже только на семерке, XP пишет о том, что "точка входа в процедуру NtdllDefWindowProc_W не найдена в библиотеке DLL ntdll.dll". Не первый раз Армагеддон так шалит в разных системах.
voffka
(29.05.2016 в 12:07):
С CrypKey там защита куда веселее.
Добавить комментарий
Заполните форму для добавления комментария