Blog. Just Blog

Исследование защиты программы Stellar Phoenix Digital Media Recovery

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы 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" из окна "О программе".
  1. .text:00401B9B                 push    ecx
  2. .text:00401B9C                 call    sub_9059B0
  3. .text:00401BA1                 add     esp, 8
  4. .text:00401BA4                 mov     [esp+77Ch+var_744], eax
  5. ; Проверить флаг регистрации
  6. .text:00401BA8                 cmp     byte_115B2B0, 0
  7. .text:00401BAF                 mov     byte ptr [esp+77Ch+var_4], 5
  8. ; Если он равен 0, то программа не зеарегистрирована
  9. .text:00401BB7                 jz      short loc_401BC8
  10. .text:00401BB9                 mov     ecx, [edi+48h]
  11. .text:00401BBC                 lea     edx, [esp+77Ch+var_744]
  12. .text:00401BC0                 push    edx
  13. .text:00401BC1                 call    sub_5A7CD0
  14. .text:00401BC6                 jmp     short loc_401C0E
  15. .text:00401BC8 ; -------------------------------------------------
  16. .text:00401BC8 loc_401BC8:
  17. ; Вывести текст "Demo" на форму "О программе"
  18. .text:00401BC8                 push    ebp
  19. .text:00401BC9                 lea     eax, [esp+780h+var_764]
  20. .text:00401BCD                 push    offset aDemo    ; "Demo"
  21. .text:00401BD2                 push    eax
  22. .text:00401BD3                 call    sub_401980
  23. .text:00401BD8                 add     esp, 0Ch
Тут все просто. Проверяется байт по фиксированному адресу 115B2B0, если он равен нулю, то выводится надпись "Demo". Посмотрим перекрестные ссылки на этот байт, чтобы найти место, где он инициализируется.

Перекрестные ссылки на байт
Перекрестные ссылки на байт

Как ни странно, такое место всего лишь одно. Все остальные перекрестные ссылки - проверки этого флага. Посмотрим на код инициализации:
  1. .text:00405C0D                 push    ebx
  2. .text:00405C0E                 push    ebp
  3. .text:00405C0F                 call    eax
  4. .text:00405C11                 movzx   eax, al
  5. .text:00405C14                 mov     [esp+420h+var_400], offset dword_11598B8
  6. .text:00405C1C                 mov     ecx, offset dword_11598B8
  7. .text:00405C21                 mov     edx, 1
  8. .text:00405C26                 lock xadd [ecx], edx
  9. .text:00405C2A                 mov     bl, 4
  10. .text:00405C2C                 mov     byte ptr [esp+420h+var_4], bl
  11. .text:00405C33                 test    eax, eax
  12. .text:00405C35                 jz      loc_405D47
  13. ; Установить флаг "зарегистрировано"
  14. .text:00405C3B                 mov     byte_115B2B0, 1
  15. .text:00405C42                 mov     eax, [esi]
  16. .text:00405C44                 mov     edx, [eax+2Ch]
  17. .text:00405C47                 push    0
  18. .text:00405C49                 mov     ecx, esi
  19. .text:00405C4B                 call    edx
  20. .text:00405C4D                 push    0               ; int
  21. .text:00405C4F                 push    ecx             ; void *
  22. .text:00405C50                 mov     eax, esp
  23. .text:00405C52                 mov     [esp+428h+Memory], esp
  24. .text:00405C56                 push    0
  25. .text:00405C58                 push    offset aProductIsActiv
  26. ; "Product is activated successfully !"
  27. .text:00405C5D                 push    eax
  28. .text:00405C5E                 call    sub_4054D0
  29. .text:00405C63                 add     esp, 0Ch
Байт регистрации инициализируется только в момент регистрации программы. Для регистрации используются функции навесного протектора, но стандартных переменных окружения в файле нет. Так же нет и других вызовов функций взаимодействия с протектором, типа проверки триального срока. Как еще можно инициализировать байт регистрации? А давайте просто попробуем перейти по этому адресу в файле.

Патчим файл
Патчим файл

Байт сразу же обнаруживается в сегменте данных исполняемого файла. То есть нам ничего не мешает сразу же вписать туда нужное значение - единичку. Поскольку больше нигде инициализация этого байта не происходит, то и правильное значение ничем не перезапишется. Вносим изменения, запускаем программу.

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

В окне "О программе" вместо надписи "Demo" отображается имя компьютера. Ну хоть так, уже что-то. Проверяем основное ограничение - невозможность сохранить восстановленные файлы.

Ограничение успешно нейтрализовано
Ограничение успешно нейтрализовано

Тут тоже все в порядке, вместо предложения выложить бабло появляется диалог выбора папки для восстановленных файлов. Ну и сами файлы тоже восстанавливаются без каких-либо ограничений. Цель достигнута. Кстати, после распаковки и патча Stellar Phoenix Digital Media Recovery может работать со съемного носителя.

Поделиться ссылкой ВКонтакте
Просмотров: 2923 | Комментариев: 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, всё устраивало, но на русском юникоде он обломался.
irokkezz (30.05.2016 в 07:21):
ЦитатаКстати, после распаковки и патча Stellar Phoenix Digital Media Recovery может работать со съемного носителя

К сожалению, не работает. При запуске на чистой системе (пробовал на 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 там защита куда веселее.

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

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

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