Blog. Just Blog

Исследование защиты программы Spot On The Mouse

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

Программа Spot On The Mouse предназначена для визуализации действий мыши: перемещение курсора, клик левой или правой кнопкой, а также нажатий на кнопки клавиатуры, например, служебные клавиши или их сочетания. Программа очень пригодится для создания видеопрезентаций, демонстрационных роликов и т.п. Больше не придется добавлять в видео поясняющие комментарии типа "нажмите левую кнопку мыши", "нажмите Ctrl+A" или дублировать голосом свои действия в процессе презентации, все и так будет видно на экране. В незарегистрированном виде программа постоянно вываливает на экран напоминание о необходимости ее купить. Естественно, подобные визуальные помехи и запись экранного видео несовместимы.

Скачиваем дистрибутив, устанавливаем, запускаем. Сразу же при старте открывается окно напоминания, оно же вываливается через равные промежутки времени. Других ограничений у программы нет. Исполняемый файл написан на Visual Basic, поэтому для разнообразия воспользуемся декомпилятором VB Decompiler.

Декомпилируем исполняемый файл
Декомпилируем исполняемый файл

Как мы видим, надоедливая форма имеет приметное название "frmLicence". Сохраняем декомпилированный проект в какую-нибудь папку, и поищем в полученных исходниках что-нибудь, связанное с отображением этой формы.

Открытие формы регистрации
Открытие формы регистрации

В выделенных строчках недвусмысленно вызывается какая-то проверка, и, если ее условие не выполнено, то переменной tmrLic.Enabled присваивается значение "истина", а затем отображается форма регистрации. Логично предположить, что это выполняется проверка зарегистрированности, после чего взводится таймер для периодического надоедливого напоминания и сразу же открывается само напоминание. Все в точности так, как ведет себя программа. Адреса исполняемых команд указаны, теперь самое время воспользоваться дизассемблером и посмотреть, как код на Visual Basic выглядит в ассемблерном варианте:
  1. .text:00472E0D                 push    dword ptr [ebp-1Ch]
  2. .text:00472E10                 call    sub_40C578
  3. .text:00472E15                 call    __vbaSetSystemError
  4. .text:00472E1A loc_472E1A:
  5. ; Конструкция из листинга
  6. ; loc_00472E1E: If var_14 <> 0 Then GoTo loc_00472ECE
  7. .text:00472E1A                 cmp     [ebp-14h], bx
  8. .text:00472E1E                 jnz     loc_472ECE
  9. .text:00472E24                 mov     eax, [ebp+8]
  10. .text:00472E27                 push    eax
  11. .text:00472E28                 mov     ecx, [eax]
  12. .text:00472E2A                 call    dword ptr [ecx+34Ch]
  13. .text:00472E30                 push    eax
  14. .text:00472E31                 lea     eax, [ebp-40h]
  15. .text:00472E34                 push    eax
Надо заменить условный переход по адресу 00472E1E на безусловный, чтобы условие активации напоминания не выполнилось. Пропатчим файл и запустим. Никаких окон с напоминанием не появляется, цель достигнута. Но это один вариант "лечения", при следующем обновлении программы придется патчить заново. Поэтому попробуем выяснить алгоритм генерации или проверки серийного номера.

Проверка введенного серийника выполняется при нажатии кнопки "Close" в форме регистрации. Значит надо поискать в файле исходника этой формы какую-нибудь функцию, ответственную за обработку нажатия на кнопку "Close". Долго искать не пришлось:

Проверка серийного номера
Проверка серийного номера

Тут будет достаточно школьного курса Бейсика, чтобы понять выделенные строчки. Для тех, кто все-таки прогуливал уроки информатики, поясняю: берется значение из поля ввода (введенный серийник), затем он приводится к нижнему регистру, от него отрезаются все лишние пробелы и результат сравнивается со строкой "удалено-по-просьбе-автора". И все, больше никаких проверок не делается. Если строки совпали, то в реестр и ini-файл заносятся некие данные. Что-то мне подсказывает, что это и есть проверка серийного номера.

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

