Blog. Just Blog

Исследование защиты Photo Mishmash Screensaver

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

Софт из старых запасов. Photo Mishmash Screensaver - простенький хранитель экрана, который накидывает на рабочий стол изображения из выбранной папки, а затем всячески их деформирует. Не шедевр, конечно, но для разнообразия сойдет. Офсайта давно уже нет, скачать дистрибутив негде, поэтому ковыряться во внутренностях можно со спокойной совестью.

Забираем с файлобменника дистрибутив, устанавливаем, смотрим что и как. В окне настроек отображается информация об оставшемся пробном периоде. Но вот ни полей ввода регистрационных данных, ни чего-то подобного в интерфейсе нет.

Окно настроек
Окно настроек

Больше ничего интересного нет. Исполняемый файл ничем не упакован, отправляем его в дизассемблер. У меня он разобрал файл быстрее, чем я напечатал этот абзац. Поищем в листинге строчку сообщения о триальном периоде, а также условие, при котором она появляется.
  1. .text:004121FA                 lea     ecx, [ebp+var_14]
  2. .text:004121FD                 call    sub_4219E0
  3. .text:00412202                 mov     byte ptr [ebp+var_4], 4
  4. .text:00412206                 lea     ecx, [ebp+var_14]
  5. ; Вызвать функцию проверки
  6. .text:00412209                 call    sub_421EC5
  7. ; Если она вернула EAX=0, то скринсейвер не зарегистрирован
  8. .text:0041220E                 test    eax, eax
  9. .text:00412210                 jz      loc_412340
  10. .text:00412216                 lea     ecx, [ebp+var_14]
  11. .text:00412219                 call    ?GetLocaleT@_LocaleUpdate
  12. .text:0041221E                 push    eax
  13. .text:0041221F                 push    offset aIsRegisteredTo
  14. ; " is registered to:\r\n"
  15. .text:00412224                 lea     ecx, [ebp+var_18]
  16. .text:00412227                 call    sub_467788
  17. .text:0041222C                 mov     [ebp+var_50], eax
  18. .text:0041222F                 mov     ecx, [ebp+var_50]
  19. .text:00412232                 mov     [ebp+var_54], ecx
  20. .text:00412235                 mov     byte ptr [ebp+var_4], 5
  21. .text:00412239                 mov     edx, [ebp+var_54]
  22. .text:0041223C                 push    edx
  23. ...
  24. ...
  25. ...
  26. .text:00412331                 mov     edx, [ebp+var_4C]
  27. .text:00412334                 mov     byte ptr [edx+94h], 0
  28. .text:0041233B                 jmp     loc_4124DD
  29. .text:00412340 ; ------------------------------------------------
  30. .text:00412340 loc_412340:
  31. .text:00412340                 lea     eax, [ebp+var_30]
  32. .text:00412343                 push    eax
  33. .text:00412344                 call    sub_421EDC
  34. .text:00412349                 add     esp, 4
  35. .text:0041234C                 mov     [ebp+var_80], eax
  36. .text:0041234F                 mov     ecx, [ebp+var_80]
  37. .text:00412352                 mov     [ebp+var_84], ecx
  38. .text:00412358                 mov     byte ptr [ebp+var_4], 0Bh
  39. .text:0041235C                 mov     edx, [ebp+var_84]
  40. .text:00412362                 push    edx
  41. .text:00412363                 push    offset a_EvaluationPer
  42. ; ". Evaluation period "
  43. .text:00412368                 lea     ecx, [ebp+var_34]
  44. .text:0041236B                 call    sub_467788
  45. .text:00412370                 mov     [ebp+var_88], eax
  46. .text:00412376                 mov     eax, [ebp+var_88]
  47. .text:0041237C                 mov     [ebp+var_8C], eax
Часть кода я пропустил для наглядности, оставил только логическое ветвление. Тут у нас самая обычная проверка регистрации, по результатам которой или выводится сообщение о корректной регистрации или сообщение о пробном периоде. Посмотрим функцию проверки:
  1. .text:00421EC5 sub_421EC5      proc near
  2. .text:00421EC5                 push    ebp
  3. .text:00421EC6                 mov     ebp, esp
  4. .text:00421EC8                 sub     esp, 8
  5. .text:00421ECB                 mov     [ebp+var_8], ecx
  6. ; Принудительно обнулить результат
  7. .text:00421ECE                 mov     [ebp+var_4], 0
  8. ; Скринсейвер НИКОГДА не будет зарегистрирован
  9. .text:00421ED5                 mov     eax, [ebp+var_4]
  10. .text:00421ED8                 mov     esp, ebp
  11. .text:00421EDA                 pop     ebp
  12. .text:00421EDB                 retn
  13. .text:00421EDB sub_421EC5      endp
Тут даже не надо быть реверсером, чтобы понять суть происходящего. Результат проверки регистрации всегда будет неправильным, да и не проверяется тут, собственно, ничего, просто принудительно обнуляется переменная. Вот и раскрылась причина того, почему в интерфейсе не предусмотрена регистрация, это просто демо-версия, а полная версия высылается или скачивается после покупки. Что ж, давайте превратим демо-версию в полную. Впечатываем в начало функции по адресу 00421EC5 пару команд MOV EAX,1 и RET, сохраняем изменения.

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

Вот теперь все по красоте. В интерфейсе пропали всякие уродливые надписи и вкладки со ссылками на покупку. Перевод системного времени на месяц вперед также не нарушает работоспособность скринсейвера. Цель достигнута.

Поделиться ссылкой ВКонтакте
Просмотров: 435 | Комментариев: 0

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Комментариeв нет

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

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

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