Исследование защиты программы Hide Window Plus
Скриншот программы Hide Window Plus
Программа Hide Window Plus предназначена для быстрого скрытия окон различных приложений по нажатию горячей клавиши или по клику правой кнопкой мышки на кнопке закрытия окна. Это бывает полезно, когда какое-нибудь чудило пытается заглядывать вам через плечо, или на горизонте офиса появляется начальник. Кроме окон программа умеет также скрывать значки в трее, что дает еще больше безопасности. Как вы уже догадались, раз программа появилась в этой рубрике сайта, значит с ней что-то не так.
Скачиваем дистрибутив, устанавливаем, смотрим что у нас есть. В окне настроек есть ссылка "Enter registration key", в открывшееся окно ввода надо ввести имя пользователя, адрес email и регистрационный ключ. На ввод любых данных программа благодарит за регистрацию и предлагает перезапустить себя для проверки регистрационных данных. После перезапуска, естественно, программа остается незарегистрированной, и никаких сообщений об ошибке не выдает. Это не есть хорошо. Отправим файл в дизассемблер и поищем что-нибудь еще, связанное с регистрацией. Поиск строки "registered" наводит нас на следующие данные:
Строки в исполняемом файле
Очевидно, что тут названия проверяемых ключей, а главное строка, которая должна где-то появиться, если регистрация правильная. Посмотрим на это место получше в дизассемблере:
Code (Assembler) : Убрать нумерацию
- ...
- CODE:004836A6 lea eax, [ebp+var_8]
- CODE:004836A9 push eax
- CODE:004836AA mov ecx, offset dword_4837A8
- CODE:004836AF mov edx, offset aLicense_2 ; "License"
- CODE:004836B4 mov eax, ebx
- CODE:004836B6 mov edi, [eax]
- CODE:004836B8 call dword ptr [edi]
- CODE:004836BA mov eax, [ebp+var_8]
- CODE:004836BD push eax
- CODE:004836BE push 0
- CODE:004836C0 lea eax, [ebp+var_C]
- CODE:004836C3 push eax
- CODE:004836C4 mov ecx, offset aEmail_0 ; "Email"
- CODE:004836C9 mov edx, offset aLicense_2 ; "License"
- CODE:004836CE mov eax, ebx
- CODE:004836D0 mov edi, [eax]
- CODE:004836D2 call dword ptr [edi]
- CODE:004836D4 mov eax, [ebp+var_C]
- CODE:004836D7 push eax
- CODE:004836D8 push 0
- CODE:004836DA lea eax, [ebp+var_10]
- CODE:004836DD push eax
- CODE:004836DE mov ecx, offset aName_0 ; "Name"
- CODE:004836E3 mov edx, offset aLicense_2 ; "License"
- CODE:004836E8 mov eax, ebx
- CODE:004836EA mov edi, [eax]
- CODE:004836EC call dword ptr [edi]
- CODE:004836EE mov edx, [ebp+var_10]
- CODE:004836F1 mov eax, esi
- CODE:004836F3 pop ecx
- ; Откуда-то читаем данные о регистрации, затем отправляем их на проверку
- CODE:004836F4 call sub_483400
- ; Сохранить результат проверки в переменной-флаге
- CODE:004836F9 mov [esi+46Ch], al
- ; Если функция проверки вернула AL не равный 0, то все правильно
- CODE:004836FF cmp byte ptr [esi+46Ch], 0
- ; Иначе программа не зарегистрирована
- CODE:00483706 jz short loc_48376F
- CODE:00483708 mov eax, [esi+458h]
- CODE:0048370E call sub_457CC8
- CODE:00483713 push offset aThisProgramIsR
- ; "This program is registered to "
- CODE:00483718 push 0
- CODE:0048371A lea eax, [ebp+var_18]
- CODE:0048371D push eax
- ...
Второй способ - пройдем функцию проверки регистрации под отладчиком. На этапе последней проверки
Code (Assembler) : Убрать нумерацию
- CODE:00483472 mov eax, [ebp+arg_0]
- CODE:00483475 mov edx, [ebp+var_C]
- CODE:00483478 call sub_404464
- CODE:0048347D setz bl
Данные на стеке
Мы видим полный путь к файлу, где хранятся все настройки программы и введенные регистрационные данные, видим наш левый серийник, а также строчку "5F430277", с которой и сравнивается введенный серийный номер. Попробуем заново зарегистрировать программу, но уже в качестве серийного номера используем найденную строку. После перезапуска программа оказывается зарегистрированной.
Программа успешно зарегистрирована
Остался третий способ - надо узнать, как получилась строка правильного серийного номера. Снова медитируем под отладчиком на содержимое стека и видим там более длинную строку "5F4302772CF7E0DE8A0C3C71DB4055FE", первые 8 символов которой и есть наш серийный номер, а также другую строку, составленную из регистрационного имени и адреса email. Видимо из этой строки как-то получается первая строка. Первое, что я попробовал наугад - это MD5 от строки. И, как ни странно, им оказалась строка "5F4302772CF7E0DE8A0C3C71DB4055FE". Вот и вся защита. Берем регистрационное имя, в конец к нему дописываем регистрационный email, от полученной строки считаем MD5. Первые 8 символов результата в верхнем регистре и есть серийный номер. Кейген теперь вы сможете написать самостоятельно.
Просмотров: 5701 | Комментариев: 15
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
xamtra
(07.09.2016 в 01:10):
Thank you finally I found my own serial key. Much appreciated.
Tarkett
(03.11.2012 в 10:37):
У меня зврегилась с первого раза
Вводил эти данные:
Name - giveawayoftheday
Email - giveawayoftheday
Key - 1A54F846
Прога сказала что для регистрации ее нужно перезапустить,перезапустил,активация не слетела )
Вводил эти данные:
Name - giveawayoftheday
Email - giveawayoftheday
Key - 1A54F846
Прога сказала что для регистрации ее нужно перезапустить,перезапустил,активация не слетела )
Афоня
(15.06.2012 в 16:48):
В обычном тотал коммандере просчитал МД5 и прога зарегена. ;)
Спасибо за статью!
Спасибо за статью!
SVS
(06.03.2012 в 19:30):
DimitarSerg, а я бы заказала статью про любую прожку, которая имеет дурную привычку привязываться к HWID.
ManHunter
(25.02.2012 в 19:47):
Чем Kanal от PEiD не устраивает? Тоже все прекрасно показывает. Только даже до него дело не дошло, анализ закончился на первой же попытке.
Voffka
(25.02.2012 в 11:40):
Для Ольки есть плагин Hash Sniffer http://forum.tuts4you.com/topi...romsearch__1
Это на будущее, чтоб не пришлось гадать чем захэшировано.
Это на будущее, чтоб не пришлось гадать чем захэшировано.
ManHunter
(25.02.2012 в 09:56):
"Короче, Склифосовский!" :) Перефразировал, чтобы не было непонимания.
brute
(25.02.2012 в 09:32):
нашёл это правило: http://russkiy-na-5.ru/articles/180
в изъявительном наклонении пишется Е, а в повелительном И. Вот и разберись из контекста, какое тут наклонение :)
в изъявительном наклонении пишется Е, а в повелительном И. Вот и разберись из контекста, какое тут наклонение :)
ManHunter
(23.02.2012 в 19:07):
Никакой ошибки.
"Кейген теперь [Вы легко] напишЕте самостоятельно"
но
"Теперь напишИте кейген самостоятельно"
"Кейген теперь [Вы легко] напишЕте самостоятельно"
но
"Теперь напишИте кейген самостоятельно"
brute
(23.02.2012 в 18:41):
нашёл ошибку :^)
Кейген теперь напишЕте самостоятельно.
Кейген теперь напишЕте самостоятельно.
Voffka
(22.02.2012 в 00:22):
DimitarSerg, разбор блочных шифров ни чем не отличается от разбора любой другой защиты, только проще, т.к. все эти алгоритмы уже разобраны и реализованы на всех возможных языках, остается только понять что нужно зашифровать\расшифровать и тупо подставить ключ. Уж лучше про ассиметричное шифрование.
ManHunter
(20.02.2012 в 17:38):
Может у кого-то и есть желание проводить дни и недели в отладчике, ковыряясь в шифрах, а мне есть куда тратить свое время.
DimitarSerg
(20.02.2012 в 17:30):
Интересно, но просто...
Мы знаем твои нехилые возможности, может что-то поинтереснее разберешь ? Хотелось бы увидеть разбор рег.схемы на основе блочных шифров типа RijnDael, Des :)
Мы знаем твои нехилые возможности, может что-то поинтереснее разберешь ? Хотелось бы увидеть разбор рег.схемы на основе блочных шифров типа RijnDael, Des :)
AyTkACT
(20.02.2012 в 07:41):
Как обычно всё расжёвано и дополнить нечем. =D
Добавить комментарий
Заполните форму для добавления комментария
SET "BREAKPOINT" AT 00483472
1. PRESS "RUN" 3 TIMES TO OPEN HDP
2. ENTER ANY REGISTRATION KEY, KEEP PRESSING OK UNTIL IT CLOSES COMPLETELY
3. NOW CLICK "RESTART"
4. PRESS "RUN" 2 TIMES
5. LOOK RIGHT DOWN CORNER STACK WINDOW FOR CORRECT REGISTRATION KEY
6. PRESS "RESTART" BUTTON TO RUN THIS PROCEDURE AGAIN.
Proof:
Your name: xamtra
Email: testsuccess@manhunt.ru
License key: 04E6ED43