Blog. Just Blog

Фишинг серийников в Blumentals Screensaver Factory

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
При помощи программы Blumentals Screensaver Factory вы можете создавать красивые скринсейверы в виде слайдшоу из ваших фотографий. Саму "фабрику" можно без проблем найти в интернете, но речь сейчас не о ней, а о скринсейверах, которые сделаны с ее помощью. В Blumentals Screensaver Factory есть возможность создания коммерческих скринсейверов, защищенных серийным номером, и некоторые аффтары умудряются торговать подобными дешевками, на создание которых было затрачено всего несколько минут. Такие скринсейверы можно узнать по окну настроек:

Окно настроек скринсейвера
Окно настроек скринсейвера

В зависимости от использованной версии "фабрики" вкладок может быть больше или меньше, но общий стиль оформления остается неизменный.

Для работы нам понадобится бесплатный отладчик OllyDbg. Начальное знание Ассемблера, прямые руки и незамутненная голова - опции по умолчанию :) Термин "фишинг" больше относится к компьютерным правонарушениям, но вполне будет уместным и здесь. Мы будем "отлавливать" правильный серийный номер.

Итак, "ловись рыбка большая и маленькая". В свойствах экрана открываем настройки скринсейвера, нажимаем кнопочку Register... и вводим ваше имя и любые левые данные в качестве серийника:

Окно регистрации скринсейвера
Окно регистрации скринсейвера

Совершенно очевидно, что после нажатия кнопочки Ok мы получим сообщение об ошибке. Но нас интересует сам текст сообщения, он будет звучать как "Invalid registration key". Не закрывая окна настроек, запускаем отладчик и аттачимся к скринсейверу (меню File - Attach):

Аттач к процессу скринсейвера
Аттач к процессу скринсейвера

Теперь наша задача найти строку сообщения при неправильном серийнике и выяснить условие, при котором она появляется. Для этого переместим курсор в окно дампа и перейдем на начало секции кода (Ctrl+G, адрес 00401000). Затем поиском ищем строку "Invalid registration key" (Ctrl+B).

Поиск строки в памяти
Поиск строки в памяти

Строка успешно найдена. Ставим курсор на ее начало и ищем места, откуда есть ссылки на нее (Ctrl+R). Таких мест найдется два, нас интересует только первое.

Найдены ссылки на строку
Найдены ссылки на строку

