Исследование защиты программы Spot On The Mouse
Скриншот программы Spot On The Mouse
Программа Spot On The Mouse предназначена для визуализации действий мыши: перемещение курсора, клик левой или правой кнопкой, а также нажатий на кнопки клавиатуры, например, служебные клавиши или их сочетания. Программа очень пригодится для создания видеопрезентаций, демонстрационных роликов и т.п. Больше не придется добавлять в видео поясняющие комментарии типа "нажмите левую кнопку мыши", "нажмите Ctrl+A" или дублировать голосом свои действия в процессе презентации, все и так будет видно на экране. В незарегистрированном виде программа постоянно вываливает на экран напоминание о необходимости ее купить. Естественно, подобные визуальные помехи и запись экранного видео несовместимы.
Скачиваем дистрибутив, устанавливаем, запускаем. Сразу же при старте открывается окно напоминания, оно же вываливается через равные промежутки времени. Других ограничений у программы нет. Исполняемый файл написан на Visual Basic, поэтому для разнообразия воспользуемся декомпилятором VB Decompiler.
Декомпилируем исполняемый файл
Как мы видим, надоедливая форма имеет приметное название "frmLicence". Сохраняем декомпилированный проект в какую-нибудь папку, и поищем в полученных исходниках что-нибудь, связанное с отображением этой формы.
Открытие формы регистрации
В выделенных строчках недвусмысленно вызывается какая-то проверка, и, если ее условие не выполнено, то переменной tmrLic.Enabled присваивается значение "истина", а затем отображается форма регистрации. Логично предположить, что это выполняется проверка зарегистрированности, после чего взводится таймер для периодического надоедливого напоминания и сразу же открывается само напоминание. Все в точности так, как ведет себя программа. Адреса исполняемых команд указаны, теперь самое время воспользоваться дизассемблером и посмотреть, как код на Visual Basic выглядит в ассемблерном варианте:
Code (Assembler) : Убрать нумерацию
- .text:00472E0D push dword ptr [ebp-1Ch]
- .text:00472E10 call sub_40C578
- .text:00472E15 call __vbaSetSystemError
- .text:00472E1A loc_472E1A:
- ; Конструкция из листинга
- ; loc_00472E1E: If var_14 <> 0 Then GoTo loc_00472ECE
- .text:00472E1A cmp [ebp-14h], bx
- .text:00472E1E jnz loc_472ECE
- .text:00472E24 mov eax, [ebp+8]
- .text:00472E27 push eax
- .text:00472E28 mov ecx, [eax]
- .text:00472E2A call dword ptr [ecx+34Ch]
- .text:00472E30 push eax
- .text:00472E31 lea eax, [ebp-40h]
- .text:00472E34 push eax
Проверка введенного серийника выполняется при нажатии кнопки "Close" в форме регистрации. Значит надо поискать в файле исходника этой формы какую-нибудь функцию, ответственную за обработку нажатия на кнопку "Close". Долго искать не пришлось:
Проверка серийного номера
Тут будет достаточно школьного курса Бейсика, чтобы понять выделенные строчки. Для тех, кто все-таки прогуливал уроки информатики, поясняю: берется значение из поля ввода (введенный серийник), затем он приводится к нижнему регистру, от него отрезаются все лишние пробелы и результат сравнивается со строкой "удалено-по-просьбе-автора". И все, больше никаких проверок не делается. Если строки совпали, то в реестр и ini-файл заносятся некие данные. Что-то мне подсказывает, что это и есть проверка серийного номера.
Программа успешно зарегистрирована
Ну так и есть. Строка "удалено-по-просьбе-автора" является единственным и неповторимым серийным номером, который может быть использован для регистрации программы. Я даже не знаю как это прокомментировать. Судя по назначению и качеству исполнения программы, автор давно преодолел уровень новичка, а вот защита по сложности напоминает "Hello, world". Впрочем, все поставленные цели мы достигли и спасибо автору за полезную программу.
Просмотров: 6768 | Комментариев: 15
Метки: исследование защиты, система
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
VANS
(17.07.2015 в 01:51):
Сдохнуть от того что его софт крякнули? Премию Дарвина этому господину.
X-Wing Top Ace
(07.01.2015 в 10:12):
Ну и ну... Как пишут в подобных случаях сетевые дЭбилы - ржунимагу.
Если действительно "аффтару" это грозит... Накодить заведомо ламерскую регистрацию с единственным и неповторимым серийником и потом подохнуть с голодухи из-за его утечки - таких кандидатов на премию Дарвина вроде еще не номинировалось!
Станислав
(01.01.2015 в 14:02):
Оставили без хлеба эуропэйца, некрасиво)))
ManHunter
(01.01.2015 в 12:00):
Да ладно, чел нормально попросил, без наездов.
Doxtup
(01.01.2015 в 06:12):
Бугага - выложил кряк убил шмароварщика )))
Бедняга, может ему оливье засласть с нового года ? Эй мистер 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, жду новых интересных статей по данной тематике ?
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.
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):
Похоже, как раз тот случай, когда действительно пришлось материться в коде - хорошего варианта с подменой значений не придумалось и у меня, по крайней мере, с ходу.
Я тоже не знаю, как это прокомментировать. ;)
Ну автор же ваську валяет, т.е. пишет на Бейсике. Хотя суметь на нем накодить такую полезную софтину...
Noobie
(28.12.2014 в 05:54):
Вторая программа Golden Ratio того же автора ломается, точнее, регистрируется иначе, но так же просто. Вычислять серийник было лень, а вот добавить параметр в инишку LcKy=d4q... и т.д., который создается при вводе любого "правильного" серийника (если временно обойти проверку) и лежит в открытом виде, не составляет труда.
ManHunter
(28.12.2014 в 02:41):
Угу, только здесь это НЕ работает.
Anonymous
(28.12.2014 в 02:37):
Для программ, написанных на бейсике, есть отличная тулза vbaStrCmp, которая пишет в лог все операции сравнения строк, произведенные программой. Достаточно ввести любое имя и серийник от балды и посмотреть, с чем он сравнивается - в 90% случаев сравниваться он будет с тем серийником, который соответствует введенному имени.
Добавить комментарий
Заполните форму для добавления комментария