Ну так и есть. Строка "удалено-по-просьбе-автора" является единственным и неповторимым серийным номером, который может быть использован для регистрации программы. Я даже не знаю как это прокомментировать. Судя по назначению и качеству исполнения программы, автор давно преодолел уровень новичка, а вот защита по сложности напоминает "Hello, world". Впрочем, все поставленные цели мы достигли и спасибо автору за полезную программу.

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

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

Комментарии

Отзывы посетителей сайта о статье
VANS (17.07.2015 в 01:51):
Сдохнуть от того что его софт крякнули? Премию Дарвина этому господину.
X-Wing Top Ace (07.01.2015 в 10:12):
ЦитатаAre you trying to starve me to death?!?

Ну и ну... Как пишут в подобных случаях сетевые дЭбилы - ржунимагу.

Если действительно "аффтару" это грозит... Накодить заведомо ламерскую регистрацию с единственным и неповторимым серийником и потом подохнуть с голодухи из-за его утечки - таких кандидатов на премию Дарвина вроде еще не номинировалось!
Станислав (01.01.2015 в 14:02):
Оставили без хлеба эуропэйца, некрасиво)))
ManHunter (01.01.2015 в 12:00):
Да ладно, чел нормально попросил, без наездов.
Doxtup (01.01.2015 в 06:12):
ЦитатаIt is a crime to publish a licence key! I am the programmer of this software. Are you trying to starve me to death?!?
Please remove the licence key immediately.


Бугага - выложил кряк убил шмароварщика )))
Бедняга, может ему оливье засласть с нового года ? Эй мистер do you like the olivie ? This grade russian food)
Сорри за мой английский.
DICI BF (31.12.2014 в 21:28):
Noobie, а где этот .ini (С LcKy) находится?
531269045 (31.12.2014 в 20:37):
Noobie, мир  ?

ManHunter, жду новых интересных статей по данной тематике  ?
ManHunter (31.12.2014 в 20:29):
Ok, keys removed from text. Images will be blured after holidays. Eat heartily.
ghsd@fhugi.com (31.12.2014 в 19:25):
It is a crime to publish a licence key! I am the programmer of this software. Are you trying to starve me to death?!?
Please remove the licence key immediately.
Noobie (31.12.2014 в 16:52):
531269045, Вы не видите разницы между кряком и регой? :-) Какие бы ни были сериалы, результат будет один и тот же - запись фиксированного значения LcKy и ничего более. Что и требовалось доказать.
531269045 (29.12.2014 в 18:28):
Noobie, для Golden Ratio v 3.1.3 просто удалить (NOP) условный переход jz  loc_4E0EC3 по адресу 004E0B95, и регистрация данными на свой вкус ;)
X-Wing Top Ace (28.12.2014 в 11:36):
ЦитатаНадо заменить условный переход по адресу 00472E1E на безусловный, чтобы условие активации напоминания не выполнилось.

Похоже, как раз тот случай, когда действительно пришлось материться в коде - хорошего варианта с подменой значений не придумалось и у меня, по крайней мере, с ходу.

ЦитатаСтрока "af730404" является единственным и неповторимым серийным номером

Я тоже не знаю, как это прокомментировать. ;)
Ну автор же ваську валяет, т.е. пишет на Бейсике. Хотя суметь на нем накодить такую полезную софтину...
Noobie (28.12.2014 в 05:54):
Вторая программа Golden Ratio того же автора ломается, точнее, регистрируется иначе, но так же просто. Вычислять серийник было лень, а вот добавить параметр в инишку LcKy=d4q... и т.д., который создается при вводе любого "правильного" серийника (если временно обойти проверку) и лежит в открытом виде, не составляет труда.
ManHunter (28.12.2014 в 02:41):
Угу, только здесь это НЕ работает.
Anonymous (28.12.2014 в 02:37):
Для программ, написанных на бейсике, есть отличная тулза vbaStrCmp, которая пишет в лог все операции сравнения строк, произведенные программой. Достаточно ввести любое имя и серийник от балды и посмотреть, с чем он сравнивается - в 90% случаев сравниваться он будет с тем серийником, который соответствует введенному имени.

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

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

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