Там находится интересный кусок кода. Для удобства я прокомментировал его ключевые места:
  1. 004ECE99     8D55 EC                   LEA EDX,DWORD PTR SS:[EBP-14]
  2. 004ECE9C     A1 AC765000               MOV EAX,DWORD PTR DS:[5076AC]
  3. 004ECEA1     8B00                      MOV EAX,DWORD PTR DS:[EAX]
  4. 004ECEA3     8B80 04030000             MOV EAX,DWORD PTR DS:[EAX+304]
  5. 004ECEA9     E8 3EEDF5FF               CALL 0044BBEC
  6. ; В регистры EDX и EAX заносятся параметры вызываемой функции. В этом
  7. ; месте надо установить breakpoint
  8. 004ECEAE     8B55 EC                   MOV EDX,DWORD PTR SS:[EBP-14]
  9. 004ECEB1     58                        POP EAX
  10. ; Вызов функции сравнения двух строк. Именно это нам и надо!
  11. ; Похоже что функция имеет вид типа Compare(&str1, &str2) и
  12. ; взводит флаг equal в зависимости от результата сравнения
  13. 004ECEB2     E8 B97DF1FF               CALL 00404C70
  14. 004ECEB7     74 43                     JE SHORT 004ECEFC
  15. ; Результат сравнения отрицательный, значит серийный номер неправильный
  16. 004ECEB9     6A 30                     PUSH 30
  17. 004ECEBB     8D55 E8                   LEA EDX,DWORD PTR SS:[EBP-18]
  18. 004ECEBE     A1 EC785000               MOV EAX,DWORD PTR DS:[5078EC]
  19. 004ECEC3     8B00                      MOV EAX,DWORD PTR DS:[EAX]
  20. 004ECEC5     E8 CEFAF7FF               CALL 0046C998
  21. 004ECECA     8B45 E8                   MOV EAX,DWORD PTR SS:[EBP-18]
  22. 004ECECD     E8 527EF1FF               CALL 00404D24
  23. 004ECED2     50                        PUSH EAX
  24. 004ECED3     8D55 E4                   LEA EDX,DWORD PTR SS:[EBP-1C]
  25.                                        ; ASCII "Invalid registration key."
  26. 004ECED6     B8 ECD04E00               MOV EAX,004ED0EC
  27. 004ECEDB     E8 0C49F9FF               CALL 004817EC
  28. 004ECEE0     8B45 E4                   MOV EAX,DWORD PTR SS:[EBP-1C]
  29. 004ECEE3     E8 3C7EF1FF               CALL 00404D24
  30. 004ECEE8     8BD0                      MOV EDX,EAX
  31. 004ECEEA     A1 EC785000               MOV EAX,DWORD PTR DS:[5078EC]
  32. 004ECEEF     8B00                      MOV EAX,DWORD PTR DS:[EAX]
  33. 004ECEF1     59                        POP ECX
  34. 004ECEF2     E8 1D01F8FF               CALL 0046D014
  35. 004ECEF7     E9 8A010000               JMP 004ED086
  36. ; Сюда мы попадаем если результат сравнения положительный, то есть
  37. ; введен правильный серийный номер
  38. 004ECEFC     6A 30                     PUSH 30
  39. 004ECEFE     8D55 E0                   LEA EDX,DWORD PTR SS:[EBP-20]
  40. 004ECF01     A1 EC785000               MOV EAX,DWORD PTR DS:[5078EC]
  41. 004ECF06     8B00                      MOV EAX,DWORD PTR DS:[EAX]
  42. 004ECF08     E8 8BFAF7FF               CALL 0046C998
  43. 004ECF0D     8B45 E0                   MOV EAX,DWORD PTR SS:[EBP-20]
  44. 004ECF10     E8 0F7EF1FF               CALL 00404D24
  45. 004ECF15     50                        PUSH EAX
  46. 004ECF16     8D55 DC                   LEA EDX,DWORD PTR SS:[EBP-24]
  47.                                        ; ASCII "Registration key accepted."
  48. 004ECF19     B8 10D14E00               MOV EAX,004ED110
  49. 004ECF1E     E8 C948F9FF               CALL 004817EC
  50. 004ECF23     8B45 DC                   MOV EAX,DWORD PTR SS:[EBP-24]
Ставим точку останова (breakpoint) по адресу 004ECEAE, запускаем программу на выполнение (F9), переключаемся обратно в окно регистрации и повторяем попытку ввода этих же левых данных. Отладчик остановится на поставленном бряке. Внимательно смотрим что куда ссылается.


В регистр EDX записывается указатель на наш левый серийник, а следующей командой в регистр EAX из стека запишется указатель на строку:

В стеке указатель на правильный серийный номер
В стеке указатель на правильный серийный номер

Строка "4410FCA3" - это второй параметр функции сравнения, и это же нужный нам серийный номер. Записываем его куда-нибудь, закрываем отладчик (при этом закроется и скринсейвер). Снова открываем окно настроек скринсейвера, вводим имя и найденный серийник, получаем радостное сообщение, что "Registration key accepted". Таким образом находятся серийные номера для всех скринсейверов, созданных в Blumentals Screensaver Factory. Естественно, что адреса в памяти и серийные номера для каждого скринсейвера будут разные, здесь описан просто сам принцип. Также на практике мне пришлось столкнуться с демо-версиями скринсейверов, которые как бы регистрировались, но все равно показывали надоедливые наг-скрины. Но тут уже ничем не помочь, нужны только полные версии.

Как видите ничего сложного, весь процесс ловли серийников занял несколько минут :) Никаких изменений в файлы не вносилось, так что это не является взломом программ. И совершенно не обязательно платить за софт, а тем более за таки поделки!

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

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

Комментарии

Отзывы посетителей сайта о статье
Invector (05.12.2008 в 13:29):
Отлично пишите и обучаете! Спасибо.

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

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

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